diff --git a/components/esp_coex/esp32s31/esp_coex_adapter.c b/components/esp_coex/esp32s31/esp_coex_adapter.c new file mode 100644 index 0000000000..858c8714c3 --- /dev/null +++ b/components/esp_coex/esp32s31/esp_coex_adapter.c @@ -0,0 +1,181 @@ +/* + * SPDX-FileCopyrightText: 2022-2026 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include +#include +#include +#include + +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "freertos/queue.h" +#include "freertos/semphr.h" +#include "freertos/portmacro.h" +#include "esp_heap_caps.h" +#include "esp_timer.h" +#include "soc/rtc.h" +#include "esp_private/esp_clk.h" +#include "private/esp_coexist_adapter.h" +#include "esp32s31/rom/ets_sys.h" +#include "private/esp_coexist_debug.h" + +#define TAG "esp_coex_adapter" + +#define OSI_FUNCS_TIME_BLOCKING 0xffffffff + +bool IRAM_ATTR esp_coex_common_env_is_chip_wrapper(void) +{ +#ifdef CONFIG_IDF_ENV_FPGA + return false; +#else + return true; +#endif +} + +void *esp_coex_common_spin_lock_create_wrapper(void) +{ + portMUX_TYPE tmp = portMUX_INITIALIZER_UNLOCKED; + void *mux = malloc(sizeof(portMUX_TYPE)); + + if (mux) { + memcpy(mux, &tmp, sizeof(portMUX_TYPE)); + return mux; + } + return NULL; +} + +uint32_t IRAM_ATTR esp_coex_common_int_disable_wrapper(void *wifi_int_mux) +{ + if (xPortInIsrContext()) { + portENTER_CRITICAL_ISR(wifi_int_mux); + } else { + portENTER_CRITICAL(wifi_int_mux); + } + + return 0; +} + +void IRAM_ATTR esp_coex_common_int_restore_wrapper(void *wifi_int_mux, uint32_t tmp) +{ + if (xPortInIsrContext()) { + portEXIT_CRITICAL_ISR(wifi_int_mux); + } else { + portEXIT_CRITICAL(wifi_int_mux); + } +} + +void IRAM_ATTR esp_coex_common_task_yield_from_isr_wrapper(void) +{ + portYIELD_FROM_ISR(); +} + +void *esp_coex_common_semphr_create_wrapper(uint32_t max, uint32_t init) +{ + return (void *)xSemaphoreCreateCounting(max, init); +} + +void esp_coex_common_semphr_delete_wrapper(void *semphr) +{ + vSemaphoreDelete(semphr); +} + +int32_t esp_coex_common_semphr_take_wrapper(void *semphr, uint32_t block_time_tick) +{ + if (block_time_tick == OSI_FUNCS_TIME_BLOCKING) { + return (int32_t)xSemaphoreTake(semphr, portMAX_DELAY); + } else { + return (int32_t)xSemaphoreTake(semphr, block_time_tick); + } +} + +int32_t esp_coex_common_semphr_give_wrapper(void *semphr) +{ + return (int32_t)xSemaphoreGive(semphr); +} + +void IRAM_ATTR esp_coex_common_timer_disarm_wrapper(void *timer) +{ + ets_timer_disarm(timer); +} + +void esp_coex_common_timer_done_wrapper(void *ptimer) +{ + ets_timer_done(ptimer); +} + +void esp_coex_common_timer_setfn_wrapper(void *ptimer, void *pfunction, void *parg) +{ + ets_timer_setfn(ptimer, pfunction, parg); +} + +void IRAM_ATTR esp_coex_common_timer_arm_us_wrapper(void *ptimer, uint32_t us, bool repeat) +{ + ets_timer_arm_us(ptimer, us, repeat); +} + +uint32_t esp_coex_common_clk_slowclk_cal_get_wrapper(void) +{ + /* The bit width of WiFi light sleep clock calibration is 12 while the one of + * system is 19. It should shift 19 - 12 = 7. + */ + return (esp_clk_slowclk_cal_get() >> (RTC_CLK_CAL_FRACT - SOC_WIFI_LIGHT_SLEEP_CLK_WIDTH)); +} + +void *IRAM_ATTR esp_coex_common_malloc_internal_wrapper(size_t size) +{ + return heap_caps_malloc(size, MALLOC_CAP_8BIT | MALLOC_CAP_DMA | MALLOC_CAP_INTERNAL); +} + +/* static wrapper */ + +static int32_t IRAM_ATTR esp_coex_semphr_take_from_isr_wrapper(void *semphr, void *hptw) +{ + return (int32_t)xSemaphoreTakeFromISR(semphr, hptw); +} + +static int32_t IRAM_ATTR esp_coex_semphr_give_from_isr_wrapper(void *semphr, void *hptw) +{ + return (int32_t)xSemaphoreGiveFromISR(semphr, hptw); +} + +static int esp_coexist_debug_matrix_init_wrapper(int evt, int sig, bool rev) +{ +#if CONFIG_ESP_COEX_GPIO_DEBUG + return esp_coexist_debug_matrix_init(evt, sig, rev); +#else + return ESP_ERR_NOT_SUPPORTED; +#endif +} + +static IRAM_ATTR int esp_coex_common_xtal_freq_get_wrapper(void) +{ + return rtc_clk_xtal_freq_get(); +} + +coex_adapter_funcs_t g_coex_adapter_funcs = { + ._version = COEX_ADAPTER_VERSION, + ._task_yield_from_isr = esp_coex_common_task_yield_from_isr_wrapper, + ._semphr_create = esp_coex_common_semphr_create_wrapper, + ._semphr_delete = esp_coex_common_semphr_delete_wrapper, + ._semphr_take_from_isr = esp_coex_semphr_take_from_isr_wrapper, + ._semphr_give_from_isr = esp_coex_semphr_give_from_isr_wrapper, + ._semphr_take = esp_coex_common_semphr_take_wrapper, + ._semphr_give = esp_coex_common_semphr_give_wrapper, + ._is_in_isr = xPortInIsrContext, + ._malloc_internal = esp_coex_common_malloc_internal_wrapper, + ._free = free, + ._esp_timer_get_time = esp_timer_get_time, + ._env_is_chip = esp_coex_common_env_is_chip_wrapper, + ._timer_disarm = esp_coex_common_timer_disarm_wrapper, + ._timer_done = esp_coex_common_timer_done_wrapper, + ._timer_setfn = esp_coex_common_timer_setfn_wrapper, + ._timer_arm_us = esp_coex_common_timer_arm_us_wrapper, + ._debug_matrix_init = esp_coexist_debug_matrix_init_wrapper, + ._xtal_freq_get = esp_coex_common_xtal_freq_get_wrapper, + ._magic = COEX_ADAPTER_MAGIC, +}; diff --git a/components/esp_coex/include/private/esp_coexist_internal.h b/components/esp_coex/include/private/esp_coexist_internal.h index 026f1f9fe0..eca1cb5fec 100644 --- a/components/esp_coex/include/private/esp_coexist_internal.h +++ b/components/esp_coex/include/private/esp_coexist_internal.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2018-2024 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2018-2026 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -325,6 +325,25 @@ int coex_schm_register_callback(coex_schm_callback_type_t type, void *callback); */ esp_err_t esp_coex_adapter_register(coex_adapter_funcs_t *funcs); +#if CONFIG_COEX_ISO_INT_SCHEME +/** + * @brief Register coexistence dynamic log functions. + * + * @param funcs : coexistence dynamic log functions + * @return : ESP_OK - success, other - failed + */ +esp_err_t esp_coex_dynamic_log_register(void *funcs); + +/** + * @brief Register coexistence iso end wifi callback function. + * + * @param is_reg : register or unregister + * @param funcs : coexistence iso end wifi function + * @return : ESP_OK - success, other - failed + */ +esp_err_t esp_coex_configure_iso_end_wifi_cb(bool is_reg, void *funcs); +#endif /* CONFIG_COEX_ISO_INT_SCHEME */ + #if CONFIG_EXTERNAL_COEX_ENABLE /** * @brief Set external coexistence advanced information, like working mode. diff --git a/components/esp_coex/test_md5/test_md5.sh b/components/esp_coex/test_md5/test_md5.sh index 429796bdfa..dd3deb8875 100755 --- a/components/esp_coex/test_md5/test_md5.sh +++ b/components/esp_coex/test_md5/test_md5.sh @@ -22,7 +22,7 @@ case $IDF_TARGET in esp32s3) PREFIX=xtensa-esp32s3-elf- ;; - esp32c2|esp32c3|esp32c6|esp32h2|esp32c5|esp32c61) + esp32c2|esp32c3|esp32c6|esp32h2|esp32c5|esp32c61|esp32s31) PREFIX=riscv32-esp-elf- ;; *) diff --git a/components/esp_hw_support/modem/include/modem/modem_clock_impl.h b/components/esp_hw_support/modem/include/modem/modem_clock_impl.h index 110df308b1..6b27fb29d7 100644 --- a/components/esp_hw_support/modem/include/modem/modem_clock_impl.h +++ b/components/esp_hw_support/modem/include/modem/modem_clock_impl.h @@ -50,6 +50,9 @@ typedef enum { MODEM_CLOCK_DEVICE_MIN = 0, MODEM_CLOCK_MODEM_ADC_COMMON_FE = MODEM_CLOCK_DEVICE_MIN, MODEM_CLOCK_MODEM_PRIVATE_FE, +#if SOC_MODEM_CLOCK_SOC_PLL_SOURCE_CG_SUPPORTED + MODEM_CLOCK_SOC_PLL_SOURCE_CG, +#endif MODEM_CLOCK_COEXIST, MODEM_CLOCK_I2C_MASTER, #if SOC_PHY_CALIBRATION_CLOCK_IS_INDEPENDENT @@ -59,6 +62,9 @@ typedef enum { #if SOC_WIFI_SUPPORTED MODEM_CLOCK_WIFI_MAC, MODEM_CLOCK_WIFI_BB, +#if SOC_MODEM_CLOCK_WIFI_BB_80X1_AS_APB + MODEM_CLOCK_WIFI_BB_80X1, +#endif #endif MODEM_CLOCK_ETM, #if SOC_BT_SUPPORTED diff --git a/components/esp_hw_support/modem/port/esp32s31/modem_clock_impl.c b/components/esp_hw_support/modem/port/esp32s31/modem_clock_impl.c index e4eb35b73a..1958188e67 100644 --- a/components/esp_hw_support/modem/port/esp32s31/modem_clock_impl.c +++ b/components/esp_hw_support/modem/port/esp32s31/modem_clock_impl.c @@ -11,17 +11,21 @@ #include "esp_private/regi2c_ctrl.h" /* Clock dependency definitions */ -#define WIFI_CLOCK_DEPS ( MODEM_CLOCKS( WIFI_MAC, WIFI_APB, WIFI_BB, WIFI_BB_44M, COEXIST ) ) -#define BLE_CLOCK_DEPS ( MODEM_CLOCKS( BLE_MAC, BT_I154_COMMON_BB, ETM, COEXIST ) ) +#define WIFI_CLOCK_DEPS ( MODEM_CLOCKS( WIFI_MAC, WIFI_APB, WIFI_BB, WIFI_BB_44M, WIFI_BB_80X1, COEXIST ) ) +#define BLE_CLOCK_DEPS ( MODEM_CLOCKS( BLE_MAC, BT_I154_COMMON_BB, ETM, COEXIST, WIFI_BB_80X1 ) ) #define IEEE802154_CLOCK_DEPS ( MODEM_CLOCKS( 802154_MAC, BT_I154_COMMON_BB, ETM, COEXIST ) ) #define COEXIST_CLOCK_DEPS ( MODEM_CLOCKS( COEXIST ) ) #define I2C_ANA_MST_CLOCK_DEPS ( MODEM_CLOCKS( I2C_MASTER ) ) -#define PHY_CLOCK_DEPS ( MODEM_CLOCKS( MODEM_ADC_COMMON_FE, MODEM_PRIVATE_FE ) | I2C_ANA_MST_CLOCK_DEPS ) +#define PHY_CLOCK_DEPS ( MODEM_CLOCKS( MODEM_ADC_COMMON_FE, MODEM_PRIVATE_FE, SOC_PLL_SOURCE_CG ) | I2C_ANA_MST_CLOCK_DEPS ) #define MODEM_ETM_CLOCK_DEPS ( MODEM_CLOCKS( ETM ) ) #define MODEM_ADC_COMMON_FE_CLOCK_DEPS ( MODEM_CLOCKS( MODEM_ADC_COMMON_FE ) ) -#define PHY_CALIBRATION_WIFI_CLOCK_DEPS ( MODEM_CLOCKS( WIFI_APB, WIFI_BB, WIFI_BB_44M ) ) +#define PHY_CALIBRATION_WIFI_CLOCK_DEPS ( MODEM_CLOCKS( WIFI_APB, WIFI_BB, WIFI_BB_44M, WIFI_BB_80X1 ) ) #define PHY_CALIBRATION_BT_I154_CLOCK_DEPS ( MODEM_CLOCKS( WIFI_APB, WIFI_BB_44M, BT_I154_COMMON_BB ) ) +#if SOC_BT_SUPPORTED //TODO IDF-15185: Remove this once BT is supported #define PHY_CALIBRATION_CLOCK_DEPS ( PHY_CALIBRATION_WIFI_CLOCK_DEPS | PHY_CALIBRATION_BT_I154_CLOCK_DEPS ) +#else +#define PHY_CALIBRATION_CLOCK_DEPS ( PHY_CALIBRATION_WIFI_CLOCK_DEPS ) +#endif uint32_t IRAM_ATTR modem_clock_get_module_deps(shared_periph_module_t module) { @@ -65,6 +69,13 @@ static void IRAM_ATTR modem_clock_wifi_bb_configure(modem_clock_context_t *ctx, } } +static void IRAM_ATTR modem_clock_wifi_bb_80x1_configure(modem_clock_context_t *ctx, bool enable) +{ + if (enable || !(ctx->modem_status & MODEM_STATUS_WIFI_INITED)) { + modem_syscon_ll_enable_wifibb_80x1_clock(ctx->hal->syscon_dev, enable); + } +} + #if CONFIG_ESP_MODEM_CLOCK_ENABLE_CHECKING static esp_err_t IRAM_ATTR modem_clock_wifi_mac_check_enable(modem_clock_context_t *ctx) { @@ -77,6 +88,11 @@ static esp_err_t IRAM_ATTR modem_clock_wifi_bb_check_enable(modem_clock_context_ { return modem_syscon_ll_wifibb_clock_is_enabled(ctx->hal->syscon_dev) ? ESP_OK : ESP_FAIL; } + +static esp_err_t IRAM_ATTR modem_clock_wifi_bb_80x1_check_enable(modem_clock_context_t *ctx) +{ + return modem_syscon_ll_wifibb_80x1_clock_is_enabled(ctx->hal->syscon_dev) ? ESP_OK : ESP_FAIL; +} #endif #endif @@ -169,6 +185,13 @@ static void IRAM_ATTR modem_clock_coex_configure(modem_clock_context_t *ctx, boo modem_lpcon_ll_enable_coex_clock(ctx->hal->lpcon_dev, enable); } +#if SOC_MODEM_CLOCK_SOC_PLL_SOURCE_CG_SUPPORTED +static void IRAM_ATTR modem_clock_soc_pll_source_cg_configure(modem_clock_context_t *ctx, bool enable) +{ + modem_clock_hal_enable_soc_pll_source_cg(ctx->hal, enable); +} +#endif + static void IRAM_ATTR modem_clock_modem_adc_common_fe_configure(modem_clock_context_t *ctx, bool enable) { modem_clock_hal_enable_modem_common_fe_clock(ctx->hal, enable); @@ -205,6 +228,13 @@ static esp_err_t IRAM_ATTR modem_clock_coex_check_enable(modem_clock_context_t * return modem_lpcon_ll_coex_clock_is_enabled(ctx->hal->lpcon_dev) ? ESP_OK : ESP_FAIL; } +#if SOC_MODEM_CLOCK_SOC_PLL_SOURCE_CG_SUPPORTED +static esp_err_t IRAM_ATTR modem_clock_soc_pll_source_cg_check_enable(modem_clock_context_t *ctx) +{ + return modem_clock_hal_soc_pll_source_cg_is_enabled(ctx->hal) ? ESP_OK : ESP_FAIL; +} +#endif + static esp_err_t IRAM_ATTR modem_clock_modem_adc_common_fe_check_enable(modem_clock_context_t *ctx) { return modem_clock_hal_modem_common_fe_clock_is_enabled(ctx->hal) ? ESP_OK : ESP_FAIL; @@ -240,6 +270,7 @@ static void IRAM_ATTR modem_clock_configure_impl(modem_clock_context_t *ctx, int void (*action)(struct modem_clock_context *, bool) = ( (dev_id == MODEM_CLOCK_MODEM_ADC_COMMON_FE) ? modem_clock_modem_adc_common_fe_configure + : (dev_id == MODEM_CLOCK_SOC_PLL_SOURCE_CG) ? modem_clock_soc_pll_source_cg_configure : (dev_id == MODEM_CLOCK_MODEM_PRIVATE_FE) ? modem_clock_modem_private_fe_configure : (dev_id == MODEM_CLOCK_COEXIST) ? modem_clock_coex_configure : (dev_id == MODEM_CLOCK_I2C_MASTER) ? modem_clock_i2c_master_configure @@ -250,6 +281,7 @@ static void IRAM_ATTR modem_clock_configure_impl(modem_clock_context_t *ctx, int #if SOC_WIFI_SUPPORTED : (dev_id == MODEM_CLOCK_WIFI_MAC) ? modem_clock_wifi_mac_configure : (dev_id == MODEM_CLOCK_WIFI_BB) ? modem_clock_wifi_bb_configure + : (dev_id == MODEM_CLOCK_WIFI_BB_80X1) ? modem_clock_wifi_bb_80x1_configure #endif : (dev_id == MODEM_CLOCK_ETM) ? modem_clock_etm_configure #if SOC_BT_SUPPORTED @@ -274,6 +306,7 @@ static esp_err_t IRAM_ATTR modem_clock_check_impl(modem_clock_context_t *ctx, in esp_err_t (*check_action)(struct modem_clock_context *) = ( (dev_id == MODEM_CLOCK_MODEM_ADC_COMMON_FE) ? modem_clock_modem_adc_common_fe_check_enable + : (dev_id == MODEM_CLOCK_SOC_PLL_SOURCE_CG) ? modem_clock_soc_pll_source_cg_check_enable : (dev_id == MODEM_CLOCK_MODEM_PRIVATE_FE) ? modem_clock_modem_private_fe_check_enable : (dev_id == MODEM_CLOCK_COEXIST) ? modem_clock_coex_check_enable : (dev_id == MODEM_CLOCK_I2C_MASTER) ? modem_clock_i2c_master_check_enable @@ -281,6 +314,7 @@ static esp_err_t IRAM_ATTR modem_clock_check_impl(modem_clock_context_t *ctx, in : (dev_id == MODEM_CLOCK_WIFI_BB_44M) ? modem_clock_wifi_bb_44m_check_enable : (dev_id == MODEM_CLOCK_WIFI_MAC) ? modem_clock_wifi_mac_check_enable : (dev_id == MODEM_CLOCK_WIFI_BB) ? modem_clock_wifi_bb_check_enable + : (dev_id == MODEM_CLOCK_WIFI_BB_80X1) ? modem_clock_wifi_bb_80x1_check_enable : (dev_id == MODEM_CLOCK_ETM) ? modem_clock_etm_check_enable : (dev_id == MODEM_CLOCK_BLE_MAC) ? modem_clock_ble_mac_check_enable : (dev_id == MODEM_CLOCK_BT_I154_COMMON_BB) ? modem_clock_ble_i154_bb_check_enable diff --git a/components/esp_hw_support/periph_ctrl.c b/components/esp_hw_support/periph_ctrl.c index dc28957858..661cb9874c 100644 --- a/components/esp_hw_support/periph_ctrl.c +++ b/components/esp_hw_support/periph_ctrl.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2015-2025 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2015-2026 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ diff --git a/components/esp_phy/esp32s31/include/btbb_retention_reg.h b/components/esp_phy/esp32s31/include/btbb_retention_reg.h new file mode 100644 index 0000000000..67191690ec --- /dev/null +++ b/components/esp_phy/esp32s31/include/btbb_retention_reg.h @@ -0,0 +1,25 @@ +/* + * SPDX-FileCopyrightText: 2026 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +// btbb sleep retention reg + +#define BB_PART_CNT 3 +#define BB_PART_0_SIZE 128 +#define BB_PART_1_SIZE 68 +#define BB_PART_2_SIZE 19 +#define BB_PART_0_ADDR 0x600A2000 +#define BB_PART_1_ADDR 0x600A2800 +#define BB_PART_2_ADDR 0x600A2C00 + +#ifdef __cplusplus +} +#endif diff --git a/components/esp_phy/esp32s31/include/phy_init_data.h b/components/esp_phy/esp32s31/include/phy_init_data.h new file mode 100644 index 0000000000..e2eeb7078d --- /dev/null +++ b/components/esp_phy/esp32s31/include/phy_init_data.h @@ -0,0 +1,65 @@ +/* + * SPDX-FileCopyrightText: 2026 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef PHY_INIT_DATA_H +#define PHY_INIT_DATA_H /* don't use #pragma once here, we compile this file sometimes */ +#include +#include "esp_phy_init.h" +#include "esp_attr.h" +#include "sdkconfig.h" + +#ifdef __cplusplus +extern "C" { +#endif +// constrain a value between 'low' and 'high', inclusive +#define LIMIT(val, low, high) ((val < low) ? low : (val > high) ? high : val) +#define PHY_INIT_MAGIC "PHYINIT" +#define PHY_INIT_MAGIC_LEN 8 // should be strlen(PHY_INIT_MAGIC) + 1 + +// define the lowest tx power as LOWEST_PHY_TX_POWER +#define PHY_TX_POWER_LOWEST LIMIT(CONFIG_ESP_PHY_MAX_TX_POWER * 4, 0, 52) +#define PHY_TX_POWER_OFFSET 2 +#define PHY_TX_POWER_NUM 14 + +#if CONFIG_ESP_PHY_MULTIPLE_INIT_DATA_BIN +#define PHY_CRC_ALGORITHM 1 +#define PHY_COUNTRY_CODE_LEN 2 +#define PHY_INIT_DATA_TYPE_OFFSET 254 +#define PHY_SUPPORT_MULTIPLE_BIN_OFFSET 253 +#endif + +extern const char phy_init_magic_pre[]; +extern const esp_phy_init_data_t phy_init_data; +extern const char phy_init_magic_post[]; + +#if CONFIG_ESP_PHY_MULTIPLE_INIT_DATA_BIN +/** + * @brief PHY init data control information structure + */ +typedef struct { + uint8_t control_info_checksum[4]; /*!< 4-byte control information checksum */ + uint8_t multiple_bin_checksum[4]; /*!< 4-byte multiple bin checksum */ + uint8_t check_algorithm; /*!< check algorithm */ + uint8_t version; /*!< PHY init data bin version */ + uint8_t number; /*!< PHY init data bin number */ + uint8_t length[2]; /*!< Length of each PHY init data bin */ + uint8_t reserved[19]; /*!< 19-byte reserved */ +} __attribute__ ((packed)) phy_control_info_data_t; + +/** + * @brief Country corresponds to PHY init data type structure + */ +typedef struct { + NONSTRING_ATTR char cc[PHY_COUNTRY_CODE_LEN]; + uint8_t type; +} phy_country_to_bin_type_t; +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* PHY_INIT_DATA_H */ diff --git a/components/esp_phy/esp32s31/include/phy_init_deps.h b/components/esp_phy/esp32s31/include/phy_init_deps.h new file mode 100644 index 0000000000..58a5eaa763 --- /dev/null +++ b/components/esp_phy/esp32s31/include/phy_init_deps.h @@ -0,0 +1,9 @@ +/* + * SPDX-FileCopyrightText: 2026 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#pragma once + +#define PHY_INIT_MODEM_CLOCK_REQUIRED_BITS 0x38E7FF diff --git a/components/esp_phy/esp32s31/phy_init_data.c b/components/esp_phy/esp32s31/phy_init_data.c new file mode 100644 index 0000000000..8b732ddeb5 --- /dev/null +++ b/components/esp_phy/esp32s31/phy_init_data.c @@ -0,0 +1,217 @@ +/* + * SPDX-FileCopyrightText: 2024-2026 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "sdkconfig.h" +#include "soc/soc_caps.h" +#include "phy_init_data.h" +#include "esp_private/phy.h" +#include "esp_check.h" + + +const char __attribute__((section(".rodata"))) phy_init_magic_pre[] = PHY_INIT_MAGIC; + +/** + * @brief Structure containing default recommended PHY initialization parameters. + */ +const esp_phy_init_data_t phy_init_data= { { + 0x1, + 0x0, + LIMIT(CONFIG_ESP_PHY_MAX_TX_POWER * 4, 0, 0x54), + LIMIT(CONFIG_ESP_PHY_MAX_TX_POWER * 4, 0, 0x54), + LIMIT(CONFIG_ESP_PHY_MAX_TX_POWER * 4, 0, 0x50), + LIMIT(CONFIG_ESP_PHY_MAX_TX_POWER * 4, 0, 0x50), + LIMIT(CONFIG_ESP_PHY_MAX_TX_POWER * 4, 0, 0x4C), + LIMIT(CONFIG_ESP_PHY_MAX_TX_POWER * 4, 0, 0x48), + LIMIT(CONFIG_ESP_PHY_MAX_TX_POWER * 4, 0, 0x50), + LIMIT(CONFIG_ESP_PHY_MAX_TX_POWER * 4, 0, 0x50), + LIMIT(CONFIG_ESP_PHY_MAX_TX_POWER * 4, 0, 0x4c), + LIMIT(CONFIG_ESP_PHY_MAX_TX_POWER * 4, 0, 0x48), + LIMIT(CONFIG_ESP_PHY_MAX_TX_POWER * 4, 0, 0x40), + LIMIT(CONFIG_ESP_PHY_MAX_TX_POWER * 4, 0, 0x3C), + LIMIT(CONFIG_ESP_PHY_MAX_TX_POWER * 4, 0, 0x3C), + LIMIT(CONFIG_ESP_PHY_MAX_TX_POWER * 4, 0, 0x3C), + LIMIT(CONFIG_ESP_PHY_MAX_TX_POWER * 4, 0, 0x4c), + LIMIT(CONFIG_ESP_PHY_MAX_TX_POWER * 4, 0, 0x4c), + LIMIT(CONFIG_ESP_PHY_MAX_TX_POWER * 4, 0, 0x48), + LIMIT(CONFIG_ESP_PHY_MAX_TX_POWER * 4, 0, 0x44), + 0x0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0x51 +} }; + +const char __attribute__((section(".rodata"))) phy_init_magic_post[] = PHY_INIT_MAGIC; + +#if SOC_PM_MODEM_RETENTION_BY_REGDMA && CONFIG_MAC_BB_PD + +#include "esp_private/sleep_retention.h" + +static const char* TAG = "phy_sleep"; + +static esp_err_t sleep_retention_wifi_bb_init(void *arg) +{ + #define N_REGS_WIFI_AGC() (130) + #define N_REGS_WIFI_TX() (30) + #define N_REGS_WIFI_NRX() (145) + #define N_REGS_WIFI_BB() (82) + #define N_REGS_WIFI_BRX() (39) + #define N_REGS_WIFI_FE_COEX() (21) + #define N_REGS_WIFI_FE_DATA() (34) + #define N_REGS_WIFI_FE_CTRL() (56) + #define N_REGS_WIFI_FE_WIFI() (21) + + const static sleep_retention_entries_config_t bb_regs_retention[] = { + [0] = { .config = REGDMA_LINK_CONTINUOUS_INIT(0x0b00, 0x600a7000, 0x600a7000, N_REGS_WIFI_AGC(), 0, 0), .owner = BIT(0) | BIT(1) }, /* AGC */ + [1] = { .config = REGDMA_LINK_CONTINUOUS_INIT(0x0b01, 0x600a7400, 0x600a7400, N_REGS_WIFI_TX(), 0, 0), .owner = BIT(0) | BIT(1) }, /* TX */ + [2] = { .config = REGDMA_LINK_CONTINUOUS_INIT(0x0b02, 0x600a7800, 0x600a7800, N_REGS_WIFI_NRX(), 0, 0), .owner = BIT(0) | BIT(1) }, /* NRX */ + [3] = { .config = REGDMA_LINK_CONTINUOUS_INIT(0x0b03, 0x600a7c00, 0x600a7c00, N_REGS_WIFI_BB(), 0, 0), .owner = BIT(0) | BIT(1) }, /* BB */ + [4] = { .config = REGDMA_LINK_CONTINUOUS_INIT(0x0b05, 0x600a0000, 0x600a0000, N_REGS_WIFI_FE_COEX(), 0, 0), .owner = BIT(0) | BIT(1) }, /* FE COEX */ + [5] = { .config = REGDMA_LINK_CONTINUOUS_INIT(0x0b06, 0x600a8000, 0x600a8000, N_REGS_WIFI_BRX(), 0, 0), .owner = BIT(0) | BIT(1) }, /* BRX */ + [6] = { .config = REGDMA_LINK_CONTINUOUS_INIT(0x0b07, 0x600a0400, 0x600a0400, N_REGS_WIFI_FE_DATA(), 0, 0), .owner = BIT(0) | BIT(1) }, /* FE DATA */ + [7] = { .config = REGDMA_LINK_CONTINUOUS_INIT(0x0b08, 0x600a0800, 0x600a0800, N_REGS_WIFI_FE_CTRL(), 0, 0), .owner = BIT(0) | BIT(1) }, /* FE CTRL */ + [8] = { .config = REGDMA_LINK_CONTINUOUS_INIT(0x0b09, 0x600a0c00, 0x600a0c00, N_REGS_WIFI_FE_WIFI(), 0, 0), .owner = BIT(0) | BIT(1) } /* FE WiFi DATA */ + }; + esp_err_t err = sleep_retention_entries_create(bb_regs_retention, ARRAY_SIZE(bb_regs_retention), 3, SLEEP_RETENTION_MODULE_WIFI_BB); + ESP_RETURN_ON_ERROR(err, TAG, "failed to allocate memory for modem (%s) retention", "WiFi BB"); + ESP_LOGD(TAG, "WiFi BB sleep retention initialization"); + return ESP_OK; +} + +void esp_phy_sleep_data_init(void) +{ + sleep_retention_module_init_param_t init_param = { + .cbs = { .create = { .handle = sleep_retention_wifi_bb_init, .arg = NULL } }, + .depends = RETENTION_MODULE_BITMAP_INIT(CLOCK_MODEM) + }; + esp_err_t err = sleep_retention_module_init(SLEEP_RETENTION_MODULE_WIFI_BB, &init_param); + if (err != ESP_OK) { + ESP_LOGW(TAG, "WiFi BB sleep retention init failed"); + return; + } + err = sleep_retention_module_allocate(SLEEP_RETENTION_MODULE_WIFI_BB); + if (err != ESP_OK) { + ESP_LOGW(TAG, "failed to allocate sleep retention linked list for wifi bb retention"); + } +} + +void esp_phy_sleep_data_deinit(void) +{ + esp_err_t err = sleep_retention_module_free(SLEEP_RETENTION_MODULE_WIFI_BB); + if (err != ESP_OK) { + ESP_LOGW(TAG, "failed to free sleep retention linked list for wifi bb retention"); + return; + } + err = sleep_retention_module_deinit(SLEEP_RETENTION_MODULE_WIFI_BB); + if (err != ESP_OK) { + ESP_LOGW(TAG, "WiFi BB sleep retention deinit failed"); + } +} + +#endif /* SOC_PM_MODEM_RETENTION_BY_REGDMA && CONFIG_MAC_BB_PD */ diff --git a/components/esp_phy/esp32s31/phy_multiple_init_data.bin b/components/esp_phy/esp32s31/phy_multiple_init_data.bin new file mode 100644 index 0000000000..0f754a2c49 Binary files /dev/null and b/components/esp_phy/esp32s31/phy_multiple_init_data.bin differ diff --git a/components/esp_phy/lib b/components/esp_phy/lib index 3dad662616..cef4eca1d2 160000 --- a/components/esp_phy/lib +++ b/components/esp_phy/lib @@ -1 +1 @@ -Subproject commit 3dad662616b80b89abed23f218fb8ef2222ceb63 +Subproject commit cef4eca1d256d7325017049c6152cb78182fcd67 diff --git a/components/esp_phy/src/phy_common.c b/components/esp_phy/src/phy_common.c index 7d27470dcc..0b30d9564d 100644 --- a/components/esp_phy/src/phy_common.c +++ b/components/esp_phy/src/phy_common.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2023-2025 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2023-2026 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -22,6 +22,14 @@ #include "hal/temperature_sensor_ll.h" #endif +/* Per-target ANT_SELn_IDX indices are not always consecutive; do not use ANT_SEL0_IDX + n. */ +static const uint32_t s_phy_ant_sel_sig_idx[4] = { + ANT_SEL0_IDX, + ANT_SEL1_IDX, + ANT_SEL2_IDX, + ANT_SEL3_IDX, +}; + static const char* TAG = "phy_comm"; static volatile uint16_t s_phy_modem_flag = 0; @@ -196,7 +204,7 @@ esp_err_t esp_phy_set_ant_gpio(esp_phy_ant_gpio_config_t *config) for (int i = 0; i < 4; i++) { if (config->gpio_cfg[i].gpio_select == 1) { phy_ant_set_gpio_output(config->gpio_cfg[i].gpio_num); - esp_rom_gpio_connect_out_signal(config->gpio_cfg[i].gpio_num, ANT_SEL0_IDX + i, 0, 0); + esp_rom_gpio_connect_out_signal(config->gpio_cfg[i].gpio_num, s_phy_ant_sel_sig_idx[i], 0, 0); } } diff --git a/components/esp_rom/esp32c2/ld/esp32c2.rom.ld b/components/esp_rom/esp32c2/ld/esp32c2.rom.ld index 97194d3d23..4b26bffcc9 100644 --- a/components/esp_rom/esp32c2/ld/esp32c2.rom.ld +++ b/components/esp_rom/esp32c2/ld/esp32c2.rom.ld @@ -574,7 +574,7 @@ ppSearchTxframe = 0x40001c38; ppSelectNextQueue = 0x40001c3c; ppSubFromAMPDU = 0x40001c40; ppTask = 0x40001c44; -ppTxPkt = 0x40001c48; +//ppTxPkt = 0x40001c48; ppTxProtoProc = 0x40001c4c; ppTxqUpdateBitmap = 0x40001c50; /*pp_coex_tx_request = 0x40001c54;*/ diff --git a/components/esp_rom/esp32c3/ld/esp32c3.rom.ld b/components/esp_rom/esp32c3/ld/esp32c3.rom.ld index 3394f3e252..51932a64c1 100644 --- a/components/esp_rom/esp32c3/ld/esp32c3.rom.ld +++ b/components/esp_rom/esp32c3/ld/esp32c3.rom.ld @@ -759,7 +759,7 @@ ppSearchTxframe = 0x40001714; ppSelectNextQueue = 0x40001718; ppSubFromAMPDU = 0x4000171c; ppTask = 0x40001720; -ppTxPkt = 0x40001724; +//ppTxPkt = 0x40001724; ppTxProtoProc = 0x40001728; ppTxqUpdateBitmap = 0x4000172c; /*pp_coex_tx_request = 0x40001730;*/ diff --git a/components/esp_rom/esp32c5/ld/esp32c5.rom.pp.ld b/components/esp_rom/esp32c5/ld/esp32c5.rom.pp.ld index 0c7d024d67..ac40d0e98b 100644 --- a/components/esp_rom/esp32c5/ld/esp32c5.rom.pp.ld +++ b/components/esp_rom/esp32c5/ld/esp32c5.rom.pp.ld @@ -192,7 +192,7 @@ ppSearchTxframe = 0x40000e98; ppSelectNextQueue = 0x40000e9c; ppSubFromAMPDU = 0x40000ea0; ppTask = 0x40000ea4; -ppTxPkt = 0x40000ea8; +//ppTxPkt = 0x40000ea8; ppTxProtoProc = 0x40000eac; ppTxqUpdateBitmap = 0x40000eb0; pp_coex_tx_request = 0x40000eb4; @@ -214,7 +214,7 @@ ppCalDeliNum = 0x40000ef0; ppRemoveHTC = 0x40000ef4; ppCheckTxHEAMPDUlength = 0x40000ef8; ppCertSetRate = 0x40000efc; -ppSelectTxFormat = 0x40000f00; +//ppSelectTxFormat = 0x40000f00; ppCalTxHEAMPDULength = 0x40000f04; pp_coex_tx_release = 0x40000f08; ppAdd2AMPDUTail = 0x40000f0c; diff --git a/components/esp_rom/esp32c61/ld/esp32c61.rom.pp.ld b/components/esp_rom/esp32c61/ld/esp32c61.rom.pp.ld index 8577f3a056..bcdb4df513 100644 --- a/components/esp_rom/esp32c61/ld/esp32c61.rom.pp.ld +++ b/components/esp_rom/esp32c61/ld/esp32c61.rom.pp.ld @@ -192,7 +192,7 @@ ppSearchTxframe = 0x40000e10; ppSelectNextQueue = 0x40000e14; ppSubFromAMPDU = 0x40000e18; ppTask = 0x40000e1c; -ppTxPkt = 0x40000e20; +//ppTxPkt = 0x40000e20; ppTxProtoProc = 0x40000e24; ppTxqUpdateBitmap = 0x40000e28; pp_coex_tx_request = 0x40000e2c; @@ -213,7 +213,7 @@ ppRemoveHTC = 0x40000e64; ppRemoveHEAMPDUflags = 0x40000e68; ppCheckTxHEAMPDUlength = 0x40000e6c; ppCertSetRate = 0x40000e70; -ppSelectTxFormat = 0x40000e74; +//ppSelectTxFormat = 0x40000e74; ppCalTxHEAMPDULength = 0x40000e78; pp_coex_tx_release = 0x40000e7c; ppAdd2AMPDUTail = 0x40000e80; diff --git a/components/esp_rom/esp32s3/ld/esp32s3.rom.ld b/components/esp_rom/esp32s3/ld/esp32s3.rom.ld index c76daafdee..c3a2f2e715 100644 --- a/components/esp_rom/esp32s3/ld/esp32s3.rom.ld +++ b/components/esp_rom/esp32s3/ld/esp32s3.rom.ld @@ -1014,7 +1014,7 @@ ppSearchTxframe = 0x4000567c; ppSelectNextQueue = 0x40005688; ppSubFromAMPDU = 0x40005694; /* ppTask = 0x400056a0; */ -ppTxPkt = 0x400056ac; +//ppTxPkt = 0x400056ac; ppTxProtoProc = 0x400056b8; ppTxqUpdateBitmap = 0x400056c4; /*pp_coex_tx_request = 0x400056d0;*/ diff --git a/components/esp_rom/esp32s31/ld/esp32s31.rom.net80211.ld b/components/esp_rom/esp32s31/ld/esp32s31.rom.net80211.ld index 096dd38424..9f8591cfe8 100644 --- a/components/esp_rom/esp32s31/ld/esp32s31.rom.net80211.ld +++ b/components/esp_rom/esp32s31/ld/esp32s31.rom.net80211.ld @@ -41,7 +41,7 @@ ieee80211_is_tx_allowed = 0x2f800c8c; ieee80211_output_pending_eb = 0x2f800c90; ieee80211_output_process = 0x2f800c94; ieee80211_set_tx_desc = 0x2f800c98; -ieee80211_classify = 0x2f800c9c; +//ieee80211_classify = 0x2f800c9c; ieee80211_copy_eb_header = 0x2f800ca0; ieee80211_recycle_cache_eb = 0x2f800ca4; ieee80211_search_node = 0x2f800ca8; diff --git a/components/esp_rom/esp32s31/ld/esp32s31.rom.pp.ld b/components/esp_rom/esp32s31/ld/esp32s31.rom.pp.ld index 7e6f1806f3..f09b6961c7 100644 --- a/components/esp_rom/esp32s31/ld/esp32s31.rom.pp.ld +++ b/components/esp_rom/esp32s31/ld/esp32s31.rom.pp.ld @@ -27,7 +27,7 @@ esf_buf_recycle = 0x2f800d24; GetAccess = 0x2f800d28; hal_mac_is_low_rate_enabled = 0x2f800d2c; hal_mac_tx_get_blockack = 0x2f800d30; -hal_mac_tx_set_ppdu = 0x2f800d34; +//hal_mac_tx_set_ppdu = 0x2f800d34; hal_mac_tx_clr_mplen = 0x2f800d38; hal_mac_get_txq_state = 0x2f800d3c; hal_mac_clr_txq_state = 0x2f800d40; @@ -59,7 +59,7 @@ is_lmac_idle = 0x2f800da4; ic_get_he_rts_threshold_bytes = 0x2f800da8; lmacAdjustTimestamp = 0x2f800dac; lmacDiscardAgedMSDU = 0x2f800db0; -lmacDiscardMSDU = 0x2f800db4; +//lmacDiscardMSDU = 0x2f800db4; lmacEndFrameExchangeSequence = 0x2f800db8; lmacIsIdle = 0x2f800dbc; lmacIsLongFrame = 0x2f800dc0; @@ -115,7 +115,7 @@ pm_local_tsf_process = 0x2f800e84; pm_set_beacon_filter = 0x2f800e88; pm_is_in_wifi_slice_threshold = 0x2f800e8c; pm_is_waked = 0x2f800e90; -pm_keep_alive = 0x2f800e94; +//pm_keep_alive = 0x2f800e94; pm_on_beacon_rx = 0x2f800e98; pm_on_data_rx = 0x2f800e9c; pm_on_data_tx = 0x2f800ea0; @@ -127,13 +127,13 @@ pm_on_isr_twt_wake = 0x2f800eb4; pm_on_tsf_timer = 0x2f800eb8; pm_on_twt_force_tx = 0x2f800ebc; pm_parse_beacon = 0x2f800ec0; -pm_process_tim = 0x2f800ec4; +//pm_process_tim = 0x2f800ec4; pm_rx_beacon_process = 0x2f800ec8; pm_rx_data_process = 0x2f800ecc; pm_sleep = 0x2f800ed0; pm_sleep_for = 0x2f800ed4; pm_tbtt_process = 0x2f800ed8; -pm_tx_data_done_process = 0x2f800edc; +//pm_tx_data_done_process = 0x2f800edc; pm_allow_tx = 0x2f800ee0; pm_extend_tbtt_adaptive_servo = 0x2f800ee4; pm_scale_listen_interval = 0x2f800ee8; @@ -156,7 +156,7 @@ pm_clear_wakeup_signal = 0x2f800f28; pm_mac_disable_tsf_tbtt_soc_wakeup = 0x2f800f2c; pm_mac_disable_tsf_tbtt_modem_wakeup = 0x2f800f30; pm_mac_enable_tsf_tbtt_soc_wakeup = 0x2f800f34; -pm_mac_enable_tsf_tbtt_modem_wakeup = 0x2f800f38; +//pm_mac_enable_tsf_tbtt_modem_wakeup = 0x2f800f38; pm_mac_modem_params_rt_update = 0x2f800f3c; pm_update_at_next_beacon = 0x2f800f40; tbtt_adaptive_setup = 0x2f800f44; @@ -174,7 +174,7 @@ ppEmptyDelimiterLength = 0x2f800f70; ppEnqueueRxq = 0x2f800f74; ppEnqueueTxDone = 0x2f800f78; ppGetTxframe = 0x2f800f7c; -ppMapTxQueue = 0x2f800f80; +//ppMapTxQueue = 0x2f800f80; ppProcTxSecFrame = 0x2f800f84; ppProcessRxPktHdr = 0x2f800f88; ppProcessTxQ = 0x2f800f8c; @@ -183,7 +183,7 @@ ppRecycleAmpdu = 0x2f800f94; ppRecycleRxPkt = 0x2f800f98; ppResortTxAMPDU = 0x2f800f9c; ppResumeTxAMPDU = 0x2f800fa0; -ppRxFragmentProc = 0x2f800fa4; +//ppRxFragmentProc = 0x2f800fa4; ppRxPkt = 0x2f800fa8; ppRxProtoProc = 0x2f800fac; ppSearchTxQueue = 0x2f800fb0; @@ -191,7 +191,7 @@ ppSearchTxframe = 0x2f800fb4; ppSelectNextQueue = 0x2f800fb8; ppSubFromAMPDU = 0x2f800fbc; ppTask = 0x2f800fc0; -ppTxPkt = 0x2f800fc4; +//ppTxPkt = 0x2f800fc4; ppTxProtoProc = 0x2f800fc8; ppTxqUpdateBitmap = 0x2f800fcc; pp_coex_tx_request = 0x2f800fd0; @@ -211,7 +211,7 @@ ppCalDeliNum = 0x2f801004; ppRemoveHTC = 0x2f801008; ppCheckTxHEAMPDUlength = 0x2f80100c; ppCertSetRate = 0x2f801010; -ppSelectTxFormat = 0x2f801014; +//ppSelectTxFormat = 0x2f801014; ppCalTxHEAMPDULength = 0x2f801018; pp_coex_tx_release = 0x2f80101c; ppAdd2AMPDUTail = 0x2f801020; @@ -227,7 +227,7 @@ rcampduuprate = 0x2f801044; rcClearCurAMPDUSched = 0x2f801048; rcClearCurSched = 0x2f80104c; rcClearCurStat = 0x2f801050; -rcGetSched = 0x2f801054; +//rcGetSched = 0x2f801054; rcLowerSched = 0x2f801058; rcSetTxAmpduLimit = 0x2f80105c; rcTxUpdatePer = 0x2f801060; diff --git a/components/esp_system/port/soc/esp32s31/clk.c b/components/esp_system/port/soc/esp32s31/clk.c index 3e478e55ea..468c4ccd0f 100644 --- a/components/esp_system/port/soc/esp32s31/clk.c +++ b/components/esp_system/port/soc/esp32s31/clk.c @@ -23,6 +23,7 @@ #include "hal/wdt_hal.h" #endif #include "esp_private/esp_sleep_internal.h" +#include "esp_private/esp_modem_clock.h" #include "esp_private/periph_ctrl.h" #include "esp_private/esp_clk.h" #include "esp_private/esp_pmu.h" @@ -186,5 +187,11 @@ void rtc_clk_select_rtc_slow_clk(void) */ __attribute__((weak)) void esp_perip_clk_init(void) { - +#if CONFIG_ESP_WIFI_ENABLED + soc_rtc_slow_clk_src_t rtc_slow_clk_src = rtc_clk_slow_src_get(); + modem_clock_lpclk_src_t modem_lpclk_src = (modem_clock_lpclk_src_t)( + (rtc_slow_clk_src == SOC_RTC_SLOW_CLK_SRC_XTAL32K) ? MODEM_CLOCK_LPCLK_SRC_XTAL32K + : MODEM_CLOCK_LPCLK_SRC_RC_SLOW); + modem_clock_select_lp_clock_source(PERIPH_WIFI_MODULE, modem_lpclk_src, 0); +#endif } diff --git a/components/esp_wifi/esp32s31/esp_adapter.c b/components/esp_wifi/esp32s31/esp_adapter.c new file mode 100644 index 0000000000..b3234d79ee --- /dev/null +++ b/components/esp_wifi/esp32s31/esp_adapter.c @@ -0,0 +1,778 @@ +/* + * SPDX-FileCopyrightText: 2022-2026 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include +#include +#include +#include + +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "freertos/queue.h" +#include "freertos/semphr.h" +#include "freertos/event_groups.h" +#include "freertos/portmacro.h" +#include "riscv/interrupt.h" +#include "esp_types.h" +#include "esp_random.h" +#include "esp_mac.h" +#include "esp_task.h" +#include "esp_intr_alloc.h" +#include "esp_attr.h" +#include "esp_log.h" +#include "esp_event.h" +#include "esp_heap_caps.h" +#include "esp_timer.h" +#include "esp_private/esp_modem_clock.h" +#include "esp_private/wifi_os_adapter.h" +#include "esp_private/wifi.h" +#ifdef CONFIG_ESP_PHY_ENABLED +#include "esp_phy_init.h" +#include "phy_init_data.h" +#endif +#include "soc/rtc_cntl_periph.h" +#include "soc/rtc.h" +#include "esp_private/periph_ctrl.h" +#include "esp_private/esp_clk.h" +#include "nvs.h" +#include "os.h" +#include "esp_smartconfig.h" +#ifdef CONFIG_ESP_COEX_ENABLED +#include "private/esp_coexist_internal.h" +#endif +#include "esp32s31/rom/ets_sys.h" +#include "private/esp_modem_wrapper.h" +#include "esp_private/esp_modem_clock.h" + +#if SOC_PM_MODEM_RETENTION_BY_REGDMA +#include "esp_private/esp_regdma.h" +#include "esp_private/sleep_retention.h" +#endif + +#define TAG "esp_adapter" + +#ifdef CONFIG_PM_ENABLE +extern void wifi_apb80m_request(void); +extern void wifi_apb80m_release(void); +#endif + +IRAM_ATTR void *wifi_malloc(size_t size) +{ +#if CONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP + return heap_caps_malloc_prefer(size, 2, MALLOC_CAP_DEFAULT | MALLOC_CAP_SPIRAM, MALLOC_CAP_DEFAULT | MALLOC_CAP_INTERNAL); +#else + return malloc(size); +#endif +} + +IRAM_ATTR void *wifi_realloc(void *ptr, size_t size) +{ +#if CONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP + return heap_caps_realloc_prefer(ptr, size, 2, MALLOC_CAP_DEFAULT | MALLOC_CAP_SPIRAM, MALLOC_CAP_DEFAULT | MALLOC_CAP_INTERNAL); +#else + return realloc(ptr, size); +#endif +} + +IRAM_ATTR void *wifi_calloc(size_t n, size_t size) +{ +#if CONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP + return heap_caps_calloc_prefer(n, size, 2, MALLOC_CAP_DEFAULT | MALLOC_CAP_SPIRAM, MALLOC_CAP_DEFAULT | MALLOC_CAP_INTERNAL); +#else + return calloc(n, size); +#endif +} + +static void *IRAM_ATTR wifi_zalloc_wrapper(size_t size) +{ + void *ptr = wifi_calloc(1, size); + return ptr; +} + +wifi_static_queue_t *wifi_create_queue(int queue_len, int item_size) +{ + wifi_static_queue_t *queue = NULL; + + queue = (wifi_static_queue_t *)heap_caps_malloc(sizeof(wifi_static_queue_t), MALLOC_CAP_INTERNAL | MALLOC_CAP_8BIT); + if (!queue) { + return NULL; + } + +#if CONFIG_SPIRAM_USE_MALLOC + /* Wi-Fi still use internal RAM */ + + queue->storage = heap_caps_calloc(1, sizeof(StaticQueue_t) + (queue_len * item_size), MALLOC_CAP_INTERNAL | MALLOC_CAP_8BIT); + if (!queue->storage) { + goto _error; + } + + queue->handle = xQueueCreateStatic(queue_len, item_size, ((uint8_t*)(queue->storage)) + sizeof(StaticQueue_t), (StaticQueue_t*)(queue->storage)); + + if (!queue->handle) { + goto _error; + } + + return queue; + +_error: + if (queue) { + if (queue->storage) { + free(queue->storage); + } + + free(queue); + } + + return NULL; +#else + queue->handle = xQueueCreate(queue_len, item_size); + return queue; +#endif +} + +void wifi_delete_queue(wifi_static_queue_t *queue) +{ + if (queue) { + vQueueDelete(queue->handle); +#if CONFIG_SPIRAM_USE_MALLOC + if (queue->storage) { + free(queue->storage); + } +#endif + free(queue); + } +} + +static void *wifi_create_queue_wrapper(int queue_len, int item_size) +{ + return wifi_create_queue(queue_len, item_size); +} + +static void wifi_delete_queue_wrapper(void *queue) +{ + wifi_delete_queue(queue); +} + +static void set_intr_wrapper(int32_t cpu_no, uint32_t intr_source, uint32_t intr_num, int32_t intr_prio) +{ + esp_rom_route_intr_matrix(cpu_no, intr_source, intr_num); + esprv_int_set_priority(intr_num, intr_prio); + esprv_int_set_type(intr_num, INTR_TYPE_LEVEL); +} + +static void clear_intr_wrapper(uint32_t intr_source, uint32_t intr_num) +{ + +} + +static void set_isr_wrapper(int32_t n, void *f, void *arg) +{ + intr_handler_set(n, (intr_handler_t)f, arg); +} + +static void enable_intr_wrapper(uint32_t intr_mask) +{ + esprv_int_enable(intr_mask); +} + +static void disable_intr_wrapper(uint32_t intr_mask) +{ + esprv_int_disable(intr_mask); +} + +static bool IRAM_ATTR is_from_isr_wrapper(void) +{ + return !xPortCanYield(); +} + +static void wifi_thread_semphr_free(void *data) +{ + SemaphoreHandle_t *sem = (SemaphoreHandle_t *)(data); + + if (sem) { + vSemaphoreDelete(sem); + } +} + +static void *wifi_thread_semphr_get_wrapper(void) +{ + static bool s_wifi_thread_sem_key_init = false; + static pthread_key_t s_wifi_thread_sem_key; + SemaphoreHandle_t sem = NULL; + + if (s_wifi_thread_sem_key_init == false) { + if (0 != pthread_key_create(&s_wifi_thread_sem_key, wifi_thread_semphr_free)) { + return NULL; + } + s_wifi_thread_sem_key_init = true; + } + + sem = pthread_getspecific(s_wifi_thread_sem_key); + if (!sem) { + sem = xSemaphoreCreateCounting(1, 0); + if (sem) { + pthread_setspecific(s_wifi_thread_sem_key, sem); + ESP_LOGV(TAG, "thread sem create: sem=%p", sem); + } + } + + ESP_LOGV(TAG, "thread sem get: sem=%p", sem); + return (void *)sem; +} + +static void *recursive_mutex_create_wrapper(void) +{ + return (void *)xSemaphoreCreateRecursiveMutex(); +} + +static void *mutex_create_wrapper(void) +{ + return (void *)xSemaphoreCreateMutex(); +} + +static void mutex_delete_wrapper(void *mutex) +{ + vSemaphoreDelete(mutex); +} + +static int32_t IRAM_ATTR mutex_lock_wrapper(void *mutex) +{ + return (int32_t)xSemaphoreTakeRecursive(mutex, portMAX_DELAY); +} + +static int32_t IRAM_ATTR mutex_unlock_wrapper(void *mutex) +{ + return (int32_t)xSemaphoreGiveRecursive(mutex); +} + +static void *queue_create_wrapper(uint32_t queue_len, uint32_t item_size) +{ + StaticQueue_t *queue_buffer = heap_caps_malloc_prefer(sizeof(StaticQueue_t) + (queue_len * item_size), 2, + MALLOC_CAP_DEFAULT | MALLOC_CAP_SPIRAM, + MALLOC_CAP_DEFAULT | MALLOC_CAP_INTERNAL); + if (!queue_buffer) { + return NULL; + } + QueueHandle_t queue_handle = xQueueCreateStatic(queue_len, item_size, (uint8_t *)queue_buffer + sizeof(StaticQueue_t), + queue_buffer); + if (!queue_handle) { + free(queue_buffer); + return NULL; + } + + return (void *)queue_handle; +} + +static void queue_delete_wrapper(void *queue) +{ + if (queue) { + StaticQueue_t *queue_buffer = NULL; + xQueueGetStaticBuffers(queue, NULL, &queue_buffer); + vQueueDelete(queue); + if (queue_buffer) { + free(queue_buffer); + } + } +} + +static int32_t queue_send_wrapper(void *queue, void *item, uint32_t block_time_tick) +{ + if (block_time_tick == OSI_FUNCS_TIME_BLOCKING) { + return (int32_t)xQueueSend(queue, item, portMAX_DELAY); + } else { + return (int32_t)xQueueSend(queue, item, block_time_tick); + } +} + +static int32_t IRAM_ATTR queue_send_from_isr_wrapper(void *queue, void *item, void *hptw) +{ + return (int32_t)xQueueSendFromISR(queue, item, hptw); +} + +static int32_t queue_send_to_back_wrapper(void *queue, void *item, uint32_t block_time_tick) +{ + return (int32_t)xQueueGenericSend(queue, item, block_time_tick, queueSEND_TO_BACK); +} + +static int32_t queue_send_to_front_wrapper(void *queue, void *item, uint32_t block_time_tick) +{ + return (int32_t)xQueueGenericSend(queue, item, block_time_tick, queueSEND_TO_FRONT); +} + +static int32_t queue_recv_wrapper(void *queue, void *item, uint32_t block_time_tick) +{ + if (block_time_tick == OSI_FUNCS_TIME_BLOCKING) { + return (int32_t)xQueueReceive(queue, item, portMAX_DELAY); + } else { + return (int32_t)xQueueReceive(queue, item, block_time_tick); + } +} + +static uint32_t event_group_wait_bits_wrapper(void *event, uint32_t bits_to_wait_for, int clear_on_exit, int wait_for_all_bits, uint32_t block_time_tick) +{ + if (block_time_tick == OSI_FUNCS_TIME_BLOCKING) { + return (uint32_t)xEventGroupWaitBits(event, bits_to_wait_for, clear_on_exit, wait_for_all_bits, portMAX_DELAY); + } else { + return (uint32_t)xEventGroupWaitBits(event, bits_to_wait_for, clear_on_exit, wait_for_all_bits, block_time_tick); + } +} + +static int32_t task_create_pinned_to_core_wrapper(void *task_func, const char *name, uint32_t stack_depth, void *param, uint32_t prio, void *task_handle, uint32_t core_id) +{ + return (uint32_t)xTaskCreatePinnedToCore(task_func, name, stack_depth, param, prio, task_handle, (core_id < portNUM_PROCESSORS ? core_id : tskNO_AFFINITY)); +} + +static int32_t task_create_wrapper(void *task_func, const char *name, uint32_t stack_depth, void *param, uint32_t prio, void *task_handle) +{ + return (uint32_t)xTaskCreate(task_func, name, stack_depth, param, prio, task_handle); +} + +static int32_t IRAM_ATTR task_ms_to_tick_wrapper(uint32_t ms) +{ + return (int32_t)(ms / portTICK_PERIOD_MS); +} + +static int32_t task_get_max_priority_wrapper(void) +{ + return (int32_t)(configMAX_PRIORITIES); +} + +static int32_t esp_event_post_wrapper(const char *event_base, int32_t event_id, void *event_data, size_t event_data_size, uint32_t ticks_to_wait) +{ + if (ticks_to_wait == OSI_FUNCS_TIME_BLOCKING) { + return (int32_t)esp_event_post(event_base, event_id, event_data, event_data_size, portMAX_DELAY); + } else { + return (int32_t)esp_event_post(event_base, event_id, event_data, event_data_size, ticks_to_wait); + } +} + +static void IRAM_ATTR wifi_apb80m_request_wrapper(void) +{ +#ifdef CONFIG_PM_ENABLE + wifi_apb80m_request(); +#endif +} + +static void IRAM_ATTR wifi_apb80m_release_wrapper(void) +{ +#ifdef CONFIG_PM_ENABLE + wifi_apb80m_release(); +#endif +} + +static void IRAM_ATTR timer_arm_wrapper(void *timer, uint32_t tmout, bool repeat) +{ + ets_timer_arm(timer, tmout, repeat); +} + +static void wifi_reset_mac_wrapper(void) +{ + modem_clock_module_mac_reset(PERIPH_WIFI_MODULE); +} + +static void wifi_clock_enable_wrapper(void) +{ + wifi_module_enable(); +} + +static void wifi_clock_disable_wrapper(void) +{ + wifi_module_disable(); +} + +static int get_time_wrapper(void *t) +{ + return os_get_time(t); +} + +static void *IRAM_ATTR realloc_internal_wrapper(void *ptr, size_t size) +{ + return heap_caps_realloc(ptr, size, MALLOC_CAP_8BIT | MALLOC_CAP_DMA | MALLOC_CAP_INTERNAL); +} + +static void *IRAM_ATTR calloc_internal_wrapper(size_t n, size_t size) +{ + return heap_caps_calloc(n, size, MALLOC_CAP_8BIT | MALLOC_CAP_DMA | MALLOC_CAP_INTERNAL); +} + +static void *IRAM_ATTR zalloc_internal_wrapper(size_t size) +{ + void *ptr = heap_caps_calloc(1, size, MALLOC_CAP_8BIT | MALLOC_CAP_DMA | MALLOC_CAP_INTERNAL); + return ptr; +} + +static esp_err_t nvs_open_wrapper(const char *name, unsigned int open_mode, nvs_handle_t *out_handle) +{ + return nvs_open(name, (nvs_open_mode_t)open_mode, out_handle); +} + +static void esp_log_writev_wrapper(unsigned int level, const char *tag, const char *format, va_list args) +{ + return esp_log_writev((esp_log_level_t)level, tag, format, args); +} + +static void esp_log_write_wrapper(unsigned int level, const char *tag, const char *format, ...) +{ + va_list list; + va_start(list, format); + esp_log_writev((esp_log_level_t)level, tag, format, list); + va_end(list); +} + +static esp_err_t esp_read_mac_wrapper(uint8_t *mac, unsigned int type) +{ + return esp_read_mac(mac, (esp_mac_type_t)type); +} + +static int coex_init_wrapper(void) +{ +#if CONFIG_SW_COEXIST_ENABLE || CONFIG_EXTERNAL_COEX_ENABLE + return coex_init(); +#else + return 0; +#endif +} + +static void coex_deinit_wrapper(void) +{ +#if CONFIG_SW_COEXIST_ENABLE || CONFIG_EXTERNAL_COEX_ENABLE + coex_deinit(); +#endif +} + +static int coex_enable_wrapper(void) +{ +#if CONFIG_SW_COEXIST_ENABLE || CONFIG_EXTERNAL_COEX_ENABLE + return coex_enable(); +#else + return 0; +#endif +} + +static void coex_disable_wrapper(void) +{ +#if CONFIG_SW_COEXIST_ENABLE || CONFIG_EXTERNAL_COEX_ENABLE + coex_disable(); +#endif +} + +static IRAM_ATTR uint32_t coex_status_get_wrapper(void) +{ +#if CONFIG_SW_COEXIST_ENABLE || CONFIG_EXTERNAL_COEX_ENABLE + return coex_status_get(COEX_STATUS_GET_WIFI_BITMAP); +#else + return 0; +#endif +} + +static int coex_wifi_request_wrapper(uint32_t event, uint32_t latency, uint32_t duration) +{ +#if CONFIG_SW_COEXIST_ENABLE || CONFIG_EXTERNAL_COEX_ENABLE + return coex_wifi_request(event, latency, duration); +#else + return 0; +#endif +} + +static IRAM_ATTR int coex_wifi_release_wrapper(uint32_t event) +{ +#if CONFIG_SW_COEXIST_ENABLE || CONFIG_EXTERNAL_COEX_ENABLE + return coex_wifi_release(event); +#else + return 0; +#endif +} + +static int coex_wifi_channel_set_wrapper(uint8_t primary, uint8_t secondary) +{ +#if CONFIG_SW_COEXIST_ENABLE || CONFIG_EXTERNAL_COEX_ENABLE + return coex_wifi_channel_set(primary, secondary); +#else + return 0; +#endif +} + +static IRAM_ATTR int coex_event_duration_get_wrapper(uint32_t event, uint32_t *duration) +{ +#if CONFIG_SW_COEXIST_ENABLE || CONFIG_EXTERNAL_COEX_ENABLE + return coex_event_duration_get(event, duration); +#else + return 0; +#endif +} + +static int coex_pti_get_wrapper(uint32_t event, uint8_t *pti) +{ +#if CONFIG_SW_COEXIST_ENABLE || CONFIG_EXTERNAL_COEX_ENABLE + return coex_pti_get(event, pti); +#else + return 0; +#endif +} + +static void coex_schm_status_bit_clear_wrapper(uint32_t type, uint32_t status) +{ +#if CONFIG_SW_COEXIST_ENABLE || CONFIG_EXTERNAL_COEX_ENABLE + coex_schm_status_bit_clear(type, status); +#endif +} + +static void coex_schm_status_bit_set_wrapper(uint32_t type, uint32_t status) +{ +#if CONFIG_SW_COEXIST_ENABLE || CONFIG_EXTERNAL_COEX_ENABLE + coex_schm_status_bit_set(type, status); +#endif +} + +static IRAM_ATTR int coex_schm_interval_set_wrapper(uint32_t interval) +{ +#if CONFIG_SW_COEXIST_ENABLE || CONFIG_EXTERNAL_COEX_ENABLE + return coex_schm_interval_set(interval); +#else + return 0; +#endif +} + +static uint32_t coex_schm_interval_get_wrapper(void) +{ +#if CONFIG_SW_COEXIST_ENABLE || CONFIG_EXTERNAL_COEX_ENABLE + return coex_schm_interval_get(); +#else + return 0; +#endif +} + +static uint8_t coex_schm_curr_period_get_wrapper(void) +{ +#if CONFIG_SW_COEXIST_ENABLE || CONFIG_EXTERNAL_COEX_ENABLE + return coex_schm_curr_period_get(); +#else + return 0; +#endif +} + +static void *coex_schm_curr_phase_get_wrapper(void) +{ +#if CONFIG_SW_COEXIST_ENABLE || CONFIG_EXTERNAL_COEX_ENABLE + return coex_schm_curr_phase_get(); +#else + return NULL; +#endif +} + +static int coex_register_start_cb_wrapper(int (* cb)(void)) +{ +#if CONFIG_SW_COEXIST_ENABLE + return coex_register_start_cb(cb); +#else + return 0; +#endif +} + +static int coex_schm_process_restart_wrapper(void) +{ +#if CONFIG_SW_COEXIST_ENABLE + return coex_schm_process_restart(); +#else + return 0; +#endif +} + +static int coex_schm_register_cb_wrapper(int type, int(*cb)(int)) +{ +#if CONFIG_SW_COEXIST_ENABLE + return coex_schm_register_callback(type, cb); +#else + return 0; +#endif +} + +static int coex_schm_flexible_period_set_wrapper(uint8_t period) +{ +#if CONFIG_ESP_COEX_POWER_MANAGEMENT + return coex_schm_flexible_period_set(period); +#else + return 0; +#endif +} + +static uint8_t coex_schm_flexible_period_get_wrapper(void) +{ +#if CONFIG_ESP_COEX_POWER_MANAGEMENT + return coex_schm_flexible_period_get(); +#else + return 1; +#endif +} + +static void * coex_schm_get_phase_by_idx_wrapper(int phase_idx) +{ +#if CONFIG_SW_COEXIST_ENABLE || CONFIG_EXTERNAL_COEX_ENABLE + return coex_schm_get_phase_by_idx(phase_idx); +#else + return NULL; +#endif +} + +static int coex_configure_preemption_end_cb_wrapper(bool is_register, int(*cb)(uint32_t)) +{ +#if CONFIG_SW_COEXIST_ENABLE && CONFIG_COEX_ISO_INT_SCHEME + return esp_coex_configure_iso_end_wifi_cb(is_register, cb); +#else + return 0; +#endif +} + +static void IRAM_ATTR esp_empty_wrapper(void) +{ + +} + +extern void set_bb_wdg(bool busy_chk, bool srch_chk, uint16_t max_busy, uint16_t max_srch, bool rst_en, bool int_en, bool clr); + +static void esp_phy_enable_wrapper(void) +{ + esp_phy_enable(PHY_MODEM_WIFI); + phy_wifi_enable_set(1); + //disable bb idle check(max: 139ms) for temporary to avoid unexpected RXTXPANIC + //TODO + set_bb_wdg(true, false, 0x18, 0xaa, false, false, false); +} + +static void esp_phy_disable_wrapper(void) +{ + phy_wifi_enable_set(0); + esp_phy_disable(PHY_MODEM_WIFI); +} + +wifi_osi_funcs_t g_wifi_osi_funcs = { + ._version = ESP_WIFI_OS_ADAPTER_VERSION, + ._env_is_chip = esp_coex_common_env_is_chip_wrapper, + ._set_intr = set_intr_wrapper, + ._clear_intr = clear_intr_wrapper, + ._set_isr = set_isr_wrapper, + ._ints_on = enable_intr_wrapper, + ._ints_off = disable_intr_wrapper, + ._is_from_isr = is_from_isr_wrapper, + ._spin_lock_create = esp_coex_common_spin_lock_create_wrapper, + ._spin_lock_delete = free, + ._wifi_int_disable = esp_coex_common_int_disable_wrapper, + ._wifi_int_restore = esp_coex_common_int_restore_wrapper, + ._task_yield_from_isr = esp_coex_common_task_yield_from_isr_wrapper, + ._semphr_create = esp_coex_common_semphr_create_wrapper, + ._semphr_delete = esp_coex_common_semphr_delete_wrapper, + ._semphr_take = esp_coex_common_semphr_take_wrapper, + ._semphr_give = esp_coex_common_semphr_give_wrapper, + ._wifi_thread_semphr_get = wifi_thread_semphr_get_wrapper, + ._mutex_create = mutex_create_wrapper, + ._recursive_mutex_create = recursive_mutex_create_wrapper, + ._mutex_delete = mutex_delete_wrapper, + ._mutex_lock = mutex_lock_wrapper, + ._mutex_unlock = mutex_unlock_wrapper, + ._queue_create = queue_create_wrapper, + ._queue_delete = queue_delete_wrapper, + ._queue_send = queue_send_wrapper, + ._queue_send_from_isr = queue_send_from_isr_wrapper, + ._queue_send_to_back = queue_send_to_back_wrapper, + ._queue_send_to_front = queue_send_to_front_wrapper, + ._queue_recv = queue_recv_wrapper, + ._queue_msg_waiting = (uint32_t(*)(void *))uxQueueMessagesWaiting, + ._event_group_create = (void *(*)(void))xEventGroupCreate, + ._event_group_delete = (void(*)(void *))vEventGroupDelete, + ._event_group_set_bits = (uint32_t(*)(void *, uint32_t))xEventGroupSetBits, + ._event_group_clear_bits = (uint32_t(*)(void *, uint32_t))xEventGroupClearBits, + ._event_group_wait_bits = event_group_wait_bits_wrapper, + ._task_create_pinned_to_core = task_create_pinned_to_core_wrapper, + ._task_create = task_create_wrapper, + ._task_delete = (void(*)(void *))vTaskDelete, + ._task_delay = vTaskDelay, + ._task_ms_to_tick = task_ms_to_tick_wrapper, + ._task_get_current_task = (void *(*)(void))xTaskGetCurrentTaskHandle, + ._task_get_max_priority = task_get_max_priority_wrapper, + ._malloc = malloc, + ._free = free, + ._event_post = esp_event_post_wrapper, + ._get_free_heap_size = esp_get_free_internal_heap_size, + ._rand = esp_random, + ._dport_access_stall_other_cpu_start_wrap = esp_empty_wrapper, + ._dport_access_stall_other_cpu_end_wrap = esp_empty_wrapper, + ._wifi_apb80m_request = wifi_apb80m_request_wrapper, + ._wifi_apb80m_release = wifi_apb80m_release_wrapper, + ._phy_disable = esp_phy_disable_wrapper, + ._phy_enable = esp_phy_enable_wrapper, + ._phy_update_country_info = esp_phy_update_country_info, + ._read_mac = esp_read_mac_wrapper, + ._timer_arm = timer_arm_wrapper, + ._timer_disarm = esp_coex_common_timer_disarm_wrapper, + ._timer_done = esp_coex_common_timer_done_wrapper, + ._timer_setfn = esp_coex_common_timer_setfn_wrapper, + ._timer_arm_us = esp_coex_common_timer_arm_us_wrapper, + ._wifi_reset_mac = wifi_reset_mac_wrapper, + ._wifi_clock_enable = wifi_clock_enable_wrapper, + ._wifi_clock_disable = wifi_clock_disable_wrapper, + ._wifi_rtc_enable_iso = esp_empty_wrapper, + ._wifi_rtc_disable_iso = esp_empty_wrapper, + ._esp_timer_get_time = esp_timer_get_time, + ._nvs_set_i8 = nvs_set_i8, + ._nvs_get_i8 = nvs_get_i8, + ._nvs_set_u8 = nvs_set_u8, + ._nvs_get_u8 = nvs_get_u8, + ._nvs_set_u16 = nvs_set_u16, + ._nvs_get_u16 = nvs_get_u16, + ._nvs_open = nvs_open_wrapper, + ._nvs_close = nvs_close, + ._nvs_commit = nvs_commit, + ._nvs_set_blob = nvs_set_blob, + ._nvs_get_blob = nvs_get_blob, + ._nvs_erase_key = nvs_erase_key, + ._get_random = os_get_random, + ._get_time = get_time_wrapper, + ._random = os_random, + ._slowclk_cal_get = esp_coex_common_clk_slowclk_cal_get_wrapper, + ._log_write = esp_log_write_wrapper, + ._log_writev = esp_log_writev_wrapper, + ._log_timestamp = esp_log_timestamp, + ._malloc_internal = esp_coex_common_malloc_internal_wrapper, + ._realloc_internal = realloc_internal_wrapper, + ._calloc_internal = calloc_internal_wrapper, + ._zalloc_internal = zalloc_internal_wrapper, + ._wifi_malloc = wifi_malloc, + ._wifi_realloc = wifi_realloc, + ._wifi_calloc = wifi_calloc, + ._wifi_zalloc = wifi_zalloc_wrapper, + ._wifi_create_queue = wifi_create_queue_wrapper, + ._wifi_delete_queue = wifi_delete_queue_wrapper, + ._coex_init = coex_init_wrapper, + ._coex_deinit = coex_deinit_wrapper, + ._coex_enable = coex_enable_wrapper, + ._coex_disable = coex_disable_wrapper, + ._coex_status_get = coex_status_get_wrapper, + ._coex_wifi_request = coex_wifi_request_wrapper, + ._coex_wifi_release = coex_wifi_release_wrapper, + ._coex_wifi_channel_set = coex_wifi_channel_set_wrapper, + ._coex_event_duration_get = coex_event_duration_get_wrapper, + ._coex_pti_get = coex_pti_get_wrapper, + ._coex_schm_status_bit_clear = coex_schm_status_bit_clear_wrapper, + ._coex_schm_status_bit_set = coex_schm_status_bit_set_wrapper, + ._coex_schm_interval_set = coex_schm_interval_set_wrapper, + ._coex_schm_interval_get = coex_schm_interval_get_wrapper, + ._coex_schm_curr_period_get = coex_schm_curr_period_get_wrapper, + ._coex_schm_curr_phase_get = coex_schm_curr_phase_get_wrapper, + ._coex_register_start_cb = coex_register_start_cb_wrapper, +#if SOC_PM_MODEM_RETENTION_BY_REGDMA + ._regdma_link_set_write_wait_content = regdma_link_set_write_wait_content, + ._sleep_retention_find_link_by_id = sleep_retention_find_link_by_id, +#endif + ._coex_schm_process_restart = coex_schm_process_restart_wrapper, + ._coex_schm_register_cb = coex_schm_register_cb_wrapper, + ._coex_schm_flexible_period_set = coex_schm_flexible_period_set_wrapper, + ._coex_schm_flexible_period_get = coex_schm_flexible_period_get_wrapper, + ._coex_schm_get_phase_by_idx = coex_schm_get_phase_by_idx_wrapper, + ._coex_configure_preemption_end_cb = coex_configure_preemption_end_cb_wrapper, + ._magic = ESP_WIFI_OS_ADAPTER_MAGIC, +}; diff --git a/components/esp_wifi/include/esp_private/esp_wifi_he_types_private.h b/components/esp_wifi/include/esp_private/esp_wifi_he_types_private.h index f6b7309e45..43382c5db5 100644 --- a/components/esp_wifi/include/esp_private/esp_wifi_he_types_private.h +++ b/components/esp_wifi/include/esp_private/esp_wifi_he_types_private.h @@ -189,7 +189,7 @@ typedef struct { uint32_t txbf; uint32_t dcm; } nonmimo[ESP_TEST_RX_MU_USER_NUM]; -#if CONFIG_IDF_TARGET_ESP32C5 || CONFIG_IDF_TARGET_ESP32C61 +#if CONFIG_IDF_TARGET_ESP32C5 || CONFIG_IDF_TARGET_ESP32C61 || CONFIG_IDF_TARGET_ESP32S31 uint32_t mu_bru_id_0: 16; uint32_t mu_bru_id_bssidx: 16; uint32_t mu_bru_id_2047: 16; @@ -200,7 +200,7 @@ typedef struct { #endif } esp_test_rx_mu_statistics_t; //10932 bytes -#if CONFIG_IDF_TARGET_ESP32C5 || CONFIG_IDF_TARGET_ESP32C61 +#if CONFIG_IDF_TARGET_ESP32C5 || CONFIG_IDF_TARGET_ESP32C61 || CONFIG_IDF_TARGET_ESP32S31 typedef struct { uint32_t legacy; uint32_t legacy_noeb; @@ -271,6 +271,10 @@ typedef struct { int8_t min_mu_data_rssi; int8_t max_mu_data_rssi; float avg_mu_data_rssi; +#elif CONFIG_IDF_TARGET_ESP32S31 + int8_t rx_min_rssi[4]; + int8_t rx_max_rssi[4]; + float avg_rx_rssi[4]; #endif } esp_test_rx_statistics_t; //140 bytes @@ -437,7 +441,7 @@ typedef struct { uint16_t rxhung_statis; uint16_t txhung_statis; uint32_t rxtxhung; -#if CONFIG_IDF_TARGET_ESP32C5 || CONFIG_IDF_TARGET_ESP32C61 +#if CONFIG_IDF_TARGET_ESP32C5 || CONFIG_IDF_TARGET_ESP32C61 || CONFIG_IDF_TARGET_ESP32S31 uint32_t rxtxpanic; uint8_t bf_ndp_timeout; uint8_t bf_report_err; diff --git a/components/esp_wifi/include/esp_private/wifi_os_adapter.h b/components/esp_wifi/include/esp_private/wifi_os_adapter.h index ad06dce03f..1d373a2649 100644 --- a/components/esp_wifi/include/esp_private/wifi_os_adapter.h +++ b/components/esp_wifi/include/esp_private/wifi_os_adapter.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2018-2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2018-2026 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -149,13 +149,16 @@ typedef struct wifi_osi_funcs_t { int (* _coex_schm_process_restart)(void); int (* _coex_schm_register_cb)(int, int (* cb)(int)); int (* _coex_register_start_cb)(int (* cb)(void)); -#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32C5 || CONFIG_IDF_TARGET_ESP32C61 +#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32C5 || CONFIG_IDF_TARGET_ESP32C61 || CONFIG_IDF_TARGET_ESP32S31 void (* _regdma_link_set_write_wait_content)(void *, uint32_t, uint32_t); void * (* _sleep_retention_find_link_by_id)(int); #endif int (*_coex_schm_flexible_period_set)(uint8_t); uint8_t (*_coex_schm_flexible_period_get)(void); void * (*_coex_schm_get_phase_by_idx)(int); +#if CONFIG_IDF_TARGET_ESP32S31 + int (* _coex_configure_preemption_end_cb)(bool is_register, int(*cb)(uint32_t)); +#endif int32_t _magic; } wifi_osi_funcs_t; diff --git a/components/esp_wifi/include/esp_wifi_types_generic.h b/components/esp_wifi/include/esp_wifi_types_generic.h index 6406fbd64d..f217949c8a 100644 --- a/components/esp_wifi/include/esp_wifi_types_generic.h +++ b/components/esp_wifi/include/esp_wifi_types_generic.h @@ -1300,6 +1300,7 @@ typedef struct { uint64_t t2; /**< Time of arrival of FTM frame at FTM Initiator in pSec */ uint64_t t3; /**< Time of departure of ACK from FTM Initiator in pSec */ uint64_t t4; /**< Time of arrival of ACK at FTM Responder in pSec */ + int16_t ppm; /**< Clock frequency offset in parts per million (PPM) between local and peer device */ } wifi_ftm_report_entry_t; /** diff --git a/components/esp_wifi/include/local/esp_wifi_types_native.h b/components/esp_wifi/include/local/esp_wifi_types_native.h index 3efc979daa..dea9da5483 100644 --- a/components/esp_wifi/include/local/esp_wifi_types_native.h +++ b/components/esp_wifi/include/local/esp_wifi_types_native.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2023-2026 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -18,8 +18,8 @@ extern "C" { #if CONFIG_IDF_TARGET_ESP32C2 #define ESP_WIFI_MAX_CONN_NUM (4) /**< max number of stations which can connect to ESP32C2 soft-AP */ -#elif CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32C5 || CONFIG_IDF_TARGET_ESP32C61 -#define ESP_WIFI_MAX_CONN_NUM (10) /**< max number of stations which can connect to ESP32C3/ESP32C6/ESP32C5/ESP32C61 soft-AP */ +#elif CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32C5 || CONFIG_IDF_TARGET_ESP32C61 || CONFIG_IDF_TARGET_ESP32S31 +#define ESP_WIFI_MAX_CONN_NUM (10) /**< max number of stations which can connect to ESP32C3/ESP32C6/ESP32C5/ESP32C61/ESP32S31 soft-AP */ #else #define ESP_WIFI_MAX_CONN_NUM (15) /**< max number of stations which can connect to ESP32/ESP32S3/ESP32S2 soft-AP */ #endif diff --git a/components/esp_wifi/lib b/components/esp_wifi/lib index cdb85041a2..be8700b2cd 160000 --- a/components/esp_wifi/lib +++ b/components/esp_wifi/lib @@ -1 +1 @@ -Subproject commit cdb85041a22d09dea948a3fe4975778f79c064d0 +Subproject commit be8700b2cdca6d72a94713f6cd3809243c9bd8dc diff --git a/components/esp_wifi/remote/Kconfig.slave_select.in b/components/esp_wifi/remote/Kconfig.slave_select.in index 67a71b2853..39086cf20e 100644 --- a/components/esp_wifi/remote/Kconfig.slave_select.in +++ b/components/esp_wifi/remote/Kconfig.slave_select.in @@ -20,4 +20,6 @@ choice SLAVE_IDF_TARGET bool "esp32c5" config SLAVE_IDF_TARGET_ESP32C61 bool "esp32c61" + config SLAVE_IDF_TARGET_ESP32S31 + bool "esp32s31" endchoice diff --git a/components/esp_wifi/remote/Kconfig.soc_wifi_caps.in b/components/esp_wifi/remote/Kconfig.soc_wifi_caps.in index cadde17acb..f19c54c3a3 100644 --- a/components/esp_wifi/remote/Kconfig.soc_wifi_caps.in +++ b/components/esp_wifi/remote/Kconfig.soc_wifi_caps.in @@ -407,3 +407,59 @@ if SLAVE_IDF_TARGET_ESP32C61 default y endif # ESP32C61 + +if SLAVE_IDF_TARGET_ESP32S31 + + config SLAVE_SOC_WIFI_SUPPORTED # ignore: multiple-definition + bool + default y + + config SLAVE_SOC_WIFI_HW_TSF # ignore: multiple-definition + bool + default y + + config SLAVE_SOC_WIFI_FTM_SUPPORT # ignore: multiple-definition + bool + default y + + config SLAVE_SOC_WIFI_GCMP_SUPPORT # ignore: multiple-definition + bool + default y + + config SLAVE_SOC_WIFI_WAPI_SUPPORT # ignore: multiple-definition + bool + default y + + config SLAVE_SOC_WIFI_CSI_SUPPORT # ignore: multiple-definition + bool + default y + + config SLAVE_SOC_WIFI_MESH_SUPPORT # ignore: multiple-definition + bool + default y + + config SLAVE_SOC_WIFI_HE_SUPPORT # ignore: multiple-definition + bool + default y + + config SLAVE_SOC_WIFI_MAC_VERSION_NUM # ignore: multiple-definition + int + default 3 + + config SLAVE_SOC_WIFI_NAN_SUPPORT # ignore: multiple-definition + bool + default y + + config SLAVE_SOC_WIFI_LIGHT_SLEEP_CLK_WIDTH # ignore: multiple-definition + int + default 12 + + config SLAVE_IDF_TARGET_ARCH_RISCV # ignore: multiple-definition + bool + default y + + config SLAVE_IDF_ENV_BRINGUP # ignore: multiple-definition + bool + default y + +endif # ESP32S31 diff --git a/components/esp_wifi/remote/include/injected/esp_wifi_types_generic.h b/components/esp_wifi/remote/include/injected/esp_wifi_types_generic.h index 1574ce4bd2..5589bedc07 100644 --- a/components/esp_wifi/remote/include/injected/esp_wifi_types_generic.h +++ b/components/esp_wifi/remote/include/injected/esp_wifi_types_generic.h @@ -1300,6 +1300,7 @@ typedef struct { uint64_t t2; /**< Time of arrival of FTM frame at FTM Initiator in pSec */ uint64_t t3; /**< Time of departure of ACK from FTM Initiator in pSec */ uint64_t t4; /**< Time of arrival of ACK at FTM Responder in pSec */ + int16_t ppm; /**< Clock frequency offset in parts per million (PPM) between local and peer device */ } wifi_ftm_report_entry_t; /** diff --git a/components/esp_wifi/remote/include/injected/esp_wifi_types_native.h b/components/esp_wifi/remote/include/injected/esp_wifi_types_native.h index 0963572a85..497a4fce55 100644 --- a/components/esp_wifi/remote/include/injected/esp_wifi_types_native.h +++ b/components/esp_wifi/remote/include/injected/esp_wifi_types_native.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2023-2026 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -18,8 +18,8 @@ extern "C" { #if CONFIG_SLAVE_IDF_TARGET_ESP32C2 #define ESP_WIFI_MAX_CONN_NUM (4) /**< max number of stations which can connect to ESP32C2 soft-AP */ -#elif CONFIG_SLAVE_IDF_TARGET_ESP32C3 || CONFIG_SLAVE_IDF_TARGET_ESP32C6 || CONFIG_SLAVE_IDF_TARGET_ESP32C5 || CONFIG_SLAVE_IDF_TARGET_ESP32C61 -#define ESP_WIFI_MAX_CONN_NUM (10) /**< max number of stations which can connect to ESP32C3/ESP32C6/ESP32C5/ESP32C61 soft-AP */ +#elif CONFIG_SLAVE_IDF_TARGET_ESP32C3 || CONFIG_SLAVE_IDF_TARGET_ESP32C6 || CONFIG_SLAVE_IDF_TARGET_ESP32C5 || CONFIG_SLAVE_IDF_TARGET_ESP32C61 || CONFIG_SLAVE_IDF_TARGET_ESP32S31 +#define ESP_WIFI_MAX_CONN_NUM (10) /**< max number of stations which can connect to ESP32C3/ESP32C6/ESP32C5/ESP32C61/ESP32S31 soft-AP */ #else #define ESP_WIFI_MAX_CONN_NUM (15) /**< max number of stations which can connect to ESP32/ESP32S3/ESP32S2 soft-AP */ #endif diff --git a/components/esp_wifi/test_apps/.build-test-rules.yml b/components/esp_wifi/test_apps/.build-test-rules.yml index a9972bba6c..d7fadd9143 100644 --- a/components/esp_wifi/test_apps/.build-test-rules.yml +++ b/components/esp_wifi/test_apps/.build-test-rules.yml @@ -3,6 +3,11 @@ components/esp_wifi/test_apps/: disable: - if: SOC_WIFI_SUPPORTED != 1 + + disable_test: + - if: IDF_TARGET in ["esp32s31"] + temporary: true + reason: lack of runner depends_components: - esp_hw_support - esp_rom @@ -21,6 +26,10 @@ components/esp_wifi/test_apps/: components/esp_wifi/test_apps/wifi_nvs_config: disable: - if: SOC_WIFI_SUPPORTED != 1 + disable_test: + - if: IDF_TARGET in ["esp32s31"] + temporary: true + reason: lack of runners depends_components: - esp_hw_support - esp_rom diff --git a/components/esp_wifi/test_apps/bin_size_apsta/README.md b/components/esp_wifi/test_apps/bin_size_apsta/README.md index 1c35092948..de83df56df 100644 --- a/components/esp_wifi/test_apps/bin_size_apsta/README.md +++ b/components/esp_wifi/test_apps/bin_size_apsta/README.md @@ -1,2 +1,2 @@ -| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-S2 | ESP32-S3 | -| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-S2 | ESP32-S3 | ESP32-S31 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | --------- | diff --git a/components/esp_wifi/test_apps/wifi_connect/README.md b/components/esp_wifi/test_apps/wifi_connect/README.md index 1c35092948..de83df56df 100644 --- a/components/esp_wifi/test_apps/wifi_connect/README.md +++ b/components/esp_wifi/test_apps/wifi_connect/README.md @@ -1,2 +1,2 @@ -| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-S2 | ESP32-S3 | -| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-S2 | ESP32-S3 | ESP32-S31 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | --------- | diff --git a/components/esp_wifi/test_apps/wifi_function/README.md b/components/esp_wifi/test_apps/wifi_function/README.md index aa42f91b6b..a1466d0f37 100644 --- a/components/esp_wifi/test_apps/wifi_function/README.md +++ b/components/esp_wifi/test_apps/wifi_function/README.md @@ -1,3 +1,3 @@ -| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-S2 | ESP32-S3 | -| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-S2 | ESP32-S3 | ESP32-S31 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | --------- | diff --git a/components/esp_wifi/test_apps/wifi_nvs_config/README.md b/components/esp_wifi/test_apps/wifi_nvs_config/README.md index 1c35092948..de83df56df 100644 --- a/components/esp_wifi/test_apps/wifi_nvs_config/README.md +++ b/components/esp_wifi/test_apps/wifi_nvs_config/README.md @@ -1,2 +1,2 @@ -| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-S2 | ESP32-S3 | -| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-S2 | ESP32-S3 | ESP32-S31 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | --------- | diff --git a/components/esp_wifi/test_apps/wifi_nvs_config/pytest_wifi_nvs_connect.py b/components/esp_wifi/test_apps/wifi_nvs_config/pytest_wifi_nvs_connect.py index 5fd6124813..b8ac3d2928 100644 --- a/components/esp_wifi/test_apps/wifi_nvs_config/pytest_wifi_nvs_connect.py +++ b/components/esp_wifi/test_apps/wifi_nvs_config/pytest_wifi_nvs_connect.py @@ -9,6 +9,7 @@ from pytest_embedded_idf.utils import idf_parametrize @pytest.mark.parametrize('count', [2], indirect=True) @idf_parametrize( 'target', + # esp32s31: no two_duts runner in CI (rev_default) yet ['esp32', 'esp32c3', 'esp32c5', 'esp32c6', 'esp32c61', 'esp32s2', 'esp32s3'], indirect=['target'], ) diff --git a/components/hal/esp32s31/include/hal/modem_syscon_ll.h b/components/hal/esp32s31/include/hal/modem_syscon_ll.h index 65b19dd9e1..11fe5f0ef8 100644 --- a/components/hal/esp32s31/include/hal/modem_syscon_ll.h +++ b/components/hal/esp32s31/include/hal/modem_syscon_ll.h @@ -393,19 +393,25 @@ static inline void modem_syscon_ll_clk_wifibb_configure(modem_syscon_dev_t *hw, { /* Configure clk_wifibb_22m / clk_wifibb_40m / clk_wifibb_80m - clk_wifibb_40x / clk_wifibb_80x / clk_wifibb_40x1 / clk_wifibb_80x1 + clk_wifibb_40x / clk_wifibb_80x / clk_wifibb_40x1 clk_wifibb_160x1 clk_wifibb_44m is configured in modem_syscon_ll_enable_wifibb_44m_clock + clk_wifibb_80x1 is configured in modem_syscon_ll_enable_wifibb_80x1_clock */ - modem_syscon_ll_clk_conf1_configure(hw, en, 0x1fb); + modem_syscon_ll_clk_conf1_configure(hw, en, 0x17b); } __attribute__((always_inline)) static inline bool modem_syscon_ll_wifibb_clock_is_enabled(modem_syscon_dev_t *hw) { - // Check if any of the wifibb clocks are enabled - return (hw->clk_conf1.val & 0x1fb) == 0x1fb; + return (hw->clk_conf1.val & 0x17b) == 0x17b; +} + +__attribute__((always_inline)) +static inline bool modem_syscon_ll_wifibb_80x1_clock_is_enabled(modem_syscon_dev_t *hw) +{ + return hw->clk_conf1.clk_wifibb_80x1_en; } __attribute__((always_inline)) diff --git a/components/hal/esp32s31/modem_clock_hal.c b/components/hal/esp32s31/modem_clock_hal.c index beed6a610b..4d213e63ac 100644 --- a/components/hal/esp32s31/modem_clock_hal.c +++ b/components/hal/esp32s31/modem_clock_hal.c @@ -7,6 +7,7 @@ // The HAL layer for MODEM CLOCK (ESP32-S31 specific part) #include #include "soc/soc.h" +#include "soc/hp_sys_clkrst_reg.h" #include "esp_attr.h" #include "hal/modem_clock_hal.h" #include "hal/modem_clock_types.h" @@ -117,6 +118,18 @@ uint32_t IRAM_ATTR modem_clock_hal_get_clock_domain_icg_bitmap(modem_clock_hal_c return bitmap; } +void IRAM_ATTR modem_clock_hal_enable_soc_pll_source_cg(modem_clock_hal_context_t *hal, bool enable) +{ + (void)hal; + HP_SYS_CLKRST.modem_conf.val = enable ? 0x3d : 0x25; +} + +bool IRAM_ATTR modem_clock_hal_soc_pll_source_cg_is_enabled(modem_clock_hal_context_t *hal) +{ + (void)hal; + return (HP_SYS_CLKRST.modem_conf.val == 0x3d); +} + void IRAM_ATTR modem_clock_hal_enable_modem_common_fe_clock(modem_clock_hal_context_t *hal, bool enable) { if (enable) { diff --git a/components/hal/include/hal/modem_clock_hal.h b/components/hal/include/hal/modem_clock_hal.h index 07ad1c7b21..2f27533106 100644 --- a/components/hal/include/hal/modem_clock_hal.h +++ b/components/hal/include/hal/modem_clock_hal.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2022-2026 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -34,6 +34,11 @@ bool modem_clock_hal_modem_common_fe_clock_is_enabled(modem_clock_hal_context_t void modem_clock_hal_enable_modem_private_fe_clock(modem_clock_hal_context_t *hal, bool enable); bool modem_clock_hal_modem_private_fe_clock_is_enabled(modem_clock_hal_context_t *hal); +#if SOC_MODEM_CLOCK_SOC_PLL_SOURCE_CG_SUPPORTED +void modem_clock_hal_enable_soc_pll_source_cg(modem_clock_hal_context_t *hal, bool enable); +bool modem_clock_hal_soc_pll_source_cg_is_enabled(modem_clock_hal_context_t *hal); +#endif + #if SOC_BT_SUPPORTED void modem_clock_hal_set_ble_rtc_timer_divisor_value(modem_clock_hal_context_t *hal, uint32_t divider); void modem_clock_hal_enable_ble_rtc_timer_clock(modem_clock_hal_context_t *hal, bool enable); diff --git a/components/ieee802154/include/esp_ieee802154.h b/components/ieee802154/include/esp_ieee802154.h index 19f5e247be..7e7b4d6aa3 100644 --- a/components/ieee802154/include/esp_ieee802154.h +++ b/components/ieee802154/include/esp_ieee802154.h @@ -823,7 +823,7 @@ esp_err_t esp_ieee802154_multipan_reset_pending_table(esp_ieee802154_multipan_in * @param inf_index Index of the multipan interface. * * @return - * - Current pending mode of type ::esp_ieee802154_pending_mode_t. + * - Current pending mode of type refer to esp_ieee802154_pending_mode_t */ esp_ieee802154_pending_mode_t esp_ieee802154_multipan_get_pending_mode(esp_ieee802154_multipan_index_t inf_index); diff --git a/components/soc/esp32s31/include/soc/Kconfig.soc_caps.in b/components/soc/esp32s31/include/soc/Kconfig.soc_caps.in index 3ea4b681f2..0c04b025e0 100644 --- a/components/soc/esp32s31/include/soc/Kconfig.soc_caps.in +++ b/components/soc/esp32s31/include/soc/Kconfig.soc_caps.in @@ -207,6 +207,18 @@ config SOC_USB_UTMI_PHY_NUM int default 1 +config SOC_PHY_SUPPORTED + bool + default y + +config SOC_WIFI_SUPPORTED + bool + default y + +config SOC_PHY_CALIBRATION_CLOCK_IS_INDEPENDENT + bool + default y + config SOC_XTAL_SUPPORT_40M bool default y @@ -791,6 +803,14 @@ config SOC_MODEM_CLOCK_IS_INDEPENDENT bool default y +config SOC_MODEM_CLOCK_SOC_PLL_SOURCE_CG_SUPPORTED + bool + default y + +config SOC_MODEM_CLOCK_WIFI_BB_80X1_AS_APB + bool + default y + config SOC_CLK_RC_FAST_SUPPORT_CALIBRATION bool default y @@ -990,3 +1010,43 @@ config SOC_JPEG_DECODE_SUPPORTED config SOC_JPEG_ENCODE_SUPPORTED bool default y + +config SOC_WIFI_HW_TSF + bool + default y + +config SOC_WIFI_FTM_SUPPORT + bool + default y + +config SOC_WIFI_GCMP_SUPPORT + bool + default y + +config SOC_WIFI_WAPI_SUPPORT + bool + default y + +config SOC_WIFI_CSI_SUPPORT + bool + default y + +config SOC_WIFI_MESH_SUPPORT + bool + default y + +config SOC_WIFI_HE_SUPPORT + bool + default y + +config SOC_WIFI_MAC_VERSION_NUM + int + default 3 + +config SOC_WIFI_NAN_SUPPORT + bool + default y + +config SOC_WIFI_LIGHT_SLEEP_CLK_WIDTH + int + default 12 diff --git a/components/soc/esp32s31/include/soc/gpio_sig_map.h b/components/soc/esp32s31/include/soc/gpio_sig_map.h index d24ea6caa6..e0b5c32519 100644 --- a/components/soc/esp32s31/include/soc/gpio_sig_map.h +++ b/components/soc/esp32s31/include/soc/gpio_sig_map.h @@ -24,6 +24,8 @@ #define SD_CARD_CDATA7_2_PAD_OUT_IDX 7 #define PAD_MODEM_ANT_SEL0_IDX 8 #define PAD_MODEM_ANT_SEL1_IDX 9 +#define ANT_SEL0_IDX PAD_MODEM_ANT_SEL0_IDX +#define ANT_SEL1_IDX PAD_MODEM_ANT_SEL1_IDX #define UART0_RXD_PAD_IN_IDX 10 #define UART0_TXD_PAD_OUT_IDX 10 #define UART0_CTS_PAD_IN_IDX 11 @@ -80,8 +82,10 @@ #define I2S1_I_WS_PAD_OUT_IDX 36 #define PCNT1_RST_IN0_IDX 37 #define PAD_MODEM_ANT_SEL2_IDX 37 +#define ANT_SEL2_IDX PAD_MODEM_ANT_SEL2_IDX #define PCNT1_RST_IN1_IDX 38 #define PAD_MODEM_ANT_SEL3_IDX 38 +#define ANT_SEL3_IDX PAD_MODEM_ANT_SEL3_IDX #define PCNT1_RST_IN2_IDX 39 #define PAD_MODEM_ANT_SEL4_IDX 39 #define PCNT1_RST_IN3_IDX 40 diff --git a/components/soc/esp32s31/include/soc/periph_defs.h b/components/soc/esp32s31/include/soc/periph_defs.h index 00e90eb068..11aeccb2e6 100644 --- a/components/soc/esp32s31/include/soc/periph_defs.h +++ b/components/soc/esp32s31/include/soc/periph_defs.h @@ -32,7 +32,7 @@ typedef enum { } shared_periph_module_t; #define PERIPH_MODEM_MODULE_MIN PERIPH_WIFI_MODULE -#define PERIPH_MODEM_MODULE_MAX PERIPH_MODEM_ADC_COMMON_FE_MODULE +#define PERIPH_MODEM_MODULE_MAX PERIPH_PHY_CALIBRATION_MODULE #define PERIPH_MODEM_MODULE_NUM (PERIPH_MODEM_MODULE_MAX - PERIPH_MODEM_MODULE_MIN + 1) #define IS_MODEM_MODULE(periph) ((periph>=PERIPH_MODEM_MODULE_MIN) && (periph<=PERIPH_MODEM_MODULE_MAX)) diff --git a/components/soc/esp32s31/include/soc/soc_caps.h b/components/soc/esp32s31/include/soc/soc_caps.h index 36b1cc3ed0..5ee1af60fd 100644 --- a/components/soc/esp32s31/include/soc/soc_caps.h +++ b/components/soc/esp32s31/include/soc/soc_caps.h @@ -109,6 +109,9 @@ #define SOC_USB_FSLS_PHY_NUM (0U) #define SOC_USB_UTMI_PHY_NUM (1U) +#define SOC_PHY_SUPPORTED 1 +#define SOC_WIFI_SUPPORTED 1 +#define SOC_PHY_CALIBRATION_CLOCK_IS_INDEPENDENT 1 /*-------------------------- XTAL CAPS ---------------------------------------*/ #define SOC_XTAL_SUPPORT_40M 1 @@ -367,6 +370,8 @@ // /*-------------------------- CLOCK SUBSYSTEM CAPS ----------------------------------------*/ #define SOC_MODEM_CLOCK_IS_INDEPENDENT (1) +#define SOC_MODEM_CLOCK_SOC_PLL_SOURCE_CG_SUPPORTED (1) +#define SOC_MODEM_CLOCK_WIFI_BB_80X1_AS_APB (1) #define SOC_CLK_RC_FAST_SUPPORT_CALIBRATION (1) @@ -445,3 +450,16 @@ /*--------------------------- JPEG --------------------------------*/ #define SOC_JPEG_DECODE_SUPPORTED (1) #define SOC_JPEG_ENCODE_SUPPORTED (1) +/*------------------------------------ WI-FI CAPS ------------------------------------*/ +#define SOC_WIFI_HW_TSF (1) /*!< Support hardware TSF */ +#define SOC_WIFI_FTM_SUPPORT (1) /*!< Support FTM */ +#define SOC_WIFI_GCMP_SUPPORT (1) /*!< Support GCMP(GCMP128 and GCMP256) */ +#define SOC_WIFI_WAPI_SUPPORT (1) /*!< Support WAPI */ +#define SOC_WIFI_CSI_SUPPORT (1) /*!< Support CSI */ +#define SOC_WIFI_MESH_SUPPORT (1) /*!< Support WIFI MESH */ +#define SOC_WIFI_HE_SUPPORT (1) /*!< Support Wi-Fi 6 */ +#define SOC_WIFI_MAC_VERSION_NUM (3) /*!< Wi-Fi MAC version num is 3 */ +#define SOC_WIFI_NAN_SUPPORT (1) /*!< Support WIFI Aware (NAN) */ + +/*--------------- WIFI LIGHT SLEEP CLOCK WIDTH CAPS --------------------------*/ +#define SOC_WIFI_LIGHT_SLEEP_CLK_WIDTH (12) diff --git a/components/wpa_supplicant/CMakeLists.txt b/components/wpa_supplicant/CMakeLists.txt index 3ebc9155bb..e34cbccbd9 100644 --- a/components/wpa_supplicant/CMakeLists.txt +++ b/components/wpa_supplicant/CMakeLists.txt @@ -118,7 +118,7 @@ if(CONFIG_ESP_WIFI_MBEDTLS_CRYPTO) "esp_supplicant/src/crypto/crypto_mbedtls-bignum.c" "esp_supplicant/src/crypto/crypto_mbedtls-rsa.c" "esp_supplicant/src/crypto/crypto_mbedtls-ec.c") - if(NOT CONFIG_IDF_TARGET_ESP32) + if(NOT CONFIG_IDF_TARGET_ESP32 AND NOT CONFIG_IDF_TARGET_ESP32S31) # TDOD IDF-14630 list(APPEND crypto_src "esp_supplicant/src/crypto/fastpsk.c") endif() # Add internal RC4 as RC4 has been removed from mbedtls @@ -130,7 +130,8 @@ if(CONFIG_ESP_WIFI_MBEDTLS_CRYPTO) set(crypto_src ${crypto_src} "src/crypto/sha1-pbkdf2.c" ${crypto_src} "src/crypto/sha1.c" ${crypto_src} "src/crypto/sha1-internal.c") - else() + elseif(NOT CONFIG_IDF_TARGET_ESP32S31) + #TDOD IDF-14630: use mbedtls_pkcs5_pbkdf2_hmac (software) instead of fastpbkdf2. set(crypto_src ${crypto_src} "esp_supplicant/src/crypto/fastpbkdf2.c") endif() if(NOT CONFIG_MBEDTLS_SHA1_C AND CONFIG_MBEDTLS_HARDWARE_SHA) @@ -281,7 +282,7 @@ target_compile_definitions(${COMPONENT_LIB} PRIVATE CONFIG_NO_RADIUS ) -if(CONFIG_MBEDTLS_SHA1_C OR CONFIG_MBEDTLS_HARDWARE_SHA) +if((CONFIG_MBEDTLS_SHA1_C OR CONFIG_MBEDTLS_HARDWARE_SHA) AND NOT CONFIG_IDF_TARGET_ESP32S31) # TDOD IDF-14630 target_compile_definitions(${COMPONENT_LIB} PRIVATE CONFIG_FAST_PBKDF2) endif() diff --git a/components/wpa_supplicant/esp_supplicant/src/crypto/crypto_mbedtls.c b/components/wpa_supplicant/esp_supplicant/src/crypto/crypto_mbedtls.c index 26de756edf..f3b4902dfe 100644 --- a/components/wpa_supplicant/esp_supplicant/src/crypto/crypto_mbedtls.c +++ b/components/wpa_supplicant/esp_supplicant/src/crypto/crypto_mbedtls.c @@ -30,6 +30,7 @@ #include "aes_wrap.h" #include "crypto.h" #include "mbedtls/esp_config.h" +#include "mbedtls/private/pkcs5.h" #include "psa/crypto.h" #include "mbedtls/psa_util.h" diff --git a/components/wpa_supplicant/src/utils/includes.h b/components/wpa_supplicant/src/utils/includes.h index 544ad04d8a..8d4e0b9ac4 100644 --- a/components/wpa_supplicant/src/utils/includes.h +++ b/components/wpa_supplicant/src/utils/includes.h @@ -80,6 +80,8 @@ #include "esp32p4/rom/ets_sys.h" #elif CONFIG_IDF_TARGET_ESP32C61 #include "esp32c61/rom/ets_sys.h" +#elif CONFIG_IDF_TARGET_ESP32S31 +#include "esp32s31/rom/ets_sys.h" #endif #endif /* !__ets__ */ diff --git a/components/wpa_supplicant/test_apps/.build-test-rules.yml b/components/wpa_supplicant/test_apps/.build-test-rules.yml index 8ef11c2aae..dcbe934753 100644 --- a/components/wpa_supplicant/test_apps/.build-test-rules.yml +++ b/components/wpa_supplicant/test_apps/.build-test-rules.yml @@ -3,6 +3,10 @@ components/wpa_supplicant/test_apps: disable: - if: SOC_WIFI_SUPPORTED != 1 + disable_test: + - if: IDF_TARGET in ["esp32s31"] + temporary: true + reason: lack of runners depends_components: - *common_components - esp_wifi diff --git a/components/wpa_supplicant/test_apps/README.md b/components/wpa_supplicant/test_apps/README.md index e5c31559f2..c99e3dbe40 100644 --- a/components/wpa_supplicant/test_apps/README.md +++ b/components/wpa_supplicant/test_apps/README.md @@ -1,5 +1,5 @@ -| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-S2 | ESP32-S3 | -| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-S2 | ESP32-S3 | ESP32-S31 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | --------- | # wpa_supplicant unit test diff --git a/components/wpa_supplicant/test_apps/pytest_wpa_supplicant_ut.py b/components/wpa_supplicant/test_apps/pytest_wpa_supplicant_ut.py index e9819ff551..22f661b080 100644 --- a/components/wpa_supplicant/test_apps/pytest_wpa_supplicant_ut.py +++ b/components/wpa_supplicant/test_apps/pytest_wpa_supplicant_ut.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2023-2025 Espressif Systems (Shanghai) CO LTD +# SPDX-FileCopyrightText: 2023-2026 Espressif Systems (Shanghai) CO LTD # SPDX-License-Identifier: CC0-1.0 import pytest from pytest_embedded import Dut @@ -9,7 +9,16 @@ from pytest_embedded_idf.utils import idf_parametrize @pytest.mark.generic @idf_parametrize( 'target', - ['esp32', 'esp32s2', 'esp32s3', 'esp32c3', 'esp32c2', 'esp32c6', 'esp32c61', 'esp32c5'], + [ + 'esp32', + 'esp32s2', + 'esp32s3', + 'esp32c3', + 'esp32c2', + 'esp32c6', + 'esp32c61', + 'esp32c5', + ], indirect=['target'], ) def test_wpa_supplicant_ut(dut: Dut) -> None: @@ -26,6 +35,7 @@ def test_wpa_supplicant_ut(dut: Dut) -> None: ) @idf_parametrize( 'target', + # esp32s31: no two_duts runner in CI (rev_default) yet ['esp32', 'esp32s2', 'esp32s3', 'esp32c6', 'esp32c61', 'esp32c5'], indirect=['target'], ) diff --git a/docs/conf_common.py b/docs/conf_common.py index 8fd1a29960..646ef8ab3e 100644 --- a/docs/conf_common.py +++ b/docs/conf_common.py @@ -54,7 +54,6 @@ BLE_DOCS = [ 'migration-guides/release-5.x/5.0/bluetooth-low-energy.rst', ] - BLE_MESH_DOCS = [ 'api-guides/esp-ble-mesh/ble-mesh-index.rst', 'api-guides/esp-ble-mesh/ble-mesh-feature-list.rst', @@ -339,6 +338,8 @@ ESP32H4_DOCS = [ ESP32S31_DOCS = [ 'api-reference/system/ipc.rst', + 'api-guides/RF_calibration.rst', + 'api-guides/phy.rst', ] ESP32P4_DOCS = [ @@ -460,12 +461,11 @@ github_repo = 'espressif/esp-idf' html_context['github_user'] = 'espressif' # noqa: F405 html_context['github_repo'] = 'esp-idf' # noqa: F405 - # Extra options required by sphinx_idf_theme project_slug = 'esp-idf' versions_url = 'https://dl.espressif.com/dl/esp-idf/idf_versions.js' -idf_targets = ['esp32', 'esp32s2', 'esp32s3', 'esp32c3', 'esp32c2', 'esp32c5', 'esp32c6', 'esp32p4'] +idf_targets = ['esp32', 'esp32s2', 'esp32s3', 'esp32s31', 'esp32c3', 'esp32c2', 'esp32c5', 'esp32c6', 'esp32p4'] languages = ['en', 'zh_CN'] google_analytics_id = os.environ.get('CI_GOOGLE_ANALYTICS_ID', None) diff --git a/docs/doxygen/Doxyfile_esp32s31 b/docs/doxygen/Doxyfile_esp32s31 index 8c34a06b99..576befa548 100644 --- a/docs/doxygen/Doxyfile_esp32s31 +++ b/docs/doxygen/Doxyfile_esp32s31 @@ -5,4 +5,6 @@ INPUT += \ $(PROJECT_PATH)/components/esp_driver_jpeg/include/driver/jpeg_types.h \ $(PROJECT_PATH)/components/esp_driver_touch_sens/hw_ver3/include/driver/touch_version_types.h \ $(PROJECT_PATH)/components/esp_driver_touch_sens/include/driver/touch_sens.h \ - $(PROJECT_PATH)/components/esp_driver_touch_sens/include/driver/touch_sens_types.h + $(PROJECT_PATH)/components/esp_driver_touch_sens/include/driver/touch_sens_types.h\ + $(PROJECT_PATH)/components/esp_phy/include/esp_phy_init.h \ + $(PROJECT_PATH)/components/esp_phy/include/esp_phy_cert_test.h diff --git a/docs/en/api-guides/low-power-mode/low-power-mode-wifi.rst b/docs/en/api-guides/low-power-mode/low-power-mode-wifi.rst index 880744e117..df50b43815 100644 --- a/docs/en/api-guides/low-power-mode/low-power-mode-wifi.rst +++ b/docs/en/api-guides/low-power-mode/low-power-mode-wifi.rst @@ -6,8 +6,9 @@ Introduction to Low Power Mode in Wi-Fi Scenarios After the previous introduction to low power mode from a systemic perspective, this section delves into low power mode in Wi-Fi scenarios. Due to the complexity of Wi-Fi scenarios, basic principles of Wi-Fi power saving will be introduced before specific low power mode. This section is focused on station mode. .. todo - add sleep-current/esp32c61_summary.inc +.. todo - add sleep-current/esp32s31_summary.inc -.. only:: not esp32c61 +.. only:: not esp32c61 and not esp32s31 Choosing Low Power Mode in Wi-Fi Scenarios --------------------------------------------- @@ -364,8 +365,9 @@ Modem-sleep Mode Configuration - false .. todo - add sleep-current/esp32c61_modem_sleep.inc + .. todo - add sleep-current/esp32s31_modem_sleep.inc - .. only:: not esp32c61 + .. only:: not esp32c61 and not esp32s31 - Configuration Performance @@ -378,8 +380,9 @@ Auto Light-sleep Mode + Wi-Fi Scenario Configuration Auto Light-sleep mode in Wi-Fi scenarios does not require wake-up source configuration compared with a pure system. But the remaining part of configuration is basically the same in the two operation scenarios. Therefore, detailed introduction of configurable options, configuration steps, and recommended configurations can be found in the previous section :ref:`Deep-sleep Mode`, with the Wi-Fi-related configurations set to default. .. todo - add eep-current/esp32c61_light_sleep.inc +.. todo - add sleep-current/esp32s31_light_sleep.inc -.. only:: not esp32c61 +.. only:: not esp32c61 and not esp32s31 - Configuration Performance diff --git a/docs/zh_CN/api-guides/low-power-mode/low-power-mode-wifi.rst b/docs/zh_CN/api-guides/low-power-mode/low-power-mode-wifi.rst index 39b62f902f..c05844839f 100644 --- a/docs/zh_CN/api-guides/low-power-mode/low-power-mode-wifi.rst +++ b/docs/zh_CN/api-guides/low-power-mode/low-power-mode-wifi.rst @@ -6,8 +6,9 @@ Wi-Fi 场景下低功耗模式介绍 本节将结合纯系统下的功耗模式来介绍 Wi-Fi 场景下的低功耗模式。因为 Wi-Fi 场景的复杂性,本节会首先介绍 Wi-Fi 省电的基本原理,然后再介绍具体的低功耗模式。本节主要针对 station 模式。 .. todo - add sleep-current/esp32c61_summary.inc +.. todo - add sleep-current/esp32s31_summary.inc -.. only:: not esp32c61 +.. only:: not esp32c61 and not esp32s31 Wi-Fi 场景如何选择低功耗模式 -------------------------------------- @@ -364,8 +365,9 @@ Modem-sleep 模式配置 - false .. todo - add sleep-current/esp32c61_modem_sleep.inc + .. todo - add sleep-current/esp32s31_modem_sleep.inc - .. only:: not esp32c61 + .. only:: not esp32c61 and not esp32s31 - 配置表现 @@ -378,8 +380,9 @@ Auto Light-sleep 模式 + Wi-Fi 场景配置 Auto Light-sleep 在 Wi-Fi 场景下的配置比纯系统下少了唤醒源的配置要求,其余几乎与纯系统下配置一致,因此可配置选项、配置步骤、推荐配置的详细介绍可以参考上文 :ref:`Deep-sleep 模式`。同时 Wi-Fi 相关配置保持默认。 .. todo - add sleep-current/esp32c61_light_sleep.inc +.. todo - add sleep-current/esp32s31_light_sleep.inc -.. only:: not esp32c61 +.. only:: not esp32c61 and not esp32s31 - 配置表现 diff --git a/examples/mesh/ip_internal_network/README.md b/examples/mesh/ip_internal_network/README.md index 394e9622b8..8fc725c3fe 100644 --- a/examples/mesh/ip_internal_network/README.md +++ b/examples/mesh/ip_internal_network/README.md @@ -1,5 +1,5 @@ -| Supported Targets | ESP32 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-S2 | ESP32-S3 | -| ----------------- | ----- | -------- | -------- | -------- | --------- | -------- | -------- | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-S2 | ESP32-S3 | ESP32-S31 | +| ----------------- | ----- | -------- | -------- | -------- | --------- | -------- | -------- | --------- | # Mesh IP Internal Networking example diff --git a/examples/mesh/manual_networking/README.md b/examples/mesh/manual_networking/README.md index 5fc60d9bf9..f2b3842ae1 100644 --- a/examples/mesh/manual_networking/README.md +++ b/examples/mesh/manual_networking/README.md @@ -1,5 +1,5 @@ -| Supported Targets | ESP32 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-S2 | ESP32-S3 | -| ----------------- | ----- | -------- | -------- | -------- | --------- | -------- | -------- | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-S2 | ESP32-S3 | ESP32-S31 | +| ----------------- | ----- | -------- | -------- | -------- | --------- | -------- | -------- | --------- | # Mesh Manual Networking Example diff --git a/examples/network/.build-test-rules.yml b/examples/network/.build-test-rules.yml index b2f6bcd76e..fbc897e33b 100644 --- a/examples/network/.build-test-rules.yml +++ b/examples/network/.build-test-rules.yml @@ -24,6 +24,10 @@ examples/network/eth2ap: examples/network/simple_sniffer: disable: - if: SOC_WIFI_SUPPORTED != 1 + disable_test: + - if: IDF_TARGET in ["esp32s31"] + temporary: true + reason: lack of runners depends_components: - esp_wifi - fatfs diff --git a/examples/network/eth2ap/README.md b/examples/network/eth2ap/README.md index a2e7c4e0b4..a184939bb0 100644 --- a/examples/network/eth2ap/README.md +++ b/examples/network/eth2ap/README.md @@ -1,5 +1,5 @@ -| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-S2 | ESP32-S3 | -| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-S2 | ESP32-S3 | ESP32-S31 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | --------- | # eth2ap Example (See the README.md file in the upper level 'examples' directory for more information about examples. To try a more complex application about Ethernet to WiFi data forwarding, please go to [iot-solution](https://github.com/espressif/esp-iot-solution/tree/release/v1.0/examples/eth2wifi).) diff --git a/examples/network/simple_sniffer/README.md b/examples/network/simple_sniffer/README.md index 0b57e6e64a..2ae23ee5b5 100644 --- a/examples/network/simple_sniffer/README.md +++ b/examples/network/simple_sniffer/README.md @@ -1,5 +1,5 @@ -| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-S2 | ESP32-S3 | -| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-S2 | ESP32-S3 | ESP32-S31 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | --------- | # Simple Sniffer Example diff --git a/examples/network/simple_sniffer/pytest_simple_sniffer.py b/examples/network/simple_sniffer/pytest_simple_sniffer.py index 12ad33fe06..7971e6ab9c 100644 --- a/examples/network/simple_sniffer/pytest_simple_sniffer.py +++ b/examples/network/simple_sniffer/pytest_simple_sniffer.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2021-2025 Espressif Systems (Shanghai) CO LTD +# SPDX-FileCopyrightText: 2021-2026 Espressif Systems (Shanghai) CO LTD # SPDX-License-Identifier: Apache-2.0 import pytest from common_test_methods import get_env_config_variable @@ -47,7 +47,16 @@ def _sniffer_packets_check(dut: Dut, channel: int, packet_num: int) -> None: ) @idf_parametrize( 'target', - ['esp32', 'esp32c2', 'esp32c3', 'esp32c5', 'esp32c6', 'esp32c61', 'esp32s2', 'esp32s3'], + [ + 'esp32', + 'esp32c2', + 'esp32c3', + 'esp32c5', + 'esp32c6', + 'esp32c61', + 'esp32s2', + 'esp32s3', + ], indirect=['target'], ) def test_examples_simple_sniffer(dut: Dut) -> None: diff --git a/examples/network/sta2eth/README.md b/examples/network/sta2eth/README.md index 96e3437aa4..42871e7934 100644 --- a/examples/network/sta2eth/README.md +++ b/examples/network/sta2eth/README.md @@ -1,5 +1,5 @@ -| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-S2 | ESP32-S3 | -| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-S2 | ESP32-S3 | ESP32-S31 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | --------- | # WiFi station to "Wired" interface L2 forwarder diff --git a/examples/openthread/.build-test-rules.yml b/examples/openthread/.build-test-rules.yml index 67d81283d2..d4b00904df 100644 --- a/examples/openthread/.build-test-rules.yml +++ b/examples/openthread/.build-test-rules.yml @@ -31,6 +31,9 @@ examples/openthread/ot_br: - if: ((SOC_WIFI_SUPPORTED == 1 and IDF_TARGET != "esp32c61") or IDF_TARGET == "esp32p4") and CONFIG_NAME != "native_radio" - if: SOC_WIFI_SUPPORTED == 1 and (SOC_IEEE802154_SUPPORTED == 1 and CONFIG_NAME == "native_radio") disable: + - if: IDF_TARGET == "esp32s31" + temporary: true + reason: OpenThread BR example does not support esp32s31 yet - if: IDF_TARGET in ["esp32", "esp32s2", "esp32s3"] and CONFIG_NAME == "br_debug_riscv" disable_test: - if: IDF_TARGET not in ["esp32s3"] @@ -80,6 +83,10 @@ examples/openthread/ot_sleepy_device/light_sleep: examples/openthread/ot_trel: enable: - if: SOC_WIFI_SUPPORTED == 1 + disable: + - if: IDF_TARGET == "esp32s31" + temporary: true + reason: OpenThread TREL example does not support esp32s31 yet disable_test: - if: IDF_TARGET not in ["esp32c6", "esp32s3"] reason: only test on esp32c6 and esp32s3 diff --git a/examples/peripherals/.build-test-rules.yml b/examples/peripherals/.build-test-rules.yml index f66c2f6329..3247f2a6fd 100644 --- a/examples/peripherals/.build-test-rules.yml +++ b/examples/peripherals/.build-test-rules.yml @@ -822,6 +822,9 @@ examples/peripherals/usb/device/cherryusb_serial_device: examples/peripherals/usb/device/tusb_ncm: disable: - if: SOC_USB_OTG_SUPPORTED != 1 or SOC_WIFI_SUPPORTED != 1 + - if: IDF_TARGET == "esp32s31" + temporary: true + reason: USB device examples do not support esp32s31 yet disable_test: - if: IDF_TARGET not in ["esp32s2"] temporary: true diff --git a/examples/peripherals/i2c/i2c_slave_network_sensor/README.md b/examples/peripherals/i2c/i2c_slave_network_sensor/README.md index 91c3ef9314..07d560de80 100644 --- a/examples/peripherals/i2c/i2c_slave_network_sensor/README.md +++ b/examples/peripherals/i2c/i2c_slave_network_sensor/README.md @@ -1,5 +1,5 @@ -| Supported Targets | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-P4 | ESP32-S2 | ESP32-S3 | -| ----------------- | -------- | -------- | -------- | --------- | -------- | -------- | -------- | +| Supported Targets | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-P4 | ESP32-S2 | ESP32-S3 | ESP32-S31 | +| ----------------- | -------- | -------- | -------- | --------- | -------- | -------- | -------- | --------- | # I2C slave example diff --git a/examples/wifi/.build-test-rules.yml b/examples/wifi/.build-test-rules.yml index 3688fe70b2..0cff688ccb 100644 --- a/examples/wifi/.build-test-rules.yml +++ b/examples/wifi/.build-test-rules.yml @@ -43,6 +43,9 @@ examples/wifi/getting_started: - if: IDF_TARGET in ["esp32p4", "esp32h2"] temporary: true reason: lack of runners + - if: IDF_TARGET in ["esp32s31"] + temporary: true + reason: lack of runners depends_filepatterns: - examples/wifi/getting_started/**/* @@ -76,6 +79,9 @@ examples/wifi/itwt: <<: *wifi_depends_default disable: - if: SOC_WIFI_HE_SUPPORT != 1 + - if: IDF_TARGET == "esp32s31" + temporary: true + reason: sdkconfig.defaults references Kconfig CPU freq symbols not present for S31; fix defaults or split sdkconfig then remove examples/wifi/power_save: <<: *wifi_depends_default @@ -83,6 +89,9 @@ examples/wifi/power_save: - if: SOC_WIFI_SUPPORTED != 1 temporary: true reason: requires hardware support + - if: IDF_TARGET in ["esp32s31"] + temporary: true + reason: lack of runners depends_components: - *common_components - esp_wifi diff --git a/examples/wifi/ftm/README.md b/examples/wifi/ftm/README.md index d441c55336..cd1631fe46 100644 --- a/examples/wifi/ftm/README.md +++ b/examples/wifi/ftm/README.md @@ -1,5 +1,5 @@ -| Supported Targets | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-S2 | ESP32-S3 | -| ----------------- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | +| Supported Targets | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-S2 | ESP32-S3 | ESP32-S31 | +| ----------------- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | --------- | # FTM Example diff --git a/examples/wifi/getting_started/pytest_wifi_getting_started.py b/examples/wifi/getting_started/pytest_wifi_getting_started.py index eca8c470b1..6469767a4e 100644 --- a/examples/wifi/getting_started/pytest_wifi_getting_started.py +++ b/examples/wifi/getting_started/pytest_wifi_getting_started.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD +# SPDX-FileCopyrightText: 2022-2026 Espressif Systems (Shanghai) CO LTD # SPDX-License-Identifier: CC0-1.0 import os.path diff --git a/examples/wifi/getting_started/softAP/README.md b/examples/wifi/getting_started/softAP/README.md index f7bf096318..97c68f43f7 100644 --- a/examples/wifi/getting_started/softAP/README.md +++ b/examples/wifi/getting_started/softAP/README.md @@ -1,5 +1,5 @@ -| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-H2 | ESP32-P4 | ESP32-S2 | ESP32-S3 | -| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | -------- | -------- | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-H2 | ESP32-P4 | ESP32-S2 | ESP32-S3 | ESP32-S31 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | -------- | -------- | --------- | # Wi-Fi SoftAP Example diff --git a/examples/wifi/getting_started/station/README.md b/examples/wifi/getting_started/station/README.md index 2d1d7fd7c1..b025844b58 100644 --- a/examples/wifi/getting_started/station/README.md +++ b/examples/wifi/getting_started/station/README.md @@ -1,5 +1,5 @@ -| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-H2 | ESP32-P4 | ESP32-S2 | ESP32-S3 | -| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | -------- | -------- | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-H2 | ESP32-P4 | ESP32-S2 | ESP32-S3 | ESP32-S31 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | -------- | -------- | --------- | # Wi-Fi Station Example diff --git a/examples/wifi/getting_started/station/pytest_wifi_station.py b/examples/wifi/getting_started/station/pytest_wifi_station.py index e66404f372..d16311b161 100644 --- a/examples/wifi/getting_started/station/pytest_wifi_station.py +++ b/examples/wifi/getting_started/station/pytest_wifi_station.py @@ -20,6 +20,7 @@ DIFF_THRESHOLD = { @pytest.mark.parametrize('count, config, skip_autoflash', [(2, 'default|enable_softap', 'y')], indirect=True) @idf_parametrize( 'target', + # esp32s31: no two_duts runner in CI (rev_default) yet ['esp32', 'esp32c2', 'esp32c3', 'esp32s2', 'esp32s3', 'esp32c5', 'esp32c6', 'esp32c61'], indirect=['target'], ) diff --git a/examples/wifi/iperf/README.md b/examples/wifi/iperf/README.md index a518e9c7af..1d26be22c8 100644 --- a/examples/wifi/iperf/README.md +++ b/examples/wifi/iperf/README.md @@ -1,5 +1,5 @@ -| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-H2 | ESP32-P4 | ESP32-S2 | ESP32-S3 | -| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | -------- | -------- | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-H2 | ESP32-P4 | ESP32-S2 | ESP32-S3 | ESP32-S31 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | -------- | -------- | --------- | # Iperf Example diff --git a/examples/wifi/iperf/sdkconfig.defaults.esp32s31 b/examples/wifi/iperf/sdkconfig.defaults.esp32s31 new file mode 100644 index 0000000000..0714d07186 --- /dev/null +++ b/examples/wifi/iperf/sdkconfig.defaults.esp32s31 @@ -0,0 +1,56 @@ +# +# ESP32S31-Specific +# + +CONFIG_ESP_WIFI_STATIC_RX_BUFFER_NUM=48 +CONFIG_ESP_WIFI_DYNAMIC_RX_BUFFER_NUM=72 +CONFIG_ESP_WIFI_DYNAMIC_TX_BUFFER_NUM=64 +CONFIG_ESP_WIFI_AMPDU_TX_ENABLED=y +CONFIG_ESP_WIFI_TX_BA_WIN=64 +CONFIG_ESP_WIFI_AMPDU_RX_ENABLED=y +CONFIG_ESP_WIFI_RX_BA_WIN=64 +CONFIG_ESP_WIFI_NVS_ENABLED=n + +CONFIG_LWIP_TCP_SND_BUF_DEFAULT=65535 +CONFIG_LWIP_TCP_WND_DEFAULT=65535 +CONFIG_LWIP_TCP_RECVMBOX_SIZE=64 +CONFIG_LWIP_UDP_RECVMBOX_SIZE=64 +CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=64 +CONFIG_LWIP_IP_REASS_MAX_PBUFS=15 + +# +# Serial flasher config +# +CONFIG_ESPTOOLPY_FLASHMODE_QIO=y +CONFIG_ESPTOOLPY_FLASHFREQ_40M=y + + +CONFIG_PARTITION_TABLE_SINGLE_APP_LARGE=y +CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y +# +# Wi-Fi +# +CONFIG_ESP_WIFI_ENABLE_WIFI_TX_STATS=y +CONFIG_ESP_WIFI_ENABLE_WIFI_RX_STATS=y +CONFIG_ESP_WIFI_ENABLE_WIFI_RX_MU_STATS=n +CONFIG_ESP_WIFI_ENABLE_DUMP_HESIGB=n +CONFIG_ESP_WIFI_ENABLE_DUMP_MU_CFO=n +CONFIG_ESP_WIFI_ENABLE_DUMP_CTRL_NDPA=y +CONFIG_ESP_WIFI_ENABLE_DUMP_CTRL_BFRP=y +CONFIG_ESP_WIFI_SLP_IRAM_OPT=y +CONFIG_LWIP_EXTRA_IRAM_OPTIMIZATION=y + +#CONFIG_LWIP_TCPIP_CORE_LOCKING=y +#CONFIG_LWIP_TCPIP_CORE_LOCKING_INPUT=y +CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU1=y +CONFIG_LWIP_TCPIP_TASK_AFFINITY=0x1 + +CONFIG_IPERF_DEF_TCP_TX_BUFFER_LEN=2880 +CONFIG_LWIP_TCP_OOSEQ_MAX_PBUFS=12 + +#TODO IDF-14625 IDF-14630 IDF-14631 IDF-14633 +CONFIG_MBEDTLS_HARDWARE_AES=n +CONFIG_MBEDTLS_HARDWARE_MPI=n +CONFIG_MBEDTLS_HARDWARE_SHA=n +CONFIG_MBEDTLS_HARDWARE_ECC=n +#CONFIG_FREERTOS_UNICORE=y diff --git a/examples/wifi/wifi_aware/nan_console/README.md b/examples/wifi/wifi_aware/nan_console/README.md index 2601c22a5c..ee9e464d9f 100644 --- a/examples/wifi/wifi_aware/nan_console/README.md +++ b/examples/wifi/wifi_aware/nan_console/README.md @@ -1,5 +1,5 @@ -| Supported Targets | ESP32 | ESP32-C5 | ESP32-C61 | ESP32-S2 | -| ----------------- | ----- | -------- | --------- | -------- | +| Supported Targets | ESP32 | ESP32-C5 | ESP32-C61 | ESP32-S2 | ESP32-S31 | +| ----------------- | ----- | -------- | --------- | -------- | --------- | # NAN Console Example diff --git a/examples/wifi/wifi_aware/nan_publisher/README.md b/examples/wifi/wifi_aware/nan_publisher/README.md index a50dd05847..8a721f56f0 100644 --- a/examples/wifi/wifi_aware/nan_publisher/README.md +++ b/examples/wifi/wifi_aware/nan_publisher/README.md @@ -1,5 +1,5 @@ -| Supported Targets | ESP32 | ESP32-C5 | ESP32-C61 | ESP32-S2 | -| ----------------- | ----- | -------- | --------- | -------- | +| Supported Targets | ESP32 | ESP32-C5 | ESP32-C61 | ESP32-S2 | ESP32-S31 | +| ----------------- | ----- | -------- | --------- | -------- | --------- | # NAN Publisher Example diff --git a/examples/wifi/wifi_aware/nan_subscriber/README.md b/examples/wifi/wifi_aware/nan_subscriber/README.md index c648c75ab7..25c749a2cf 100644 --- a/examples/wifi/wifi_aware/nan_subscriber/README.md +++ b/examples/wifi/wifi_aware/nan_subscriber/README.md @@ -1,5 +1,5 @@ -| Supported Targets | ESP32 | ESP32-C5 | ESP32-C61 | ESP32-S2 | -| ----------------- | ----- | -------- | --------- | -------- | +| Supported Targets | ESP32 | ESP32-C5 | ESP32-C61 | ESP32-S2 | ESP32-S31 | +| ----------------- | ----- | -------- | --------- | -------- | --------- | # NAN Subscriber Example diff --git a/examples/wifi/wifi_aware/usd_publisher/README.md b/examples/wifi/wifi_aware/usd_publisher/README.md index 1c35092948..de83df56df 100644 --- a/examples/wifi/wifi_aware/usd_publisher/README.md +++ b/examples/wifi/wifi_aware/usd_publisher/README.md @@ -1,2 +1,2 @@ -| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-S2 | ESP32-S3 | -| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-S2 | ESP32-S3 | ESP32-S31 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | --------- | diff --git a/examples/wifi/wifi_aware/usd_subscriber/README.md b/examples/wifi/wifi_aware/usd_subscriber/README.md index 1c35092948..de83df56df 100644 --- a/examples/wifi/wifi_aware/usd_subscriber/README.md +++ b/examples/wifi/wifi_aware/usd_subscriber/README.md @@ -1,2 +1,2 @@ -| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-S2 | ESP32-S3 | -| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-S2 | ESP32-S3 | ESP32-S31 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | --------- | diff --git a/examples/zigbee/.build-test-rules.yml b/examples/zigbee/.build-test-rules.yml index 83ab36aeb5..a088b7cd10 100644 --- a/examples/zigbee/.build-test-rules.yml +++ b/examples/zigbee/.build-test-rules.yml @@ -12,6 +12,10 @@ examples/zigbee/esp_zigbee_gateway: enable: - if: SOC_WIFI_SUPPORTED == 1 and IDF_TARGET not in ["esp32c2", "esp32c61"] reason: not supported esp32c2 and esp32c61 + disable: + - if: IDF_TARGET == "esp32s31" + temporary: true + reason: Zigbee gateway example does not support esp32s31 yet <<: *zigbee_dependencies examples/zigbee/light_sample: diff --git a/tools/ci/dynamic_pipelines/scripts/generate_target_test_child_pipeline.py b/tools/ci/dynamic_pipelines/scripts/generate_target_test_child_pipeline.py index 8086d1e54a..dde414ce16 100644 --- a/tools/ci/dynamic_pipelines/scripts/generate_target_test_child_pipeline.py +++ b/tools/ci/dynamic_pipelines/scripts/generate_target_test_child_pipeline.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2024-2025 Espressif Systems (Shanghai) CO LTD +# SPDX-FileCopyrightText: 2024-2026 Espressif Systems (Shanghai) CO LTD # SPDX-License-Identifier: Apache-2.0 """This file is used for generating the child pipeline for target test jobs. diff --git a/tools/test_apps/phy/.build-test-rules.yml b/tools/test_apps/phy/.build-test-rules.yml index 254cca151a..f76d99540d 100644 --- a/tools/test_apps/phy/.build-test-rules.yml +++ b/tools/test_apps/phy/.build-test-rules.yml @@ -4,7 +4,8 @@ tools/test_apps/phy/phy_multi_init_data_test: disable: - if: SOC_WIFI_SUPPORTED != 1 disable_test: - - if: IDF_TARGET in ["esp32c5", "esp32c61"] + - if: IDF_TARGET in ["esp32c5", "esp32c61", "esp32s31"] + temporary: true reason: lack of runner tools/test_apps/phy/phy_tsens: diff --git a/tools/test_apps/phy/phy_multi_init_data_test/README.md b/tools/test_apps/phy/phy_multi_init_data_test/README.md index 1c35092948..de83df56df 100644 --- a/tools/test_apps/phy/phy_multi_init_data_test/README.md +++ b/tools/test_apps/phy/phy_multi_init_data_test/README.md @@ -1,2 +1,2 @@ -| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-S2 | ESP32-S3 | -| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-S2 | ESP32-S3 | ESP32-S31 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | --------- |