From 76bad285fac1535151c9ccb6e96deb7a6d485646 Mon Sep 17 00:00:00 2001 From: cjin Date: Fri, 14 Aug 2026 11:37:01 +0800 Subject: [PATCH 1/2] fix(ci): updated wifi ota readme supported chips --- tools/test_apps/size_metrics/wifi_ota/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/test_apps/size_metrics/wifi_ota/README.md b/tools/test_apps/size_metrics/wifi_ota/README.md index a0bf243481a..e729ad93611 100644 --- a/tools/test_apps/size_metrics/wifi_ota/README.md +++ b/tools/test_apps/size_metrics/wifi_ota/README.md @@ -1,5 +1,5 @@ -| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-H2 | ESP32-H21 | ESP32-H4 | ESP32-P4 | ESP32-S2 | ESP32-S3 | ESP32-S31 | -| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | --------- | -------- | -------- | -------- | -------- | --------- | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-S2 | ESP32-S3 | ESP32-S31 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | --------- | # Wi-Fi OTA Size Metrics App From 5533d153f5dcb95c53f5ea3cc088d9b9ab1f4c58 Mon Sep 17 00:00:00 2001 From: cjin Date: Fri, 14 Aug 2026 11:35:42 +0800 Subject: [PATCH 2/2] feat(sleep): applied regi2c conflict process at regdma rf --- .../include/esp_private/esp_pau.h | 19 ++++++ components/esp_hw_support/port/pau_regdma.c | 60 ++++++++++++++++++- components/esp_phy/src/phy_init.c | 29 ++++++++- .../esp32c5/include/soc/Kconfig.soc_caps.in | 4 ++ components/soc/esp32c5/include/soc/soc_caps.h | 1 + .../esp32c6/include/soc/Kconfig.soc_caps.in | 4 ++ components/soc/esp32c6/include/soc/soc_caps.h | 1 + .../esp32c61/include/soc/Kconfig.soc_caps.in | 4 ++ .../soc/esp32c61/include/soc/soc_caps.h | 1 + .../esp32s31/include/soc/Kconfig.soc_caps.in | 4 ++ .../soc/esp32s31/include/soc/soc_caps.h | 1 + 11 files changed, 124 insertions(+), 4 deletions(-) diff --git a/components/esp_hw_support/include/esp_private/esp_pau.h b/components/esp_hw_support/include/esp_private/esp_pau.h index 562201060a4..2a4e8a78bcf 100644 --- a/components/esp_hw_support/include/esp_private/esp_pau.h +++ b/components/esp_hw_support/include/esp_private/esp_pau.h @@ -138,6 +138,25 @@ void pau_regdma_trigger_extra_link_restore(void); bool pau_regdma_enable_aon_link_entry(bool enable); #endif +#if SOC_PM_REGDMA_MODEM_LINK_PROTECT +/** + * @brief Callback function type for modem link protect. + * + */ +typedef void (* pau_regdma_modem_link_protect_cb_t)(bool protect); + +/** + * @brief Register the modem link trigger hook callback function + * @param cb the callback function + */ +void pau_regdma_register_modem_link_protect(pau_regdma_modem_link_protect_cb_t cb); + +/** + * @brief Unregister the modem link trigger hook callback function + */ +void pau_regdma_unregister_modem_link_protect(void); +#endif // SOC_PM_REGDMA_MODEM_LINK_PROTECT + #ifdef __cplusplus } #endif diff --git a/components/esp_hw_support/port/pau_regdma.c b/components/esp_hw_support/port/pau_regdma.c index ea9b0ef398b..a64c43c80e0 100644 --- a/components/esp_hw_support/port/pau_regdma.c +++ b/components/esp_hw_support/port/pau_regdma.c @@ -27,12 +27,19 @@ ESP_LOG_ATTR_TAG(TAG, "pau_regdma"); typedef struct { pau_hal_context_t *hal; +#if SOC_PM_REGDMA_MODEM_LINK_PROTECT + pau_regdma_modem_link_protect_cb_t modem_link_protect; +#endif // SOC_PM_REGDMA_MODEM_LINK_PROTECT } pau_context_t; pau_context_t * __attribute__((weak)) IRAM_ATTR PAU_instance(void) { static pau_hal_context_t pau_hal = { .dev = NULL }; - static pau_context_t pau_context = { .hal = &pau_hal }; + static pau_context_t pau_context = { .hal = &pau_hal, +#if SOC_PM_REGDMA_MODEM_LINK_PROTECT + .modem_link_protect = NULL, +#endif // SOC_PM_REGDMA_MODEM_LINK_PROTECT + }; /* periph_module_enable don not need to be put in iram because it is * called before the flash is powered off and will not be called again. */ @@ -61,6 +68,25 @@ void pau_regdma_set_entry_link_addr(pau_regdma_link_addr_t *link_entries) pau_hal_set_regdma_entry_link_addr(PAU_instance()->hal, link_entries); } +#if SOC_PM_REGDMA_MODEM_LINK_PROTECT +void pau_regdma_register_modem_link_protect(pau_regdma_modem_link_protect_cb_t cb) +{ + PAU_instance()->modem_link_protect = cb; +} + +void pau_regdma_unregister_modem_link_protect(void) +{ + PAU_instance()->modem_link_protect = NULL; +} + +static void IRAM_ATTR pau_regdma_invoke_modem_link_procect(bool protect) +{ + if (PAU_instance()->modem_link_protect) { + PAU_instance()->modem_link_protect(protect); + } +} +#endif // SOC_PM_REGDMA_MODEM_LINK_PROTECT + #if SOC_PM_SUPPORT_REGDMA_TRIGGERED_PHY #if SOC_PM_PAU_REGDMA_LINK_MODEM void pau_regdma_set_modem_link_addr(void *link_addr) @@ -71,18 +97,30 @@ void pau_regdma_set_modem_link_addr(void *link_addr) void IRAM_ATTR pau_regdma_trigger_modem_link_backup(bool blocking) { +#if SOC_PM_REGDMA_MODEM_LINK_PROTECT + pau_regdma_invoke_modem_link_procect(true); +#endif // SOC_PM_REGDMA_MODEM_LINK_PROTECT pau_hal_start_regdma_modem_link(PAU_instance()->hal, true, blocking); if (blocking) { pau_hal_stop_regdma_modem_link(PAU_instance()->hal); } +#if SOC_PM_REGDMA_MODEM_LINK_PROTECT + pau_regdma_invoke_modem_link_procect(false); +#endif // SOC_PM_REGDMA_MODEM_LINK_PROTECT } void IRAM_ATTR pau_regdma_trigger_modem_link_restore(bool blocking) { +#if SOC_PM_REGDMA_MODEM_LINK_PROTECT + pau_regdma_invoke_modem_link_procect(true); +#endif // SOC_PM_REGDMA_MODEM_LINK_PROTECT pau_hal_start_regdma_modem_link(PAU_instance()->hal, false, blocking); if (blocking) { pau_hal_stop_regdma_modem_link(PAU_instance()->hal); } +#if SOC_PM_REGDMA_MODEM_LINK_PROTECT + pau_regdma_invoke_modem_link_procect(false); +#endif // SOC_PM_REGDMA_MODEM_LINK_PROTECT } void IRAM_ATTR pau_regdma_modem_link_complete(void) @@ -113,14 +151,30 @@ void IRAM_ATTR pau_clear_regdma_done_status(void) #if SOC_PM_PAU_REGDMA_MODEM_WIFIMAC_WORKAROUND void IRAM_ATTR pau_regdma_trigger_wifimac_link_backup(bool blocking) { +#if SOC_PM_REGDMA_MODEM_LINK_PROTECT + pau_regdma_invoke_modem_link_procect(true); +#endif // SOC_PM_REGDMA_MODEM_LINK_PROTECT pau_hal_start_regdma_wifimac_link(PAU_instance()->hal, true, blocking); - pau_hal_stop_regdma_wifimac_link(PAU_instance()->hal); + if (blocking) { + pau_hal_stop_regdma_wifimac_link(PAU_instance()->hal); + } +#if SOC_PM_REGDMA_MODEM_LINK_PROTECT + pau_regdma_invoke_modem_link_procect(false); +#endif // SOC_PM_REGDMA_MODEM_LINK_PROTECT } void IRAM_ATTR pau_regdma_trigger_wifimac_link_restore(bool blocking) { +#if SOC_PM_REGDMA_MODEM_LINK_PROTECT + pau_regdma_invoke_modem_link_procect(true); +#endif // SOC_PM_REGDMA_MODEM_LINK_PROTECT pau_hal_start_regdma_wifimac_link(PAU_instance()->hal, false, blocking); - pau_hal_stop_regdma_wifimac_link(PAU_instance()->hal); + if (blocking) { + pau_hal_stop_regdma_wifimac_link(PAU_instance()->hal); + } +#if SOC_PM_REGDMA_MODEM_LINK_PROTECT + pau_regdma_invoke_modem_link_procect(false); +#endif // SOC_PM_REGDMA_MODEM_LINK_PROTECT } #endif #endif /* SOC_PM_SUPPORT_REGDMA_TRIGGERED_PHY */ diff --git a/components/esp_phy/src/phy_init.c b/components/esp_phy/src/phy_init.c index afc9a4a48e7..7f63b8efba0 100644 --- a/components/esp_phy/src/phy_init.c +++ b/components/esp_phy/src/phy_init.c @@ -55,6 +55,9 @@ #include "soc/periph_defs.h" #endif #include "phy_init_deps.h" +#if SOC_PM_REGDMA_MODEM_LINK_PROTECT +#include "esp_private/esp_pau.h" +#endif // SOC_PM_REGDMA_MODEM_LINK_PROTECT #ifndef PHY_INIT_MODEM_CLOCK_REQUIRED_BITS #warning "PHY_INIT_MODEM_CLOCK_REQUIRED_BITS not defined; using default value 0" @@ -73,6 +76,11 @@ extern bool pm_get_wifimac_regdma_link_selection(void); #endif #endif +#if SOC_PM_REGDMA_MODEM_LINK_PROTECT +extern void phy_i2c_enter_critical(void); +extern void phy_i2c_exit_critical(void); +#endif // SOC_PM_REGDMA_MODEM_LINK_PROTECT + static const char* TAG = "phy_init"; static _lock_t s_phy_access_lock; @@ -511,6 +519,17 @@ void esp_wifi_bt_power_domain_off(void) #endif // SOC_PM_SUPPORT_MODEM_PD || SOC_PM_SUPPORT_WIFI_PD } +#if SOC_PM_REGDMA_MODEM_LINK_PROTECT +void IRAM_ATTR esp_phy_regi2c_lock_apply(bool enable) +{ + if (enable) { + phy_i2c_enter_critical(); + } else { + phy_i2c_exit_critical(); + } +} +#endif // SOC_PM_REGDMA_MODEM_LINK_PROTECT + void esp_phy_modem_init(uint8_t modem) { #if SOC_PM_MODEM_RETENTION_BY_BACKUPDMA || CONFIG_ESP_WIFI_ENHANCED_LIGHT_SLEEP || CONFIG_ESP_PHY_HW_SWITCH_RF @@ -522,6 +541,9 @@ void esp_phy_modem_init(uint8_t modem) } #endif // SOC_PM_MODEM_RETENTION_BY_BACKUPDMA #if (SOC_PM_SUPPORT_PMU_MODEM_STATE && CONFIG_ESP_WIFI_ENHANCED_LIGHT_SLEEP) || CONFIG_ESP_PHY_HW_SWITCH_RF +#if SOC_PM_REGDMA_MODEM_LINK_PROTECT + pau_regdma_register_modem_link_protect(esp_phy_regi2c_lock_apply); +#endif // SOC_PM_REGDMA_MODEM_LINK_PROTECT if (sleep_modem_phy_init(modem) != ESP_OK) { ESP_LOGE(TAG, "failed to initialize sleep modem phy"); } @@ -552,9 +574,14 @@ void esp_phy_modem_deinit(uint8_t modem) phy_init_flag(); #endif // CONFIG_IDF_TARGET_ESP32C3 #endif // SOC_PM_MODEM_RETENTION_BY_BACKUPDMA - } #if (SOC_PM_SUPPORT_PMU_MODEM_STATE && CONFIG_ESP_WIFI_ENHANCED_LIGHT_SLEEP) || CONFIG_ESP_PHY_HW_SWITCH_RF +#if SOC_PM_REGDMA_MODEM_LINK_PROTECT + pau_regdma_unregister_modem_link_protect(); +#endif // SOC_PM_REGDMA_MODEM_LINK_PROTECT + } sleep_modem_phy_deinit(modem); +#else + } #endif // (SOC_PM_SUPPORT_PMU_MODEM_STATE && CONFIG_ESP_WIFI_ENHANCED_LIGHT_SLEEP) || CONFIG_ESP_PHY_HW_SWITCH_RF _lock_release(&s_phy_access_lock); #endif // SOC_PM_MODEM_RETENTION_BY_BACKUPDMA || CONFIG_ESP_WIFI_ENHANCED_LIGHT_SLEEP diff --git a/components/soc/esp32c5/include/soc/Kconfig.soc_caps.in b/components/soc/esp32c5/include/soc/Kconfig.soc_caps.in index 2c6182f4cef..d7912709516 100644 --- a/components/soc/esp32c5/include/soc/Kconfig.soc_caps.in +++ b/components/soc/esp32c5/include/soc/Kconfig.soc_caps.in @@ -1383,6 +1383,10 @@ config SOC_PM_SUPPORT_PMU_MODEM_STATE bool default y +config SOC_PM_REGDMA_MODEM_LINK_PROTECT + bool + default y + config SOC_PM_SUPPORT_PMU_CLK_ICG bool default y diff --git a/components/soc/esp32c5/include/soc/soc_caps.h b/components/soc/esp32c5/include/soc/soc_caps.h index 04031dd76c3..9c87c937a91 100644 --- a/components/soc/esp32c5/include/soc/soc_caps.h +++ b/components/soc/esp32c5/include/soc/soc_caps.h @@ -559,6 +559,7 @@ #define SOC_PM_SUPPORT_PMU_MODEM_STATE (1) /* macro redefine for pass esp_wifi headers md5sum check */ #define MAC_SUPPORT_PMU_MODEM_STATE SOC_PM_SUPPORT_PMU_MODEM_STATE +#define SOC_PM_REGDMA_MODEM_LINK_PROTECT (1) #define SOC_PM_SUPPORT_PMU_CLK_ICG (1) #define SOC_PM_SUPPORT_MODEM_CLOCK_DOMAIN_ICG (1) diff --git a/components/soc/esp32c6/include/soc/Kconfig.soc_caps.in b/components/soc/esp32c6/include/soc/Kconfig.soc_caps.in index f7cefa3ee52..35d06122bfc 100644 --- a/components/soc/esp32c6/include/soc/Kconfig.soc_caps.in +++ b/components/soc/esp32c6/include/soc/Kconfig.soc_caps.in @@ -1127,6 +1127,10 @@ config SOC_PM_SUPPORT_PMU_MODEM_STATE bool default y +config SOC_PM_REGDMA_MODEM_LINK_PROTECT + bool + default y + config SOC_PM_SUPPORT_PMU_CLK_ICG bool default y diff --git a/components/soc/esp32c6/include/soc/soc_caps.h b/components/soc/esp32c6/include/soc/soc_caps.h index 5f9cc88b79c..1b463aee503 100644 --- a/components/soc/esp32c6/include/soc/soc_caps.h +++ b/components/soc/esp32c6/include/soc/soc_caps.h @@ -462,6 +462,7 @@ #define SOC_PM_SUPPORT_PMU_MODEM_STATE (1) /* macro redefine for pass esp_wifi headers md5sum check */ #define MAC_SUPPORT_PMU_MODEM_STATE SOC_PM_SUPPORT_PMU_MODEM_STATE +#define SOC_PM_REGDMA_MODEM_LINK_PROTECT (1) #define SOC_PM_SUPPORT_PMU_CLK_ICG (1) #define SOC_PM_SUPPORT_MODEM_CLOCK_DOMAIN_ICG (1) diff --git a/components/soc/esp32c61/include/soc/Kconfig.soc_caps.in b/components/soc/esp32c61/include/soc/Kconfig.soc_caps.in index fce473d8223..4e9addb6b85 100644 --- a/components/soc/esp32c61/include/soc/Kconfig.soc_caps.in +++ b/components/soc/esp32c61/include/soc/Kconfig.soc_caps.in @@ -1043,6 +1043,10 @@ config SOC_PM_SUPPORT_PMU_MODEM_STATE bool default y +config SOC_PM_REGDMA_MODEM_LINK_PROTECT + bool + default y + config SOC_PM_SUPPORT_PMU_CLK_ICG bool default y diff --git a/components/soc/esp32c61/include/soc/soc_caps.h b/components/soc/esp32c61/include/soc/soc_caps.h index 3d38ba7d85d..052421725a2 100644 --- a/components/soc/esp32c61/include/soc/soc_caps.h +++ b/components/soc/esp32c61/include/soc/soc_caps.h @@ -430,6 +430,7 @@ #define SOC_PM_SUPPORT_PMU_MODEM_STATE (1) /* macro redefine for pass esp_wifi headers md5sum check */ #define MAC_SUPPORT_PMU_MODEM_STATE SOC_PM_SUPPORT_PMU_MODEM_STATE +#define SOC_PM_REGDMA_MODEM_LINK_PROTECT (1) #define SOC_PM_SUPPORT_PMU_CLK_ICG (1) #define SOC_PM_SUPPORT_MODEM_CLOCK_DOMAIN_ICG (1) diff --git a/components/soc/esp32s31/include/soc/Kconfig.soc_caps.in b/components/soc/esp32s31/include/soc/Kconfig.soc_caps.in index 95d1ac71004..ea35df80fd6 100644 --- a/components/soc/esp32s31/include/soc/Kconfig.soc_caps.in +++ b/components/soc/esp32s31/include/soc/Kconfig.soc_caps.in @@ -1579,6 +1579,10 @@ config SOC_PM_SUPPORT_PMU_MODEM_STATE bool default y +config SOC_PM_REGDMA_MODEM_LINK_PROTECT + bool + default y + config SOC_PM_MODEM_STATE_USE_XTAL bool default y diff --git a/components/soc/esp32s31/include/soc/soc_caps.h b/components/soc/esp32s31/include/soc/soc_caps.h index 76d1367b69f..37e748222e4 100644 --- a/components/soc/esp32s31/include/soc/soc_caps.h +++ b/components/soc/esp32s31/include/soc/soc_caps.h @@ -583,6 +583,7 @@ #define SOC_PM_SUPPORT_REGDMA_TRIGGERED_PHY (1) #define SOC_PM_SUPPORT_PMU_MODEM_STATE (1) #define MAC_SUPPORT_PMU_MODEM_STATE SOC_PM_SUPPORT_PMU_MODEM_STATE +#define SOC_PM_REGDMA_MODEM_LINK_PROTECT (1) /* Since SOC APB and MODEM APB on ESP32-S31 are decoupled, XTAL can be used as SOC clock in modem state */ #define SOC_PM_MODEM_STATE_USE_XTAL (1)