Skip to content

Commit

Permalink
Try #19450:
Browse files Browse the repository at this point in the history
  • Loading branch information
bors[bot] authored Apr 4, 2023
2 parents d6dc3a1 + d4f8ada commit 3ec5f23
Show file tree
Hide file tree
Showing 23 changed files with 326 additions and 61 deletions.
15 changes: 13 additions & 2 deletions cpu/esp32/Makefile.include
Original file line number Diff line number Diff line change
Expand Up @@ -203,10 +203,15 @@ endif
CFLAGS += -Dasm=__asm
CFLAGS += -Dtypeof=__typeof__
CFLAGS += -D_CONST=const

include $(RIOTBASE)/makefiles/toolchain/gnu.inc.mk
# TODO no relaxation yet
ifneq (,$(filter riscv%,$(TARGET_ARCH)))
CFLAGS += -mno-relax -march=rv32imc -mabi=ilp32 -DRISCV_NO_RELAX
ifeq (12,$(shell command -v $(CC) > /dev/null && $(CC) -dumpversion | cut -d . -f 1))
RISCV_MARCH = rv32imc_zicsr
else
RISCV_MARCH = rv32imc
endif
CFLAGS += -mno-relax -march=$(RISCV_MARCH) -mabi=ilp32 -DRISCV_NO_RELAX
endif

ifneq (,$(filter xtensa%,$(TARGET_ARCH)))
Expand Down Expand Up @@ -243,6 +248,12 @@ endif

LINKFLAGS += -nostdlib -lgcc -Wl,-gc-sections

# all ESP32x SoCs have to load executable code into IRAM
# warning 'LOAD segment with RWX permissions' has to be disabled therefore
ifeq (12,$(shell command -v $(CC) > /dev/null && $(CC) -dumpversion | cut -d . -f 1))
LINKFLAGS += -Wl,--no-warn-rwx-segments
endif

# Libraries needed when using esp_wifi_any pseudomodule
ifneq (,$(filter esp_wifi_any,$(USEMODULE)))
LINKFLAGS += -L$(ESP32_SDK_LIB_WIFI_DIR)/$(CPU_FAM)
Expand Down
11 changes: 10 additions & 1 deletion cpu/esp32/bootloader/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -164,10 +164,19 @@ INCLUDES = \
# CONFIG_ESPTOOLPY_FLASHFREQ_* and CONFIG_FLASHMODE_*
CFLAGS = -include '$(RIOTBUILD_CONFIG_HEADER_C)' \

# TODO: required to be able to compile with GCC 12.1, remove them after upgrade to ESP-IDF 5.1
CFLAGS += -Wno-error=format=
CFLAGS += -Wno-format

ifneq (,$(filter riscv32%,$(TARGET_ARCH)))
ifeq (12,$(shell command -v $(CC) > /dev/null && $(CC) -dumpversion | cut -d . -f 1))
RISCV_MARCH = rv32imc_zicsr
else
RISCV_MARCH = rv32imc
endif
INCLUDES += -I$(ESP32_SDK_DIR)/components/riscv/include
CFLAGS += -DCONFIG_IDF_TARGET_ARCH_RISCV
CFLAGS += -march=rv32imc
CFLAGS += -march=$(RISCV_MARCH)
CFLAGS += -Wno-error=format=
CFLAGS += -nostartfiles
CFLAGS += -Wno-format
Expand Down
15 changes: 14 additions & 1 deletion cpu/esp32/esp-idf/esp_idf_cflags.mk
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,24 @@ CFLAGS += -Wno-enum-compare
# those are false positives.
CFLAGS += -Wno-cast-align

# TODO: required to be able to compile with GCC 12.1, remove them after upgrade to ESP-IDF 5.1
CFLAGS += -Wno-attributes
CFLAGS += -Wno-enum-conversion
CFLAGS += -Wno-error=format=
CFLAGS += -Wno-format
CFLAGS += -Wno-use-after-free
CFLAGS += -Wno-incompatible-pointer-types

# additional CFLAGS required for RISC-V architecture
ifneq (,$(filter riscv32%,$(TARGET_ARCH)))
ifeq (12,$(shell command -v $(CC) > /dev/null && $(CC) -dumpversion | cut -d . -f 1))
RISCV_MARCH = rv32imc_zicsr
else
RISCV_MARCH = rv32imc
endif
INCLUDES += -I$(ESP32_SDK_DIR)/components/riscv/include
CFLAGS += -DCONFIG_IDF_TARGET_ARCH_RISCV
CFLAGS += -march=rv32imc
CFLAGS += -march=$(RISCV_MARCH)
CFLAGS += -Wno-error=format=
CFLAGS += -nostartfiles
CFLAGS += -Wno-format
Expand Down
2 changes: 1 addition & 1 deletion cpu/esp32/esp-idf/esp_idf_support.c
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ void IRAM_ATTR esp_log_writev(esp_log_level_t level,
* We use the log level set for the given tag instead of using
* the given log level.
*/
esp_log_level_t act_level = LOG_DEBUG;
esp_log_level_t act_level = (esp_log_level_t)LOG_DEBUG;
size_t i;
for (i = 0; i < ARRAY_SIZE(_log_levels); i++) {
if (strcmp(tag, _log_levels[i].tag) == 0) {
Expand Down
4 changes: 4 additions & 0 deletions cpu/esp32/esp-idf/nvs_flash/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@ include ../esp_idf.mk
# those are false positives.
CFLAGS += -Wno-cast-align

# TODO: required to be able to compile with GCC 12.1, remove them after upgrade to ESP-IDF 5.1
CFLAGS += -Wno-error=format=
CFLAGS += -Wno-format

# additional CFLAGS required for RISC-V architecture
ifneq (,$(filter riscv32%,$(TARGET_ARCH)))
CFLAGS += -Wno-error=format=
Expand Down
10 changes: 0 additions & 10 deletions cpu/esp32/include/periph_cpu.h
Original file line number Diff line number Diff line change
Expand Up @@ -212,16 +212,6 @@ typedef enum {
#define GPIO_DRIVE_20 GPIO_DRIVE_STRONG /**< 20 mA (default) */
#define GPIO_DRIVE_30 GPIO_DRIVE_STRONGEST /**< 30 mA */

#define HAVE_GPIO_IRQ_TRIG_T
typedef enum {
GPIO_TRIGGER_NONE = 0,
GPIO_TRIGGER_EDGE_RISING = 1,
GPIO_TRIGGER_EDGE_FALLING = 2,
GPIO_TRIGGER_EDGE_BOTH = 3,
GPIO_TRIGGER_LEVEL_LOW = 4,
GPIO_TRIGGER_LEVEL_HIGH = 5
} gpio_irq_trig_t;

/* END: GPIO LL overwrites */

#endif /* ndef DOXYGEN */
Expand Down
26 changes: 20 additions & 6 deletions cpu/esp32/periph/adc.c
Original file line number Diff line number Diff line change
Expand Up @@ -131,16 +131,22 @@ int adc_init(adc_t line)
}

if (_adc_hw[rtcio].adc_ctrl == ADC_UNIT_1) {
/* ensure compatibility of given adc_channel_t with adc1_channel_t */
assert(_adc_hw[rtcio].adc_channel < (adc_channel_t)ADC1_CHANNEL_MAX);
/* initialize the ADC1 unit if needed */
_adc1_ctrl_init();
/* set the attenuation and configure its associated GPIO pin mux */
adc1_config_channel_atten(_adc_hw[rtcio].adc_channel, ADC_ATTEN_DB_11);
adc1_config_channel_atten((adc1_channel_t)_adc_hw[rtcio].adc_channel,
ADC_ATTEN_DB_11);
}
else if (_adc_hw[rtcio].adc_ctrl == ADC_UNIT_2) {
/* ensure compatibility of given adc_channel_t with adc2_channel_t */
assert(_adc_hw[rtcio].adc_channel < (adc_channel_t)ADC2_CHANNEL_MAX);
/* initialize the ADC2 unit if needed */
_adc2_ctrl_init();
/* set the attenuation and configure its associated GPIO pin mux */
adc2_config_channel_atten(_adc_hw[rtcio].adc_channel, ADC_ATTEN_DB_11);
adc2_config_channel_atten((adc2_channel_t)_adc_hw[rtcio].adc_channel,
ADC_ATTEN_DB_11);
}
else {
return -1;
Expand All @@ -165,13 +171,17 @@ int32_t adc_sample(adc_t line, adc_res_t res)

if (_adc_hw[rtcio].adc_ctrl == ADC_UNIT_1) {
adc1_config_width(_adc_esp_res_map[res].res);
raw = adc1_get_raw(_adc_hw[rtcio].adc_channel);
/* ensure compatibility of given adc_channel_t with adc1_channel_t */
assert(_adc_hw[rtcio].adc_channel < (adc_channel_t)ADC1_CHANNEL_MAX);
raw = adc1_get_raw((adc1_channel_t)_adc_hw[rtcio].adc_channel);
if (raw < 0) {
return -1;
}
}
else if (_adc_hw[rtcio].adc_ctrl == ADC_UNIT_2) {
if (adc2_get_raw(_adc_hw[rtcio].adc_channel,
/* ensure compatibility of given adc_channel_t with adc2_channel_t */
assert(_adc_hw[rtcio].adc_channel < (adc_channel_t)ADC2_CHANNEL_MAX);
if (adc2_get_raw((adc2_channel_t)_adc_hw[rtcio].adc_channel,
_adc_esp_res_map[res].res, &raw) < 0) {
return -1;
}
Expand All @@ -189,10 +199,14 @@ int adc_set_attenuation(adc_t line, adc_atten_t atten)
assert(rtcio != RTCIO_NA);

if (_adc_hw[rtcio].adc_ctrl == ADC_UNIT_1) {
return adc1_config_channel_atten(_adc_hw[rtcio].adc_channel, atten);
/* ensure compatibility of given adc_channel_t with adc1_channel_t */
assert(_adc_hw[rtcio].adc_channel < (adc_channel_t)ADC1_CHANNEL_MAX);
return adc1_config_channel_atten((adc1_channel_t)_adc_hw[rtcio].adc_channel, atten);
}
else if (_adc_hw[rtcio].adc_ctrl == ADC_UNIT_2) {
return adc2_config_channel_atten(_adc_hw[rtcio].adc_channel, atten);
/* ensure compatibility of given adc_channel_t with adc2_channel_t */
assert(_adc_hw[rtcio].adc_channel < (adc_channel_t)ADC2_CHANNEL_MAX);
return adc2_config_channel_atten((adc2_channel_t)_adc_hw[rtcio].adc_channel, atten);
}

return -1;
Expand Down
4 changes: 2 additions & 2 deletions cpu/esp32/periph/flashpage.c
Original file line number Diff line number Diff line change
Expand Up @@ -76,8 +76,8 @@ void IRAM_ATTR esp_flashpage_init(void)
p_addr, 64, p_numof, 0);
Cache_Resume_ICache(autoload);

DEBUG("%s DCache MMU set paddr=%08x vaddr=%08x size=%d n=%u\n", __func__,
p_addr, (uint32_t)&_fp_mem_start, CONFIG_ESP_FLASHPAGE_CAPACITY,
DEBUG("%s DCache MMU set paddr=%08"PRIx32" vaddr=%08"PRIx32" size=%d n=%"PRIu32"\n",
__func__, p_addr, (uint32_t)&_fp_mem_start, CONFIG_ESP_FLASHPAGE_CAPACITY,
p_numof);

if (res != ESP_OK) {
Expand Down
4 changes: 2 additions & 2 deletions cpu/esp32/periph/gpio.c
Original file line number Diff line number Diff line change
Expand Up @@ -229,8 +229,8 @@ int gpio_init(gpio_t pin, gpio_mode_t mode)
(mode == GPIO_OD_PU) ||
(mode == GPIO_IN_OD_PU)) ? GPIO_PULLUP_ENABLE
: GPIO_PULLUP_DISABLE;
cfg.pull_down_en = (mode == GPIO_IN_PD) ? GPIO_PULLUP_ENABLE
: GPIO_PULLUP_DISABLE;
cfg.pull_down_en = (mode == GPIO_IN_PD) ? GPIO_PULLDOWN_ENABLE
: GPIO_PULLDOWN_DISABLE;
cfg.intr_type = GPIO_INTR_DISABLE;

#ifdef ESP_PM_WUP_PINS
Expand Down
20 changes: 18 additions & 2 deletions cpu/esp32/periph/gpio_ll.c
Original file line number Diff line number Diff line change
Expand Up @@ -149,9 +149,25 @@ int gpio_ll_init(gpio_port_t port, uint8_t pin, const gpio_conf_t *conf)
}

/* if output pin, try to set drive strength */
gpio_drive_cap_t strength;
switch (conf->drive_strength) {
case GPIO_DRIVE_WEAKEST:
strength = GPIO_DRIVE_CAP_0;
break;
case GPIO_DRIVE_WEAK:
strength = GPIO_DRIVE_CAP_1;
break;
case GPIO_DRIVE_STRONG:
strength = GPIO_DRIVE_CAP_2;
break;
case GPIO_DRIVE_STRONGEST:
strength = GPIO_DRIVE_CAP_3;
break;
default:
strength = GPIO_DRIVE_CAP_DEFAULT;
}
if ((cfg.pin_bit_mask & SOC_GPIO_VALID_OUTPUT_GPIO_MASK) &&
(esp_idf_gpio_set_drive_capability(gpio,
conf->drive_strength) != ESP_OK)) {
(esp_idf_gpio_set_drive_capability(gpio, strength) != ESP_OK)) {
return -ENOTSUP;
}

Expand Down
22 changes: 21 additions & 1 deletion cpu/esp32/periph/gpio_ll_irq.c
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,27 @@ int gpio_ll_irq(gpio_port_t port, uint8_t pin, gpio_irq_trig_t trig,
gpio_isr_service_installed = true;

/* set the interrupt type for the pin */
if (esp_idf_gpio_set_intr_type(gpio, trig) != ESP_OK) {
gpio_int_type_t type;
switch (trig) {
case GPIO_TRIGGER_EDGE_FALLING:
type = GPIO_INTR_NEGEDGE;
break;
case GPIO_TRIGGER_EDGE_RISING:
type = GPIO_INTR_POSEDGE;
break;
case GPIO_TRIGGER_EDGE_BOTH:
type = GPIO_INTR_ANYEDGE;
break;
case GPIO_TRIGGER_LEVEL_HIGH:
type = GPIO_INTR_HIGH_LEVEL;
break;
case GPIO_TRIGGER_LEVEL_LOW:
type = GPIO_INTR_LOW_LEVEL;
break;
default:
type = GPIO_INTR_DISABLE;
}
if (esp_idf_gpio_set_intr_type(gpio, type) != ESP_OK) {
return -1;
}

Expand Down
2 changes: 1 addition & 1 deletion cpu/esp32/periph/rtt.c
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ extern uint32_t rtc_clk_slow_freq_get_hz(void);
/* forward declaration of functions */
void rtt_restore_counter(bool sys_time);
static void _rtt_update_hw_alarm(void);
static void IRAM_ATTR _rtt_isr(void *arg);
static void _rtt_isr(void *arg);

/* forward declarations of driver functions */
uint64_t _rtc_get_counter(void);
Expand Down
5 changes: 0 additions & 5 deletions cpu/esp32/periph/rtt_hw_rtc.c
Original file line number Diff line number Diff line change
Expand Up @@ -135,13 +135,8 @@ static void _rtc_set_alarm(uint32_t alarm, rtt_cb_t cb, void *arg)
RTCCNTL.slp_timer0 = rtc_alarm & 0xffffffff;
RTCCNTL.slp_timer1.slp_val_hi = rtc_alarm >> 32;

#if __xtensa__
DEBUG("%s %08x%08x \n", __func__,
RTCCNTL.slp_timer1.slp_val_hi, RTCCNTL.slp_timer0);
#else
DEBUG("%s %08x%08x \n", __func__,
(unsigned)RTCCNTL.slp_timer1.slp_val_hi, (unsigned)RTCCNTL.slp_timer0);
#endif

/* enable RTC timer alarm */
RTCCNTL.slp_timer1.main_timer_alarm_en = 1;
Expand Down
4 changes: 2 additions & 2 deletions cpu/esp32/startup.c
Original file line number Diff line number Diff line change
Expand Up @@ -240,8 +240,8 @@ static NORETURN void IRAM system_init (void)

/* set log levels for SDK library outputs */
extern void esp_log_level_set(const char* tag, esp_log_level_t level);
esp_log_level_set("wifi", LOG_DEBUG);
esp_log_level_set("gpio", LOG_DEBUG);
esp_log_level_set("wifi", (esp_log_level_t)LOG_DEBUG);
esp_log_level_set("gpio", (esp_log_level_t)LOG_DEBUG);

/* init watchdogs */
system_wdt_init();
Expand Down
5 changes: 3 additions & 2 deletions cpu/esp32/syscalls.c
Original file line number Diff line number Diff line change
Expand Up @@ -382,8 +382,9 @@ void system_wdt_init(void)
wdt_hal_write_protect_enable(&rwdt);

#if defined(CPU_FAM_ESP32)
DEBUG("%s TIMERG0 wdtconfig0=%08x wdtconfig1=%08x wdtconfig2=%08x "
"wdtconfig3=%08x wdtconfig4=%08x regclk=%08x\n", __func__,
DEBUG("%s TIMERG0 wdtconfig0=%08"PRIx32" wdtconfig1=%08"PRIx32
" wdtconfig2=%08"PRIx32" wdtconfig3=%08"PRIx32
" wdtconfig4=%08"PRIx32" regclk=%08"PRIx32"\n", __func__,
TIMERG0.wdt_config0.val, TIMERG0.wdt_config1.val,
TIMERG0.wdt_config2, TIMERG0.wdt_config3,
TIMERG0.wdt_config4, TIMERG0.clk.val);
Expand Down
10 changes: 5 additions & 5 deletions cpu/esp_common/esp-now/esp_now_netdev.c
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ static bool _esp_now_add_peer(const uint8_t* bssid, uint8_t channel, const uint8

memcpy(peer.peer_addr, bssid, ESP_NOW_ETH_ALEN);
peer.channel = channel;
peer.ifidx = ESP_IF_WIFI_AP;
peer.ifidx = WIFI_IF_AP;

if (esp_now_params.key) {
peer.encrypt = true;
Expand Down Expand Up @@ -391,13 +391,13 @@ esp_now_netdev_t *netdev_esp_now_setup(void)
}

/* set the Station and SoftAP configuration */
result = esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config_sta);
result = esp_wifi_set_config(WIFI_IF_STA, &wifi_config_sta);
if (result != ESP_OK) {
LOG_TAG_ERROR("esp_now", "esp_wifi_set_config station failed with "
"return value %d\n", result);
return NULL;
}
result = esp_wifi_set_config(ESP_IF_WIFI_AP, &wifi_config_ap);
result = esp_wifi_set_config(WIFI_IF_AP, &wifi_config_ap);
if (result != ESP_OK) {
LOG_TAG_ERROR("esp_now",
"esp_wifi_set_config softap failed with return value %d\n",
Expand All @@ -416,7 +416,7 @@ esp_now_netdev_t *netdev_esp_now_setup(void)

#if !ESP_NOW_UNICAST
/* all ESP-NOW nodes get the shared mac address on their station interface */
esp_wifi_set_mac(ESP_IF_WIFI_STA, (uint8_t*)_esp_now_mac);
esp_wifi_set_mac(WIFI_IF_STA, (uint8_t*)_esp_now_mac);
#endif

#endif /* MODULE_ESP_WIFI */
Expand Down Expand Up @@ -471,7 +471,7 @@ int esp_now_set_channel(uint8_t channel)
/* channel is controlled by `esp_now`, try to reconfigure SoftAP */
uint8_t old_channel = wifi_config_ap.ap.channel;
wifi_config_ap.ap.channel = channel;
esp_err_t result = esp_wifi_set_config(ESP_IF_WIFI_AP, &wifi_config_ap);
esp_err_t result = esp_wifi_set_config(WIFI_IF_AP, &wifi_config_ap);
if (result != ESP_OK) {
LOG_TAG_ERROR("esp_now",
"esp_wifi_set_config softap failed with return value %d\n",
Expand Down
Loading

0 comments on commit 3ec5f23

Please sign in to comment.