@@ -76,36 +76,46 @@ esp_err_t sleep_clock_modem_retention_init(void *arg)
7676
7777bool clock_domain_pd_allowed (void )
7878{
79- const uint32_t inited_modules = sleep_retention_get_inited_modules ();
80- const uint32_t created_modules = sleep_retention_get_created_modules ();
81- const uint32_t sys_clk_dep_modules = (const uint32_t ) ( BIT (SLEEP_RETENTION_MODULE_SYS_PERIPH )) ;
79+ const sleep_retention_module_bitmap_t inited_modules = sleep_retention_get_inited_modules ();
80+ const sleep_retention_module_bitmap_t created_modules = sleep_retention_get_created_modules ();
81+ const sleep_retention_module_bitmap_t sys_clk_dep_modules = (sleep_retention_module_bitmap_t ){ . bitmap [ SLEEP_RETENTION_MODULE_SYS_PERIPH >> 5 ] = BIT (SLEEP_RETENTION_MODULE_SYS_PERIPH % 32 ) } ;
8282
8383 /* The clock and reset of MODEM (WiFi, BLE and 15.4) modules are managed
8484 * through MODEM_SYSCON, when one or more MODEMs are initialized, it is
8585 * necessary to check the state of CLOCK_MODEM to determine MODEM domain on
8686 * or off. The clock and reset of digital peripherals are managed through
8787 * PCR, with TOP domain similar to MODEM domain. */
88- uint32_t modem_clk_dep_modules = 0 ;
88+ sleep_retention_module_bitmap_t modem_clk_dep_modules = ( sleep_retention_module_bitmap_t ){ . bitmap = { 0 } } ;
8989#if SOC_WIFI_SUPPORTED
90- modem_clk_dep_modules |= BIT (SLEEP_RETENTION_MODULE_WIFI_MAC ) | BIT (SLEEP_RETENTION_MODULE_WIFI_BB );
90+ modem_clk_dep_modules .bitmap [SLEEP_RETENTION_MODULE_WIFI_MAC >> 5 ] |= BIT (SLEEP_RETENTION_MODULE_WIFI_MAC % 32 );
91+ modem_clk_dep_modules .bitmap [SLEEP_RETENTION_MODULE_WIFI_BB >> 5 ] |= BIT (SLEEP_RETENTION_MODULE_WIFI_BB % 32 );
9192#endif
9293#if SOC_BT_SUPPORTED
93- modem_clk_dep_modules |= BIT (SLEEP_RETENTION_MODULE_BLE_MAC ) | BIT (SLEEP_RETENTION_MODULE_BT_BB );
94+ modem_clk_dep_modules .bitmap [SLEEP_RETENTION_MODULE_BLE_MAC >> 5 ] |= BIT (SLEEP_RETENTION_MODULE_BLE_MAC % 32 );
95+ modem_clk_dep_modules .bitmap [SLEEP_RETENTION_MODULE_BT_BB >> 5 ] |= BIT (SLEEP_RETENTION_MODULE_BT_BB % 32 );
9496#endif
9597#if SOC_IEEE802154_SUPPORTED
96- modem_clk_dep_modules |= BIT (SLEEP_RETENTION_MODULE_802154_MAC ) | BIT (SLEEP_RETENTION_MODULE_BT_BB );
98+ modem_clk_dep_modules .bitmap [SLEEP_RETENTION_MODULE_802154_MAC >> 5 ] |= BIT (SLEEP_RETENTION_MODULE_802154_MAC % 32 );
99+ modem_clk_dep_modules .bitmap [SLEEP_RETENTION_MODULE_BT_BB >> 5 ] |= BIT (SLEEP_RETENTION_MODULE_BT_BB % 32 );
97100#endif
98101
99- uint32_t mask = 0 ;
100- if (inited_modules & sys_clk_dep_modules ) {
101- mask |= BIT (SLEEP_RETENTION_MODULE_CLOCK_SYSTEM );
102+ const sleep_retention_module_bitmap_t null_module = (sleep_retention_module_bitmap_t ){ .bitmap = { 0 } };
103+
104+ sleep_retention_module_bitmap_t mask = (sleep_retention_module_bitmap_t ){ .bitmap = { 0 } };
105+ const sleep_retention_module_bitmap_t system_modules = sleep_retention_module_bitmap_and (inited_modules , sys_clk_dep_modules );
106+ if (!sleep_retention_module_bitmap_eq (system_modules , null_module )) {
107+ mask .bitmap [SLEEP_RETENTION_MODULE_CLOCK_SYSTEM >> 5 ] |= BIT (SLEEP_RETENTION_MODULE_CLOCK_SYSTEM % 32 );
102108 }
103- if (inited_modules & modem_clk_dep_modules ) {
104109#if SOC_WIFI_SUPPORTED || SOC_BT_SUPPORTED || SOC_IEEE802154_SUPPORTED
105- mask |= BIT (SLEEP_RETENTION_MODULE_CLOCK_MODEM );
106- #endif
110+ const sleep_retention_module_bitmap_t modem_modules = sleep_retention_module_bitmap_and (inited_modules , modem_clk_dep_modules );
111+ if (!sleep_retention_module_bitmap_eq (modem_modules , null_module )) {
112+ mask .bitmap [SLEEP_RETENTION_MODULE_CLOCK_MODEM >> 5 ] |= BIT (SLEEP_RETENTION_MODULE_CLOCK_MODEM % 32 );
107113 }
108- return ((inited_modules & mask ) == (created_modules & mask ));
114+ #endif
115+
116+ const sleep_retention_module_bitmap_t clock_domain_inited_modules = sleep_retention_module_bitmap_and (inited_modules , mask );
117+ const sleep_retention_module_bitmap_t clock_domain_created_modules = sleep_retention_module_bitmap_and (created_modules , mask );
118+ return sleep_retention_module_bitmap_eq (clock_domain_inited_modules , clock_domain_created_modules );
109119}
110120
111121ESP_SYSTEM_INIT_FN (sleep_clock_startup_init , SECONDARY , BIT (0 ), 106 )
@@ -119,7 +129,7 @@ ESP_SYSTEM_INIT_FN(sleep_clock_startup_init, SECONDARY, BIT(0), 106)
119129#if CONFIG_MAC_BB_PD || CONFIG_BT_LE_SLEEP_ENABLE || CONFIG_IEEE802154_SLEEP_ENABLE
120130 init_param = (sleep_retention_module_init_param_t ) {
121131 .cbs = { .create = { .handle = sleep_clock_modem_retention_init , .arg = NULL } },
122- .depends = BIT (SLEEP_RETENTION_MODULE_CLOCK_SYSTEM ),
132+ .depends . bitmap [ SLEEP_RETENTION_MODULE_CLOCK_SYSTEM >> 5 ] = BIT (SLEEP_RETENTION_MODULE_CLOCK_SYSTEM % 32 ),
123133 .attribute = SLEEP_RETENTION_MODULE_ATTR_PASSIVE
124134 };
125135 sleep_retention_module_init (SLEEP_RETENTION_MODULE_CLOCK_MODEM , & init_param );
0 commit comments