diff --git a/components/bt/controller/esp32c5/bt.c b/components/bt/controller/esp32c5/bt.c index c0188b0471d..5983adb06d9 100644 --- a/components/bt/controller/esp32c5/bt.c +++ b/components/bt/controller/esp32c5/bt.c @@ -737,20 +737,45 @@ static esp_err_t sleep_modem_ble_mac_modem_state_init(uint8_t extra) int retention_args = extra; sleep_retention_module_init_param_t init_param = { .cbs = { .create = { .handle = sleep_modem_ble_mac_retention_init, .arg = &retention_args } }, + .attribute = SLEEP_RETENTION_MODULE_ATTR_ATTACH, .depends = RETENTION_MODULE_BITMAP_INIT(BT_BB) }; esp_err_t err = sleep_retention_module_init(SLEEP_RETENTION_MODULE_BLE_MAC, &init_param); - if (err == ESP_OK) { - err = sleep_retention_module_allocate(SLEEP_RETENTION_MODULE_BLE_MAC); + if (err != ESP_OK) { + ESP_LOGE(NIMBLE_PORT_LOG_TAG, "BT sleep retention init error"); + return err; + } + + err = sleep_retention_module_allocate(SLEEP_RETENTION_MODULE_BLE_MAC); + if (err != ESP_OK) { + ESP_LOGE(NIMBLE_PORT_LOG_TAG, "BT sleep retention allocate error"); + return err; + } + + err = sleep_retention_module_attach(SLEEP_RETENTION_MODULE_BLE_MAC); + if (err != ESP_OK) { + ESP_LOGE(NIMBLE_PORT_LOG_TAG, "BT sleep retention attach error"); } return err; } static void sleep_modem_ble_mac_modem_state_deinit(void) { - esp_err_t err = sleep_retention_module_free(SLEEP_RETENTION_MODULE_BLE_MAC); - if (err == ESP_OK) { - err = sleep_retention_module_deinit(SLEEP_RETENTION_MODULE_BLE_MAC); + esp_err_t err = sleep_retention_module_detach(SLEEP_RETENTION_MODULE_BLE_MAC); + if (err != ESP_OK) { + ESP_LOGE(NIMBLE_PORT_LOG_TAG, "BT sleep retention detach error"); + assert(err == ESP_OK); + } + + err = sleep_retention_module_free(SLEEP_RETENTION_MODULE_BLE_MAC); + if (err != ESP_OK) { + ESP_LOGE(NIMBLE_PORT_LOG_TAG, "BT sleep retention free error"); + assert(err == ESP_OK); + } + + err = sleep_retention_module_deinit(SLEEP_RETENTION_MODULE_BLE_MAC); + if (err != ESP_OK) { + ESP_LOGE(NIMBLE_PORT_LOG_TAG, "BT sleep retention deinit error"); assert(err == ESP_OK); } } diff --git a/components/bt/controller/esp32c6/bt.c b/components/bt/controller/esp32c6/bt.c index 71ceaaa25fc..9263d5d2944 100644 --- a/components/bt/controller/esp32c6/bt.c +++ b/components/bt/controller/esp32c6/bt.c @@ -797,20 +797,45 @@ static esp_err_t sleep_modem_ble_mac_modem_state_init(uint8_t extra) int retention_args = extra; sleep_retention_module_init_param_t init_param = { .cbs = { .create = { .handle = sleep_modem_ble_mac_retention_init, .arg = &retention_args } }, + .attribute = SLEEP_RETENTION_MODULE_ATTR_ATTACH, .depends = RETENTION_MODULE_BITMAP_INIT(BT_BB) }; esp_err_t err = sleep_retention_module_init(SLEEP_RETENTION_MODULE_BLE_MAC, &init_param); - if (err == ESP_OK) { - err = sleep_retention_module_allocate(SLEEP_RETENTION_MODULE_BLE_MAC); + if (err != ESP_OK) { + ESP_LOGE(NIMBLE_PORT_LOG_TAG, "BT sleep retention init error"); + return err; + } + + err = sleep_retention_module_allocate(SLEEP_RETENTION_MODULE_BLE_MAC); + if (err != ESP_OK) { + ESP_LOGE(NIMBLE_PORT_LOG_TAG, "BT sleep retention allocate error"); + return err; + } + + err = sleep_retention_module_attach(SLEEP_RETENTION_MODULE_BLE_MAC); + if (err != ESP_OK) { + ESP_LOGE(NIMBLE_PORT_LOG_TAG, "BT sleep retention attach error"); } return err; } static void sleep_modem_ble_mac_modem_state_deinit(void) { - esp_err_t err = sleep_retention_module_free(SLEEP_RETENTION_MODULE_BLE_MAC); - if (err == ESP_OK) { - err = sleep_retention_module_deinit(SLEEP_RETENTION_MODULE_BLE_MAC); + esp_err_t err = sleep_retention_module_detach(SLEEP_RETENTION_MODULE_BLE_MAC); + if (err != ESP_OK) { + ESP_LOGE(NIMBLE_PORT_LOG_TAG, "BT sleep retention detach error"); + assert(err == ESP_OK); + } + + err = sleep_retention_module_free(SLEEP_RETENTION_MODULE_BLE_MAC); + if (err != ESP_OK) { + ESP_LOGE(NIMBLE_PORT_LOG_TAG, "BT sleep retention free error"); + assert(err == ESP_OK); + } + + err = sleep_retention_module_deinit(SLEEP_RETENTION_MODULE_BLE_MAC); + if (err != ESP_OK) { + ESP_LOGE(NIMBLE_PORT_LOG_TAG, "BT sleep retention deinit error"); assert(err == ESP_OK); } } diff --git a/components/bt/controller/esp32h2/bt.c b/components/bt/controller/esp32h2/bt.c index 913e41f1ebd..34cc9ad267c 100644 --- a/components/bt/controller/esp32h2/bt.c +++ b/components/bt/controller/esp32h2/bt.c @@ -767,20 +767,45 @@ static esp_err_t sleep_modem_ble_mac_modem_state_init(uint8_t extra) int retention_args = extra; sleep_retention_module_init_param_t init_param = { .cbs = { .create = { .handle = sleep_modem_ble_mac_retention_init, .arg = &retention_args } }, + .attribute = SLEEP_RETENTION_MODULE_ATTR_ATTACH, .depends = RETENTION_MODULE_BITMAP_INIT(BT_BB) }; esp_err_t err = sleep_retention_module_init(SLEEP_RETENTION_MODULE_BLE_MAC, &init_param); - if (err == ESP_OK) { - err = sleep_retention_module_allocate(SLEEP_RETENTION_MODULE_BLE_MAC); + if (err != ESP_OK) { + ESP_LOGE(NIMBLE_PORT_LOG_TAG, "BT sleep retention init error"); + return err; + } + + err = sleep_retention_module_allocate(SLEEP_RETENTION_MODULE_BLE_MAC); + if (err != ESP_OK) { + ESP_LOGE(NIMBLE_PORT_LOG_TAG, "BT sleep retention allocate error"); + return err; + } + + err = sleep_retention_module_attach(SLEEP_RETENTION_MODULE_BLE_MAC); + if (err != ESP_OK) { + ESP_LOGE(NIMBLE_PORT_LOG_TAG, "BT sleep retention attach error"); } return err; } static void sleep_modem_ble_mac_modem_state_deinit(void) { - esp_err_t err = sleep_retention_module_free(SLEEP_RETENTION_MODULE_BLE_MAC); - if (err == ESP_OK) { - err = sleep_retention_module_deinit(SLEEP_RETENTION_MODULE_BLE_MAC); + esp_err_t err = sleep_retention_module_detach(SLEEP_RETENTION_MODULE_BLE_MAC); + if (err != ESP_OK) { + ESP_LOGE(NIMBLE_PORT_LOG_TAG, "BT sleep retention detach error"); + assert(err == ESP_OK); + } + + err = sleep_retention_module_free(SLEEP_RETENTION_MODULE_BLE_MAC); + if (err != ESP_OK) { + ESP_LOGE(NIMBLE_PORT_LOG_TAG, "BT sleep retention free error"); + assert(err == ESP_OK); + } + + err = sleep_retention_module_deinit(SLEEP_RETENTION_MODULE_BLE_MAC); + if (err != ESP_OK) { + ESP_LOGE(NIMBLE_PORT_LOG_TAG, "BT sleep retention deinit error"); assert(err == ESP_OK); } } diff --git a/components/bt/porting_btdm/controller/btdm_common/src/btdm_lp.c b/components/bt/porting_btdm/controller/btdm_common/src/btdm_lp.c index 5c76d348221..ed2dfd8a8a6 100644 --- a/components/bt/porting_btdm/controller/btdm_common/src/btdm_lp.c +++ b/components/bt/porting_btdm/controller/btdm_common/src/btdm_lp.c @@ -253,10 +253,25 @@ btdm_lp_modem_state_init(void) { sleep_retention_module_init_param_t init_param = { .cbs = {.create = {.handle = (void *)btdm_lp_modem_retention_create, .arg = NULL}}, - .depends = RETENTION_MODULE_BITMAP_INIT(BT_BB)}; + .attribute = SLEEP_RETENTION_MODULE_ATTR_ATTACH, + .depends = RETENTION_MODULE_BITMAP_INIT(BT_BB) + }; + esp_err_t err = sleep_retention_module_init(SLEEP_RETENTION_MODULE_BLE_MAC, &init_param); - if (err == ESP_OK) { - err = sleep_retention_module_allocate(SLEEP_RETENTION_MODULE_BLE_MAC); + if (err != ESP_OK) { + ESP_LOGE(NIMBLE_PORT_LOG_TAG, "BT sleep retention init error"); + return err; + } + + err = sleep_retention_module_allocate(SLEEP_RETENTION_MODULE_BLE_MAC); + if (err != ESP_OK) { + ESP_LOGE(NIMBLE_PORT_LOG_TAG, "BT sleep retention allocate error"); + return err; + } + + err = sleep_retention_module_attach(SLEEP_RETENTION_MODULE_BLE_MAC); + if (err != ESP_OK) { + ESP_LOGE(NIMBLE_PORT_LOG_TAG, "BT sleep retention attach error"); } return err; } @@ -264,9 +279,21 @@ btdm_lp_modem_state_init(void) static void btdm_lp_modem_state_deinit(void) { - esp_err_t err = sleep_retention_module_free(SLEEP_RETENTION_MODULE_BLE_MAC); - if (err == ESP_OK) { - err = sleep_retention_module_deinit(SLEEP_RETENTION_MODULE_BLE_MAC); + esp_err_t err = sleep_retention_module_detach(SLEEP_RETENTION_MODULE_BLE_MAC); + if (err != ESP_OK) { + ESP_LOGE(NIMBLE_PORT_LOG_TAG, "BT sleep retention detach error"); + assert(err == ESP_OK); + } + + err = sleep_retention_module_free(SLEEP_RETENTION_MODULE_BLE_MAC); + if (err != ESP_OK) { + ESP_LOGE(NIMBLE_PORT_LOG_TAG, "BT sleep retention free error"); + assert(err == ESP_OK); + } + + err = sleep_retention_module_deinit(SLEEP_RETENTION_MODULE_BLE_MAC); + if (err != ESP_OK) { + ESP_LOGE(NIMBLE_PORT_LOG_TAG, "BT sleep retention deinit error"); assert(err == ESP_OK); } } diff --git a/components/esp_phy/src/btbb_init.c b/components/esp_phy/src/btbb_init.c index 023be89809f..a4e67296aaa 100644 --- a/components/esp_phy/src/btbb_init.c +++ b/components/esp_phy/src/btbb_init.c @@ -68,6 +68,7 @@ void esp_btbb_enable(void) #if SOC_PM_MODEM_RETENTION_BY_REGDMA && CONFIG_FREERTOS_USE_TICKLESS_IDLE sleep_retention_module_init_param_t init_param = { .cbs = { .create = { .handle = btbb_sleep_retention_init, .arg = NULL } }, + .attribute = SLEEP_RETENTION_MODULE_ATTR_ATTACH, .depends = RETENTION_MODULE_BITMAP_INIT(CLOCK_MODEM) }; esp_err_t err = sleep_retention_module_init(SLEEP_RETENTION_MODULE_BT_BB, &init_param);