@@ -13,19 +13,31 @@ static const char *TAG = "sleep_clock";
1313esp_err_t sleep_clock_system_retention_init (void * arg )
1414{
1515 const static sleep_retention_entries_config_t pcr_regs_retention [] = {
16- [0 ] = { .config = REGDMA_LINK_ADDR_MAP_INIT (REGDMA_PCR_LINK (0 ), DR_REG_PCR_BASE , DR_REG_PCR_BASE , 63 , 0 , 0 , 0xfd73ffff , 0xfdffffff , 0xe001 , 0x0 ), .owner = ENTRY (0 ) | ENTRY (1 ) },
16+ [0 ] = { .config = REGDMA_LINK_WRITE_INIT (REGDMA_PCR_LINK (0 ), PCR_AHB_FREQ_CONF_REG , 0 , PCR_AHB_DIV_NUM , 1 , 0 ), .owner = ENTRY (0 ) | ENTRY (1 ) }, /* Set AHB bus frequency to XTAL frequency */
17+ [1 ] = { .config = REGDMA_LINK_WRITE_INIT (REGDMA_PCR_LINK (1 ), PCR_BUS_CLK_UPDATE_REG , 1 , PCR_BUS_CLOCK_UPDATE , 1 , 0 ), .owner = ENTRY (0 ) | ENTRY (1 ) },
18+ #if CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP
19+ [2 ] = { .config = REGDMA_LINK_ADDR_MAP_INIT (REGDMA_PCR_LINK (2 ), DR_REG_PCR_BASE , DR_REG_PCR_BASE , 63 , 0 , 0 , 0xfd73ffff , 0xfdffffff , 0xe001 , 0x0 ), .owner = ENTRY (0 ) | ENTRY (1 ) }
20+ #endif
1721 };
1822
1923 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 );
2024 ESP_RETURN_ON_ERROR (err , TAG , "failed to allocate memory for system (PCR) retention" );
25+
26+ const static sleep_retention_entries_config_t modem_ahb_config [] = {
27+ [0 ] = { .config = REGDMA_LINK_WRITE_INIT (REGDMA_PCR_LINK (3 ), PCR_AHB_FREQ_CONF_REG , 3 , PCR_AHB_DIV_NUM , 1 , 0 ), .owner = ENTRY (1 ) }, /* Set AHB bus frequency to 40 MHz under PMU MODEM state */
28+ [1 ] = { .config = REGDMA_LINK_WRITE_INIT (REGDMA_PCR_LINK (4 ), PCR_BUS_CLK_UPDATE_REG , 1 , PCR_BUS_CLOCK_UPDATE , 1 , 0 ), .owner = ENTRY (1 ) },
29+ };
30+ err = sleep_retention_entries_create (modem_ahb_config , ARRAY_SIZE (modem_ahb_config ), REGDMA_LINK_PRI_4 , SLEEP_RETENTION_MODULE_CLOCK_SYSTEM );
31+ ESP_RETURN_ON_ERROR (err , TAG , "failed to allocate memory for system (PCR) retention, 4 level priority" );
32+
2133 ESP_LOGI (TAG , "System Power, Clock and Reset sleep retention initialization" );
2234 return ESP_OK ;
2335}
2436
2537#if CONFIG_MAC_BB_PD || CONFIG_BT_LE_SLEEP_ENABLE || CONFIG_IEEE802154_SLEEP_ENABLE
2638esp_err_t sleep_clock_modem_retention_init (void * arg )
2739{
28- #define N_REGS_SYSCON () (((MODEM_SYSCON_MEM_CONF_REG - MODEM_SYSCON_TEST_CONF_REG) / 4) + 1)
40+ #define N_REGS_SYSCON () (((MODEM_SYSCON_MEM_RF2_CONF_REG - MODEM_SYSCON_TEST_CONF_REG) / 4) + 1)
2941
3042 const static sleep_retention_entries_config_t modem_regs_retention [] = {
3143 [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 */
@@ -35,6 +47,8 @@ esp_err_t sleep_clock_modem_retention_init(void *arg)
3547 ESP_RETURN_ON_ERROR (err , TAG , "failed to allocate memory for modem (SYSCON) retention, 1 level priority" );
3648 ESP_LOGI (TAG , "Modem Power, Clock and Reset sleep retention initialization" );
3749 return ESP_OK ;
50+
51+ #undef N_REGS_SYSCON
3852}
3953#endif
4054
@@ -83,6 +97,7 @@ ESP_SYSTEM_INIT_FN(sleep_clock_startup_init, SECONDARY, BIT(0), 106)
8397#if CONFIG_MAC_BB_PD || CONFIG_BT_LE_SLEEP_ENABLE || CONFIG_IEEE802154_SLEEP_ENABLE
8498 init_param = (sleep_retention_module_init_param_t ) {
8599 .cbs = { .create = { .handle = sleep_clock_modem_retention_init , .arg = NULL } },
100+ .depends = BIT (SLEEP_RETENTION_MODULE_CLOCK_SYSTEM ),
86101 .attribute = SLEEP_RETENTION_MODULE_ATTR_PASSIVE
87102 };
88103 sleep_retention_module_init (SLEEP_RETENTION_MODULE_CLOCK_MODEM , & init_param );
0 commit comments