diff --git a/components/esp_hw_support/CMakeLists.txt b/components/esp_hw_support/CMakeLists.txt index 34bb51e3c5..4abb2814c3 100644 --- a/components/esp_hw_support/CMakeLists.txt +++ b/components/esp_hw_support/CMakeLists.txt @@ -53,8 +53,6 @@ if(NOT BOOTLOADER_BUILD) if(CONFIG_SOC_PAU_SUPPORTED) list(APPEND srcs "sleep_retention.c" "sleep_system_peripheral.c" - "sleep_clock.c" - "port/${target}/clock_retention_init.c" ) endif() diff --git a/components/esp_hw_support/lowpower/CMakeLists.txt b/components/esp_hw_support/lowpower/CMakeLists.txt index e92715e94a..286b69d0d0 100644 --- a/components/esp_hw_support/lowpower/CMakeLists.txt +++ b/components/esp_hw_support/lowpower/CMakeLists.txt @@ -6,9 +6,9 @@ set(srcs) if(CONFIG_PM_POWER_DOWN_CPU_IN_LIGHT_SLEEP OR (CONFIG_SOC_CPU_IN_TOP_DOMAIN AND CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP)) - list(APPEND srcs "cpu_retention/port/${target}/sleep_cpu.c") + list(APPEND srcs "port/${target}/sleep_cpu.c") if(CONFIG_SOC_PM_CPU_RETENTION_BY_SW) - list(APPEND srcs "cpu_retention/port/${target}/sleep_cpu_asm.S") + list(APPEND srcs "port/${target}/sleep_cpu_asm.S") set_property(TARGET ${COMPONENT_LIB} APPEND PROPERTY INTERFACE_LINK_LIBRARIES "-u rv_core_critical_regs_save") set_property(TARGET ${COMPONENT_LIB} @@ -17,7 +17,11 @@ if(CONFIG_PM_POWER_DOWN_CPU_IN_LIGHT_SLEEP OR endif() if(CONFIG_SOC_PM_MMU_TABLE_RETENTION_WHEN_TOP_PD AND CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP) - list(APPEND srcs "cpu_retention/port/${target}/sleep_mmu.c") + list(APPEND srcs "port/${target}/sleep_mmu.c") +endif() + +if((CONFIG_SOC_PM_SUPPORT_MODEM_PD OR CONFIG_SOC_PM_SUPPORT_TOP_PD) AND CONFIG_SOC_PAU_SUPPORTED) + list(APPEND srcs "port/${target}/sleep_clock.c") endif() add_prefix(srcs "${CMAKE_CURRENT_LIST_DIR}/" "${srcs}") diff --git a/components/esp_hw_support/lowpower/cpu_retention/port/esp32c3/sleep_cpu.c b/components/esp_hw_support/lowpower/port/esp32c3/sleep_cpu.c similarity index 100% rename from components/esp_hw_support/lowpower/cpu_retention/port/esp32c3/sleep_cpu.c rename to components/esp_hw_support/lowpower/port/esp32c3/sleep_cpu.c diff --git a/components/esp_hw_support/lowpower/cpu_retention/port/esp32c5/rvsleep-frames.h b/components/esp_hw_support/lowpower/port/esp32c5/rvsleep-frames.h similarity index 100% rename from components/esp_hw_support/lowpower/cpu_retention/port/esp32c5/rvsleep-frames.h rename to components/esp_hw_support/lowpower/port/esp32c5/rvsleep-frames.h diff --git a/components/esp_hw_support/lowpower/cpu_retention/port/esp32c5/sleep_cpu.c b/components/esp_hw_support/lowpower/port/esp32c5/sleep_cpu.c similarity index 100% rename from components/esp_hw_support/lowpower/cpu_retention/port/esp32c5/sleep_cpu.c rename to components/esp_hw_support/lowpower/port/esp32c5/sleep_cpu.c diff --git a/components/esp_hw_support/lowpower/cpu_retention/port/esp32c5/sleep_cpu_asm.S b/components/esp_hw_support/lowpower/port/esp32c5/sleep_cpu_asm.S similarity index 100% rename from components/esp_hw_support/lowpower/cpu_retention/port/esp32c5/sleep_cpu_asm.S rename to components/esp_hw_support/lowpower/port/esp32c5/sleep_cpu_asm.S diff --git a/components/esp_hw_support/lowpower/cpu_retention/port/esp32c5/sleep_mmu.c b/components/esp_hw_support/lowpower/port/esp32c5/sleep_mmu.c similarity index 100% rename from components/esp_hw_support/lowpower/cpu_retention/port/esp32c5/sleep_mmu.c rename to components/esp_hw_support/lowpower/port/esp32c5/sleep_mmu.c diff --git a/components/esp_hw_support/lowpower/cpu_retention/port/esp32c6/rvsleep-frames.h b/components/esp_hw_support/lowpower/port/esp32c6/rvsleep-frames.h similarity index 99% rename from components/esp_hw_support/lowpower/cpu_retention/port/esp32c6/rvsleep-frames.h rename to components/esp_hw_support/lowpower/port/esp32c6/rvsleep-frames.h index 616a16469b..d3717c82f7 100644 --- a/components/esp_hw_support/lowpower/cpu_retention/port/esp32c6/rvsleep-frames.h +++ b/components/esp_hw_support/lowpower/port/esp32c6/rvsleep-frames.h @@ -86,7 +86,7 @@ STRUCT_BEGIN STRUCT_FIELD (long, 4, RV_SLP_CTX_PMUFUNC, pmufunc) /* A field is used to identify whether it is going * to sleep or has just been awakened. We use the - * lowest 2 bits as indication infomation, 3 means + * lowest 2 bits as indication information, 3 means * being awakened, 1 means going to sleep */ #if CONFIG_PM_CHECK_SLEEP_RETENTION_FRAME STRUCT_FIELD (long, 4, RV_SLP_CSF_CTX_CRC, frame_crc) /* Used to check RvCoreCriticalSleepFrame integrity */ diff --git a/components/esp_hw_support/sleep_clock.c b/components/esp_hw_support/lowpower/port/esp32c6/sleep_clock.c similarity index 100% rename from components/esp_hw_support/sleep_clock.c rename to components/esp_hw_support/lowpower/port/esp32c6/sleep_clock.c diff --git a/components/esp_hw_support/lowpower/cpu_retention/port/esp32c6/sleep_cpu.c b/components/esp_hw_support/lowpower/port/esp32c6/sleep_cpu.c similarity index 100% rename from components/esp_hw_support/lowpower/cpu_retention/port/esp32c6/sleep_cpu.c rename to components/esp_hw_support/lowpower/port/esp32c6/sleep_cpu.c diff --git a/components/esp_hw_support/lowpower/cpu_retention/port/esp32c6/sleep_cpu_asm.S b/components/esp_hw_support/lowpower/port/esp32c6/sleep_cpu_asm.S similarity index 100% rename from components/esp_hw_support/lowpower/cpu_retention/port/esp32c6/sleep_cpu_asm.S rename to components/esp_hw_support/lowpower/port/esp32c6/sleep_cpu_asm.S diff --git a/components/esp_hw_support/lowpower/cpu_retention/port/esp32h2/rvsleep-frames.h b/components/esp_hw_support/lowpower/port/esp32h2/rvsleep-frames.h similarity index 99% rename from components/esp_hw_support/lowpower/cpu_retention/port/esp32h2/rvsleep-frames.h rename to components/esp_hw_support/lowpower/port/esp32h2/rvsleep-frames.h index 616a16469b..d3717c82f7 100644 --- a/components/esp_hw_support/lowpower/cpu_retention/port/esp32h2/rvsleep-frames.h +++ b/components/esp_hw_support/lowpower/port/esp32h2/rvsleep-frames.h @@ -86,7 +86,7 @@ STRUCT_BEGIN STRUCT_FIELD (long, 4, RV_SLP_CTX_PMUFUNC, pmufunc) /* A field is used to identify whether it is going * to sleep or has just been awakened. We use the - * lowest 2 bits as indication infomation, 3 means + * lowest 2 bits as indication information, 3 means * being awakened, 1 means going to sleep */ #if CONFIG_PM_CHECK_SLEEP_RETENTION_FRAME STRUCT_FIELD (long, 4, RV_SLP_CSF_CTX_CRC, frame_crc) /* Used to check RvCoreCriticalSleepFrame integrity */ diff --git a/components/esp_hw_support/port/esp32h2/clock_retention_init.c b/components/esp_hw_support/lowpower/port/esp32h2/sleep_clock.c similarity index 51% rename from components/esp_hw_support/port/esp32h2/clock_retention_init.c rename to components/esp_hw_support/lowpower/port/esp32h2/sleep_clock.c index b500111948..79f16a76e7 100644 --- a/components/esp_hw_support/port/esp32h2/clock_retention_init.c +++ b/components/esp_hw_support/lowpower/port/esp32h2/sleep_clock.c @@ -10,7 +10,7 @@ #include "modem/modem_lpcon_reg.h" -static __attribute__((unused)) const char *TAG = "sleep_clock"; +static const char *TAG = "sleep_clock"; esp_err_t sleep_clock_system_retention_init(void *arg) { @@ -36,7 +36,9 @@ esp_err_t sleep_clock_modem_retention_init(void *arg) const static sleep_retention_entries_config_t modem_regs_retention[] = { [0] = { .config = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_MODEMSYSCON_LINK(0), MODEM_SYSCON_TEST_CONF_REG, MODEM_SYSCON_TEST_CONF_REG, N_REGS_SYSCON(), 0, 0), .owner = ENTRY(0) | ENTRY(1) }, /* MODEM SYSCON */ +#if SOC_PM_RETENTION_SW_TRIGGER_REGDMA [1] = { .config = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_MODEMLPCON_LINK(0), MODEM_LPCON_TEST_CONF_REG, MODEM_LPCON_TEST_CONF_REG, N_REGS_LPCON(), 0, 0), .owner = ENTRY(0) | ENTRY(1) } /* MODEM LPCON */ +#endif }; esp_err_t err = sleep_retention_entries_create(modem_regs_retention, ARRAY_SIZE(modem_regs_retention), REGDMA_LINK_PRI_MODEM_CLK, SLEEP_RETENTION_MODULE_CLOCK_MODEM); @@ -48,3 +50,52 @@ esp_err_t sleep_clock_modem_retention_init(void *arg) #undef N_REGS_SYSCON } #endif + +bool clock_domain_pd_allowed(void) +{ + const uint32_t inited_modules = sleep_retention_get_inited_modules(); + const uint32_t created_modules = sleep_retention_get_created_modules(); + const uint32_t sys_clk_dep_modules = (const uint32_t) (BIT(SLEEP_RETENTION_MODULE_SYS_PERIPH)); + + /* The clock and reset of MODEM (WiFi, BLE and 15.4) modules are managed + * through MODEM_SYSCON, when one or more MODEMs are initialized, it is + * necessary to check the state of CLOCK_MODEM to determine MODEM domain on + * or off. The clock and reset of digital peripherals are managed through + * PCR, with TOP domain similar to MODEM domain. */ + uint32_t modem_clk_dep_modules = 0; +#if SOC_BT_SUPPORTED + modem_clk_dep_modules |= BIT(SLEEP_RETENTION_MODULE_BLE_MAC) | BIT(SLEEP_RETENTION_MODULE_BT_BB); +#endif +#if SOC_IEEE802154_SUPPORTED + modem_clk_dep_modules |= BIT(SLEEP_RETENTION_MODULE_802154_MAC) | BIT(SLEEP_RETENTION_MODULE_BT_BB); +#endif + + uint32_t mask = 0; + if (inited_modules & sys_clk_dep_modules) { + mask |= BIT(SLEEP_RETENTION_MODULE_CLOCK_SYSTEM); + } + if (inited_modules & modem_clk_dep_modules) { +#if SOC_BT_SUPPORTED || SOC_IEEE802154_SUPPORTED + mask |= BIT(SLEEP_RETENTION_MODULE_CLOCK_MODEM); +#endif + } + return ((inited_modules & mask) == (created_modules & mask)); +} + +ESP_SYSTEM_INIT_FN(sleep_clock_startup_init, SECONDARY, BIT(0), 106) +{ + sleep_retention_module_init_param_t init_param = { + .cbs = { .create = { .handle = sleep_clock_system_retention_init, .arg = NULL } }, + .attribute = SLEEP_RETENTION_MODULE_ATTR_PASSIVE + }; + sleep_retention_module_init(SLEEP_RETENTION_MODULE_CLOCK_SYSTEM, &init_param); + +#if CONFIG_MAC_BB_PD || CONFIG_BT_LE_SLEEP_ENABLE || CONFIG_IEEE802154_SLEEP_ENABLE + init_param = (sleep_retention_module_init_param_t) { + .cbs = { .create = { .handle = sleep_clock_modem_retention_init, .arg = NULL } }, + .attribute = SLEEP_RETENTION_MODULE_ATTR_PASSIVE + }; + sleep_retention_module_init(SLEEP_RETENTION_MODULE_CLOCK_MODEM, &init_param); +#endif + return ESP_OK; +} diff --git a/components/esp_hw_support/lowpower/cpu_retention/port/esp32h2/sleep_cpu.c b/components/esp_hw_support/lowpower/port/esp32h2/sleep_cpu.c similarity index 100% rename from components/esp_hw_support/lowpower/cpu_retention/port/esp32h2/sleep_cpu.c rename to components/esp_hw_support/lowpower/port/esp32h2/sleep_cpu.c diff --git a/components/esp_hw_support/lowpower/cpu_retention/port/esp32h2/sleep_cpu_asm.S b/components/esp_hw_support/lowpower/port/esp32h2/sleep_cpu_asm.S similarity index 100% rename from components/esp_hw_support/lowpower/cpu_retention/port/esp32h2/sleep_cpu_asm.S rename to components/esp_hw_support/lowpower/port/esp32h2/sleep_cpu_asm.S diff --git a/components/esp_hw_support/lowpower/cpu_retention/port/esp32p4/rvsleep-frames.h b/components/esp_hw_support/lowpower/port/esp32p4/rvsleep-frames.h similarity index 99% rename from components/esp_hw_support/lowpower/cpu_retention/port/esp32p4/rvsleep-frames.h rename to components/esp_hw_support/lowpower/port/esp32p4/rvsleep-frames.h index 2371cd8eb6..0d1735bf7a 100644 --- a/components/esp_hw_support/lowpower/cpu_retention/port/esp32p4/rvsleep-frames.h +++ b/components/esp_hw_support/lowpower/port/esp32p4/rvsleep-frames.h @@ -87,7 +87,7 @@ STRUCT_BEGIN STRUCT_FIELD (long, 4, RV_SLP_CTX_PMUFUNC, pmufunc) /* A field is used to identify whether it is going * to sleep or has just been awakened. We use the - * lowest 2 bits as indication infomation, 3 means + * lowest 2 bits as indication information, 3 means * being awakened, 1 means going to sleep */ #if CONFIG_PM_CHECK_SLEEP_RETENTION_FRAME STRUCT_FIELD (long, 4, RV_SLP_CSF_CTX_CRC, frame_crc) /* Used to check RvCoreCriticalSleepFrame integrity */ diff --git a/components/esp_hw_support/port/esp32p4/clock_retention_init.c b/components/esp_hw_support/lowpower/port/esp32p4/sleep_clock.c similarity index 68% rename from components/esp_hw_support/port/esp32p4/clock_retention_init.c rename to components/esp_hw_support/lowpower/port/esp32p4/sleep_clock.c index 07bf98e8f7..84a33cdcdb 100644 --- a/components/esp_hw_support/port/esp32p4/clock_retention_init.c +++ b/components/esp_hw_support/lowpower/port/esp32p4/sleep_clock.c @@ -7,7 +7,7 @@ #include "esp_private/sleep_clock.h" #include "soc/hp_sys_clkrst_reg.h" -static __attribute__((unused)) const char *TAG = "sleep_clock"; +static const char *TAG = "sleep_clock"; esp_err_t sleep_clock_system_retention_init(void *arg) { @@ -28,3 +28,26 @@ esp_err_t sleep_clock_system_retention_init(void *arg) #undef N_REGS_PCR } + +bool clock_domain_pd_allowed(void) +{ + const uint32_t inited_modules = sleep_retention_get_inited_modules(); + const uint32_t created_modules = sleep_retention_get_created_modules(); + const uint32_t sys_clk_dep_modules = (const uint32_t) (BIT(SLEEP_RETENTION_MODULE_SYS_PERIPH)); + + uint32_t mask = 0; + if (inited_modules & sys_clk_dep_modules) { + mask |= BIT(SLEEP_RETENTION_MODULE_CLOCK_SYSTEM); + } + return ((inited_modules & mask) == (created_modules & mask)); +} + +ESP_SYSTEM_INIT_FN(sleep_clock_startup_init, SECONDARY, BIT(0), 106) +{ + sleep_retention_module_init_param_t init_param = { + .cbs = { .create = { .handle = sleep_clock_system_retention_init, .arg = NULL } }, + .attribute = SLEEP_RETENTION_MODULE_ATTR_PASSIVE + }; + sleep_retention_module_init(SLEEP_RETENTION_MODULE_CLOCK_SYSTEM, &init_param); + return ESP_OK; +} diff --git a/components/esp_hw_support/lowpower/cpu_retention/port/esp32p4/sleep_cpu.c b/components/esp_hw_support/lowpower/port/esp32p4/sleep_cpu.c similarity index 100% rename from components/esp_hw_support/lowpower/cpu_retention/port/esp32p4/sleep_cpu.c rename to components/esp_hw_support/lowpower/port/esp32p4/sleep_cpu.c diff --git a/components/esp_hw_support/lowpower/cpu_retention/port/esp32p4/sleep_cpu_asm.S b/components/esp_hw_support/lowpower/port/esp32p4/sleep_cpu_asm.S similarity index 100% rename from components/esp_hw_support/lowpower/cpu_retention/port/esp32p4/sleep_cpu_asm.S rename to components/esp_hw_support/lowpower/port/esp32p4/sleep_cpu_asm.S diff --git a/components/esp_hw_support/lowpower/cpu_retention/port/esp32s3/sleep_cpu.c b/components/esp_hw_support/lowpower/port/esp32s3/sleep_cpu.c similarity index 100% rename from components/esp_hw_support/lowpower/cpu_retention/port/esp32s3/sleep_cpu.c rename to components/esp_hw_support/lowpower/port/esp32s3/sleep_cpu.c diff --git a/components/esp_hw_support/port/esp32c5/clock_retention_init.c b/components/esp_hw_support/port/esp32c5/clock_retention_init.c deleted file mode 100644 index eaccddea7a..0000000000 --- a/components/esp_hw_support/port/esp32c5/clock_retention_init.c +++ /dev/null @@ -1,43 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ - -#include "esp_private/sleep_clock.h" -#include "soc/pcr_reg.h" -#include "modem/modem_syscon_reg.h" - -static __attribute__((unused)) const char *TAG = "sleep_clock"; - -esp_err_t sleep_clock_system_retention_init(void *arg) -{ - #define N_REGS_PCR() (((PCR_HPCORE_0_PD_CTRL_REG - DR_REG_PCR_BASE) / 4) + 1) - - const static sleep_retention_entries_config_t pcr_regs_retention[] = { -#if CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP - [0] = { .config = REGDMA_LINK_ADDR_MAP_INIT(REGDMA_PCR_LINK(0), DR_REG_PCR_BASE, DR_REG_PCR_BASE, 74, 0, 0, 0xffffffff, 0xffffffff, 0x7f7, 0x0), .owner = ENTRY(0) | ENTRY(1) }, -#endif - }; - - esp_err_t err = sleep_retention_entries_create(pcr_regs_retention, ARRAY_SIZE(pcr_regs_retention), REGDMA_LINK_PRI_SYS_CLK, SLEEP_RETENTION_MODULE_CLOCK_SYSTEM); - ESP_RETURN_ON_ERROR(err, TAG, "failed to allocate memory for system (PCR) retention"); - ESP_LOGI(TAG, "System Power, Clock and Reset sleep retention initialization"); - return ESP_OK; -} - -#if CONFIG_MAC_BB_PD || CONFIG_BT_LE_SLEEP_ENABLE || CONFIG_IEEE802154_SLEEP_ENABLE -esp_err_t sleep_clock_modem_retention_init(void *arg) -{ - #define N_REGS_SYSCON() (((MODEM_SYSCON_MEM_RF2_CONF_REG - MODEM_SYSCON_TEST_CONF_REG) / 4) + 1) - - const static sleep_retention_entries_config_t modem_regs_retention[] = { - [0] = { .config = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_MODEMSYSCON_LINK(0), MODEM_SYSCON_TEST_CONF_REG, MODEM_SYSCON_TEST_CONF_REG, N_REGS_SYSCON(), 0, 0), .owner = ENTRY(0) | ENTRY(1) }, /* MODEM SYSCON */ - }; - - esp_err_t err = sleep_retention_entries_create(modem_regs_retention, ARRAY_SIZE(modem_regs_retention), REGDMA_LINK_PRI_MODEM_CLK, SLEEP_RETENTION_MODULE_CLOCK_MODEM); - ESP_RETURN_ON_ERROR(err, TAG, "failed to allocate memory for modem (SYSCON) retention, 1 level priority"); - ESP_LOGI(TAG, "Modem Power, Clock and Reset sleep retention initialization"); - return ESP_OK; -} -#endif diff --git a/components/esp_hw_support/port/esp32c6/clock_retention_init.c b/components/esp_hw_support/port/esp32c6/clock_retention_init.c deleted file mode 100644 index 3027347483..0000000000 --- a/components/esp_hw_support/port/esp32c6/clock_retention_init.c +++ /dev/null @@ -1,56 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ - -#include "esp_private/sleep_clock.h" -#include "soc/pcr_reg.h" -#include "modem/modem_syscon_reg.h" - -static __attribute__((unused)) const char *TAG = "sleep_clock"; - -esp_err_t sleep_clock_system_retention_init(void *arg) -{ - #define N_REGS_PCR() (((PCR_SRAM_POWER_CONF_REG - DR_REG_PCR_BASE) / 4) + 1) - - const static sleep_retention_entries_config_t pcr_regs_retention[] = { - [0] = { .config = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_PCR_LINK(0), DR_REG_PCR_BASE, DR_REG_PCR_BASE, N_REGS_PCR(), 0, 0), .owner = ENTRY(0) | ENTRY(2) } /* pcr */ - }; - - esp_err_t err = sleep_retention_entries_create(pcr_regs_retention, ARRAY_SIZE(pcr_regs_retention), REGDMA_LINK_PRI_SYS_CLK, SLEEP_RETENTION_MODULE_CLOCK_SYSTEM); - ESP_RETURN_ON_ERROR(err, TAG, "failed to allocate memory for system (PCR) retention"); - ESP_LOGI(TAG, "System Power, Clock and Reset sleep retention initialization"); - return ESP_OK; -} - -#if CONFIG_MAC_BB_PD || CONFIG_BT_LE_SLEEP_ENABLE || CONFIG_IEEE802154_SLEEP_ENABLE -esp_err_t sleep_clock_modem_retention_init(void *arg) -{ - #define N_REGS_SYSCON() (((MODEM_SYSCON_MEM_CONF_REG - MODEM_SYSCON_TEST_CONF_REG) / 4) + 1) - - #define MODEM_WIFI_RETENTION_CLOCK (MODEM_SYSCON_CLK_WIFI_APB_FO | MODEM_SYSCON_CLK_FE_APB_FO) - #define MODEM_WIFI_RETENTION_CLOCK_MASK (MODEM_SYSCON_CLK_WIFI_APB_FO_M | MODEM_SYSCON_CLK_FE_APB_FO_M) - - const static sleep_retention_entries_config_t modem_regs_retention[] = { - [0] = { .config = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_MODEMSYSCON_LINK(0), MODEM_SYSCON_TEST_CONF_REG, MODEM_SYSCON_TEST_CONF_REG, N_REGS_SYSCON(), 0, 0), .owner = ENTRY(0) | ENTRY(1) }, /* MODEM SYSCON */ - [1] = { .config = REGDMA_LINK_WRITE_INIT (REGDMA_MODEMSYSCON_LINK(1), MODEM_SYSCON_CLK_CONF1_FORCE_ON_REG, MODEM_WIFI_RETENTION_CLOCK, MODEM_WIFI_RETENTION_CLOCK_MASK, 0, 0), .owner = ENTRY(0) }, /* WiFi (MAC, BB and FE) retention clock enable */ -#if SOC_PM_RETENTION_SW_TRIGGER_REGDMA - [2] = { .config = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_MODEMLPCON_LINK(0), MODEM_LPCON_TEST_CONF_REG, MODEM_LPCON_TEST_CONF_REG, N_REGS_LPCON(), 0, 0), .owner = ENTRY(0) | ENTRY(1) } /* MODEM LPCON */ -#endif - }; - - const static sleep_retention_entries_config_t modem_retention_clock[] = { - [0] = { .config = REGDMA_LINK_WRITE_INIT (REGDMA_MODEMSYSCON_LINK(0xf0), MODEM_SYSCON_CLK_CONF1_FORCE_ON_REG, 0x0, MODEM_WIFI_RETENTION_CLOCK_MASK, 0, 0), .owner = ENTRY(0) } /* WiFi (MAC, BB and FE) retention clock disable */ - }; - - esp_err_t err = sleep_retention_entries_create(modem_regs_retention, ARRAY_SIZE(modem_regs_retention), REGDMA_LINK_PRI_MODEM_CLK, SLEEP_RETENTION_MODULE_CLOCK_MODEM); - ESP_RETURN_ON_ERROR(err, TAG, "failed to allocate memory for modem (SYSCON) retention, 1 level priority"); - - err = sleep_retention_entries_create(modem_retention_clock, ARRAY_SIZE(modem_retention_clock), REGDMA_LINK_PRI_7, SLEEP_RETENTION_MODULE_CLOCK_MODEM); - ESP_RETURN_ON_ERROR(err, TAG, "failed to allocate memory for modem (SYSCON) retention, lowest level priority"); - - ESP_LOGI(TAG, "Modem Power, Clock and Reset sleep retention initialization"); - return ESP_OK; -} -#endif diff --git a/components/esp_system/system_init_fn.txt b/components/esp_system/system_init_fn.txt index 6e7da69cc9..a5448343fe 100644 --- a/components/esp_system/system_init_fn.txt +++ b/components/esp_system/system_init_fn.txt @@ -82,7 +82,7 @@ SECONDARY: 103: esp_security_init in components/esp_security/src/init.c on BIT(0 SECONDARY: 105: esp_sleep_startup_init in components/esp_hw_support/sleep_gpio.c on BIT(0) SECONDARY: 106: sleep_clock_startup_init in components/esp_hw_support/sleep_clock.c on BIT(0) SECONDARY: 107: sleep_sys_periph_startup_init in components/esp_hw_support/sleep_system_peripheral.c on BIT(0) -SECONDARY: 108: sleep_mmu_startup_init in components/esp_hw_support/lowpower/cpu_retention/port/esp32c5/sleep_mmu.c on BIT(0) +SECONDARY: 108: sleep_mmu_startup_init in components/esp_hw_support/lowpower/port/esp32c5/sleep_mmu.c on BIT(0) # app_trace has to be initialized before systemview SECONDARY: 115: esp_apptrace_init in components/app_trace/app_trace.c on ESP_SYSTEM_INIT_ALL_CORES