fix(phy): add fe dependency when enable rf with regdma

This commit is contained in:
cjin
2026-07-29 09:59:38 +08:00
parent c2a1465dc2
commit aebcc6842d
6 changed files with 173 additions and 79 deletions

View File

@@ -276,13 +276,16 @@ const esp_phy_init_data_t phy_init_data= { {
} }; } };
const char __attribute__((section(".rodata"))) phy_init_magic_post[] = PHY_INIT_MAGIC; const char __attribute__((section(".rodata"))) phy_init_magic_post[] = PHY_INIT_MAGIC;
#if SOC_PM_MODEM_RETENTION_BY_REGDMA && (CONFIG_MAC_BB_PD || CONFIG_ESP_PHY_HW_SWITCH_RF)
#include "esp_private/sleep_retention.h"
uint8_t s_phy_fe_retention_ref = 0;
static _lock_t s_phy_fe_retention_lock;
static const char* TAG = "phy_sleep";
#endif // SOC_PM_MODEM_RETENTION_BY_REGDMA && (CONFIG_MAC_BB_PD || CONFIG_ESP_PHY_HW_SWITCH_RF)
#if SOC_PM_MODEM_RETENTION_BY_REGDMA && CONFIG_MAC_BB_PD #if SOC_PM_MODEM_RETENTION_BY_REGDMA && CONFIG_MAC_BB_PD
#include "esp_private/sleep_retention.h"
static const char* TAG = "phy_sleep";
static esp_err_t sleep_retention_wifi_bb_init(void *arg) static esp_err_t sleep_retention_wifi_bb_init(void *arg)
{ {
#define N_REGS_WIFI_AGC() (130) #define N_REGS_WIFI_AGC() (130)
@@ -353,18 +356,19 @@ void esp_phy_sleep_data_deinit(void)
ESP_LOGW(TAG, "WiFi BB sleep retention deinit failed"); ESP_LOGW(TAG, "WiFi BB sleep retention deinit failed");
} }
} }
#endif // SOC_PM_MODEM_RETENTION_BY_REGDMA && CONFIG_MAC_BB_PD
#if SOC_PM_MODEM_RETENTION_BY_REGDMA && (CONFIG_MAC_BB_PD || CONFIG_ESP_PHY_HW_SWITCH_RF)
static esp_err_t sleep_retention_phy_fe_init(void *arg) static esp_err_t sleep_retention_phy_fe_init(void *arg)
{ {
#define N_REGS_FE_COEX() (21) #define N_REGS_FE_COEX() (21)
#define N_REGS_FE_DATA() (35) #define N_REGS_FE_DATA() (35)
#define N_REGS_FE_CTRL() (56) #define N_REGS_FE_CTRL() (56)
#define N_REGS_FE_DATA_WIFI() (22) #define N_REGS_FE_DATA_WIFI() (22)
#define REG_FECOEX_BASE 0x600a0000 #define REG_FECOEX_BASE 0x600a0000
#define REG_FEDATA_BASE 0x600a0400 #define REG_FEDATA_BASE 0x600a0400
#define REG_FECTRL_BASE 0x600a0800 #define REG_FECTRL_BASE 0x600a0800
#define REG_FEDATAWIFI_BASE 0x600a0c00 #define REG_FEDATAWIFI_BASE 0x600a0c00
const static sleep_retention_entries_config_t phy_fe_regs_retention[] = { const static sleep_retention_entries_config_t phy_fe_regs_retention[] = {
[0] = { .config = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_MODEM_FE_LINK(0), REG_FECOEX_BASE, REG_FECOEX_BASE, N_REGS_FE_COEX(), 0, 0), .owner = BIT(0) | BIT(1) }, /* FE COEX */ [0] = { .config = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_MODEM_FE_LINK(0), REG_FECOEX_BASE, REG_FECOEX_BASE, N_REGS_FE_COEX(), 0, 0), .owner = BIT(0) | BIT(1) }, /* FE COEX */
[1] = { .config = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_MODEM_FE_LINK(1), REG_FEDATA_BASE, REG_FEDATA_BASE, N_REGS_FE_DATA(), 0, 0), .owner = BIT(0) | BIT(1) }, /* FE DATA */ [1] = { .config = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_MODEM_FE_LINK(1), REG_FEDATA_BASE, REG_FEDATA_BASE, N_REGS_FE_DATA(), 0, 0), .owner = BIT(0) | BIT(1) }, /* FE DATA */
@@ -377,25 +381,40 @@ static esp_err_t sleep_retention_phy_fe_init(void *arg)
return ESP_OK; return ESP_OK;
} }
void esp_phy_fe_sleep_data_init(void) esp_err_t esp_phy_fe_sleep_data_init(void)
{ {
sleep_retention_module_init_param_t init_param = { _lock_acquire(&s_phy_fe_retention_lock);
.cbs = { .create = { .handle = sleep_retention_phy_fe_init, .arg = NULL } }, if (s_phy_fe_retention_ref++ == 0) {
.attribute = SLEEP_RETENTION_MODULE_ATTR_PASSIVE | SLEEP_RETENTION_MODULE_ATTR_ATTACH sleep_retention_module_init_param_t init_param = {
}; .cbs = { .create = { .handle = sleep_retention_phy_fe_init, .arg = NULL } },
esp_err_t err = sleep_retention_module_init(SLEEP_RETENTION_MODULE_PHY_FE, &init_param); .attribute = SLEEP_RETENTION_MODULE_ATTR_PASSIVE | SLEEP_RETENTION_MODULE_ATTR_ATTACH
if (err != ESP_OK) { };
ESP_LOGW(TAG, "PHY FE sleep retention init failed"); esp_err_t err = sleep_retention_module_init(SLEEP_RETENTION_MODULE_PHY_FE, &init_param);
return; if (err != ESP_OK) {
ESP_LOGW(TAG, "PHY FE sleep retention init failed");
s_phy_fe_retention_ref --;
_lock_release(&s_phy_fe_retention_lock);
return err;
}
} }
_lock_release(&s_phy_fe_retention_lock);
return ESP_OK;
} }
void esp_phy_fe_sleep_data_deinit(void) void esp_phy_fe_sleep_data_deinit(void)
{ {
esp_err_t err = sleep_retention_module_deinit(SLEEP_RETENTION_MODULE_PHY_FE); _lock_acquire(&s_phy_fe_retention_lock);
if (err != ESP_OK) { if (s_phy_fe_retention_ref == 0) {
ESP_LOGW(TAG, "PHY FE sleep retention deinit failed"); _lock_release(&s_phy_fe_retention_lock);
return; return;
} }
if (--s_phy_fe_retention_ref == 0) {
esp_err_t err = sleep_retention_module_deinit(SLEEP_RETENTION_MODULE_PHY_FE);
if (err != ESP_OK) {
ESP_LOGW(TAG, "PHY FE sleep retention deinit failed");
}
}
_lock_release(&s_phy_fe_retention_lock);
} }
#endif // SOC_PM_MODEM_RETENTION_BY_REGDMA && CONFIG_MAC_BB_PD #endif // SOC_PM_MODEM_RETENTION_BY_REGDMA && (CONFIG_MAC_BB_PD || CONFIG_ESP_PHY_HW_SWITCH_RF)

View File

@@ -148,12 +148,15 @@ const esp_phy_init_data_t phy_init_data= { {
const char __attribute__((section(".rodata"))) phy_init_magic_post[] = PHY_INIT_MAGIC; const char __attribute__((section(".rodata"))) phy_init_magic_post[] = PHY_INIT_MAGIC;
#if SOC_PM_MODEM_RETENTION_BY_REGDMA && CONFIG_MAC_BB_PD #if SOC_PM_MODEM_RETENTION_BY_REGDMA && (CONFIG_MAC_BB_PD || CONFIG_ESP_PHY_HW_SWITCH_RF)
#include "esp_private/sleep_retention.h" #include "esp_private/sleep_retention.h"
static const char* TAG = "phy_sleep"; static const char* TAG = "phy_sleep";
static _lock_t s_phy_fe_retention_lock;
uint8_t s_phy_fe_retention_ref = 0;
#endif // SOC_PM_MODEM_RETENTION_BY_REGDMA && (CONFIG_MAC_BB_PD || CONFIG_ESP_PHY_HW_SWITCH_RF)
#if SOC_PM_MODEM_RETENTION_BY_REGDMA && CONFIG_MAC_BB_PD
static esp_err_t sleep_retention_wifi_bb_init(void *arg) static esp_err_t sleep_retention_wifi_bb_init(void *arg)
{ {
#define N_REGS_WIFI_AGC() (121) #define N_REGS_WIFI_AGC() (121)
@@ -223,7 +226,9 @@ void esp_phy_sleep_data_deinit(void)
ESP_LOGW(TAG, "WiFi BB sleep retention deinit failed"); ESP_LOGW(TAG, "WiFi BB sleep retention deinit failed");
} }
} }
#endif // SOC_PM_MODEM_RETENTION_BY_REGDMA && CONFIG_MAC_BB_PD
#if SOC_PM_MODEM_RETENTION_BY_REGDMA && (CONFIG_MAC_BB_PD || CONFIG_ESP_PHY_HW_SWITCH_RF)
static esp_err_t sleep_retention_phy_fe_init(void *arg) static esp_err_t sleep_retention_phy_fe_init(void *arg)
{ {
#define N_REGS_FE_COEX() (58) #define N_REGS_FE_COEX() (58)
@@ -238,25 +243,40 @@ static esp_err_t sleep_retention_phy_fe_init(void *arg)
return ESP_OK; return ESP_OK;
} }
void esp_phy_fe_sleep_data_init(void) esp_err_t esp_phy_fe_sleep_data_init(void)
{ {
sleep_retention_module_init_param_t init_param = { _lock_acquire(&s_phy_fe_retention_lock);
.cbs = { .create = { .handle = sleep_retention_phy_fe_init, .arg = NULL } }, if (s_phy_fe_retention_ref++ == 0) {
.attribute = SLEEP_RETENTION_MODULE_ATTR_PASSIVE | SLEEP_RETENTION_MODULE_ATTR_ATTACH sleep_retention_module_init_param_t init_param = {
}; .cbs = { .create = { .handle = sleep_retention_phy_fe_init, .arg = NULL } },
esp_err_t err = sleep_retention_module_init(SLEEP_RETENTION_MODULE_PHY_FE, &init_param); .attribute = SLEEP_RETENTION_MODULE_ATTR_PASSIVE | SLEEP_RETENTION_MODULE_ATTR_ATTACH
if (err != ESP_OK) { };
ESP_LOGW(TAG, "PHY FE sleep retention init failed"); esp_err_t err = sleep_retention_module_init(SLEEP_RETENTION_MODULE_PHY_FE, &init_param);
return; if (err != ESP_OK) {
ESP_LOGW(TAG, "PHY FE sleep retention init failed");
s_phy_fe_retention_ref --;
_lock_release(&s_phy_fe_retention_lock);
return err;
}
} }
_lock_release(&s_phy_fe_retention_lock);
return ESP_OK;
} }
void esp_phy_fe_sleep_data_deinit(void) void esp_phy_fe_sleep_data_deinit(void)
{ {
esp_err_t err = sleep_retention_module_deinit(SLEEP_RETENTION_MODULE_PHY_FE); _lock_acquire(&s_phy_fe_retention_lock);
if (err != ESP_OK) { if (s_phy_fe_retention_ref == 0) {
ESP_LOGW(TAG, "PHY FE sleep retention deinit failed"); _lock_release(&s_phy_fe_retention_lock);
return; return;
} }
if (--s_phy_fe_retention_ref == 0) {
esp_err_t err = sleep_retention_module_deinit(SLEEP_RETENTION_MODULE_PHY_FE);
if (err != ESP_OK) {
ESP_LOGW(TAG, "PHY FE sleep retention deinit failed");
}
}
_lock_release(&s_phy_fe_retention_lock);
} }
#endif // SOC_PM_MODEM_RETENTION_BY_REGDMA && CONFIG_MAC_BB_PD #endif // SOC_PM_MODEM_RETENTION_BY_REGDMA && (CONFIG_MAC_BB_PD || CONFIG_ESP_PHY_HW_SWITCH_RF)

View File

@@ -148,13 +148,15 @@ const esp_phy_init_data_t phy_init_data= { {
} }; } };
const char __attribute__((section(".rodata"))) phy_init_magic_post[] = PHY_INIT_MAGIC; const char __attribute__((section(".rodata"))) phy_init_magic_post[] = PHY_INIT_MAGIC;
#if SOC_PM_MODEM_RETENTION_BY_REGDMA && (CONFIG_MAC_BB_PD || CONFIG_ESP_PHY_HW_SWITCH_RF)
#if SOC_PM_MODEM_RETENTION_BY_REGDMA && CONFIG_MAC_BB_PD
#include "esp_private/sleep_retention.h" #include "esp_private/sleep_retention.h"
static const char* TAG = "phy_sleep"; static const char* TAG = "phy_sleep";
static _lock_t s_phy_fe_retention_lock;
uint8_t s_phy_fe_retention_ref = 0;
#endif // SOC_PM_MODEM_RETENTION_BY_REGDMA && (CONFIG_MAC_BB_PD || CONFIG_ESP_PHY_HW_SWITCH_RF)
#if SOC_PM_MODEM_RETENTION_BY_REGDMA && CONFIG_MAC_BB_PD
static esp_err_t sleep_retention_wifi_bb_init(void *arg) static esp_err_t sleep_retention_wifi_bb_init(void *arg)
{ {
#define N_REGS_WIFI_AGC() (130) #define N_REGS_WIFI_AGC() (130)
@@ -226,12 +228,15 @@ void esp_phy_sleep_data_deinit(void)
} }
} }
#endif // SOC_PM_MODEM_RETENTION_BY_REGDMA && CONFIG_MAC_BB_PD.
#if SOC_PM_MODEM_RETENTION_BY_REGDMA && (CONFIG_MAC_BB_PD || CONFIG_ESP_PHY_HW_SWITCH_RF)
static esp_err_t sleep_retention_phy_fe_init(void *arg) static esp_err_t sleep_retention_phy_fe_init(void *arg)
{ {
#define N_REGS_FE_COEX() (21) #define N_REGS_FE_COEX() (21)
#define N_REGS_FE_DATA() (34) #define N_REGS_FE_DATA() (34)
#define N_REGS_FE_CTRL() (56) #define N_REGS_FE_CTRL() (56)
#define N_REGS_FE_DATA_WIFI() (21) #define N_REGS_FE_DATA_WIFI() (21)
#define REG_FECOEX_BASE 0x600a0000 #define REG_FECOEX_BASE 0x600a0000
#define REG_FEDATA_BASE 0x600a0400 #define REG_FEDATA_BASE 0x600a0400
#define REG_FECTRL_BASE 0x600a0800 #define REG_FECTRL_BASE 0x600a0800
@@ -249,25 +254,40 @@ static esp_err_t sleep_retention_phy_fe_init(void *arg)
return ESP_OK; return ESP_OK;
} }
void esp_phy_fe_sleep_data_init(void) esp_err_t esp_phy_fe_sleep_data_init(void)
{ {
sleep_retention_module_init_param_t init_param = { _lock_acquire(&s_phy_fe_retention_lock);
.cbs = { .create = { .handle = sleep_retention_phy_fe_init, .arg = NULL } }, if (s_phy_fe_retention_ref++ == 0) {
.attribute = SLEEP_RETENTION_MODULE_ATTR_PASSIVE | SLEEP_RETENTION_MODULE_ATTR_ATTACH sleep_retention_module_init_param_t init_param = {
}; .cbs = { .create = { .handle = sleep_retention_phy_fe_init, .arg = NULL } },
esp_err_t err = sleep_retention_module_init(SLEEP_RETENTION_MODULE_PHY_FE, &init_param); .attribute = SLEEP_RETENTION_MODULE_ATTR_PASSIVE | SLEEP_RETENTION_MODULE_ATTR_ATTACH
if (err != ESP_OK) { };
ESP_LOGW(TAG, "PHY FE sleep retention init failed"); esp_err_t err = sleep_retention_module_init(SLEEP_RETENTION_MODULE_PHY_FE, &init_param);
return; if (err != ESP_OK) {
ESP_LOGW(TAG, "PHY FE sleep retention init failed");
s_phy_fe_retention_ref --;
_lock_release(&s_phy_fe_retention_lock);
return err;
}
} }
_lock_release(&s_phy_fe_retention_lock);
return ESP_OK;
} }
void esp_phy_fe_sleep_data_deinit(void) void esp_phy_fe_sleep_data_deinit(void)
{ {
esp_err_t err = sleep_retention_module_deinit(SLEEP_RETENTION_MODULE_PHY_FE); _lock_acquire(&s_phy_fe_retention_lock);
if (err != ESP_OK) { if (s_phy_fe_retention_ref == 0) {
ESP_LOGW(TAG, "PHY FE sleep retention deinit failed"); _lock_release(&s_phy_fe_retention_lock);
return; return;
} }
if (--s_phy_fe_retention_ref == 0) {
esp_err_t err = sleep_retention_module_deinit(SLEEP_RETENTION_MODULE_PHY_FE);
if (err != ESP_OK) {
ESP_LOGW(TAG, "PHY FE sleep retention deinit failed");
}
}
_lock_release(&s_phy_fe_retention_lock);
} }
#endif // SOC_PM_MODEM_RETENTION_BY_REGDMA && CONFIG_MAC_BB_PD #endif // SOC_PM_MODEM_RETENTION_BY_REGDMA && (CONFIG_MAC_BB_PD || CONFIG_ESP_PHY_HW_SWITCH_RF)

View File

@@ -154,6 +154,8 @@ const char __attribute__((section(".rodata"))) phy_init_magic_post[] = PHY_INIT_
#include "esp_private/sleep_retention.h" #include "esp_private/sleep_retention.h"
static const char* TAG = "phy_sleep"; static const char* TAG = "phy_sleep";
static _lock_t s_phy_fe_retention_lock;
uint8_t s_phy_fe_retention_ref = 0;
#endif // SOC_PM_MODEM_RETENTION_BY_REGDMA && (CONFIG_MAC_BB_PD || CONFIG_ESP_PHY_HW_SWITCH_RF) #endif // SOC_PM_MODEM_RETENTION_BY_REGDMA && (CONFIG_MAC_BB_PD || CONFIG_ESP_PHY_HW_SWITCH_RF)
@@ -240,13 +242,15 @@ void esp_phy_sleep_data_deinit(void)
ESP_LOGW(TAG, "WiFi BB sleep retention deinit failed"); ESP_LOGW(TAG, "WiFi BB sleep retention deinit failed");
} }
} }
#endif // SOC_PM_MODEM_RETENTION_BY_REGDMA && CONFIG_MAC_BB_PD
#if SOC_PM_MODEM_RETENTION_BY_REGDMA && (CONFIG_MAC_BB_PD || CONFIG_ESP_PHY_HW_SWITCH_RF)
static esp_err_t sleep_retention_phy_fe_init(void *arg) static esp_err_t sleep_retention_phy_fe_init(void *arg)
{ {
#define N_REGS_FE_COEX() (22) #define N_REGS_FE_COEX() (22)
#define N_REGS_FE_DATA() (35) #define N_REGS_FE_DATA() (35)
#define N_REGS_FE_CTRL() (57) #define N_REGS_FE_CTRL() (57)
#define N_REGS_FE_DATA_WIFI() (22) #define N_REGS_FE_DATA_WIFI() (22)
#define REG_FECOEX_BASE 0x20100000 #define REG_FECOEX_BASE 0x20100000
#define REG_FEDATA_BASE 0x20100400 #define REG_FEDATA_BASE 0x20100400
#define REG_FECTRL_BASE 0x20100800 #define REG_FECTRL_BASE 0x20100800
@@ -264,25 +268,40 @@ static esp_err_t sleep_retention_phy_fe_init(void *arg)
return ESP_OK; return ESP_OK;
} }
void esp_phy_fe_sleep_data_init(void) esp_err_t esp_phy_fe_sleep_data_init(void)
{ {
sleep_retention_module_init_param_t init_param = { _lock_acquire(&s_phy_fe_retention_lock);
.cbs = { .create = { .handle = sleep_retention_phy_fe_init, .arg = NULL } }, if (s_phy_fe_retention_ref++ == 0) {
.attribute = SLEEP_RETENTION_MODULE_ATTR_PASSIVE | SLEEP_RETENTION_MODULE_ATTR_ATTACH sleep_retention_module_init_param_t init_param = {
}; .cbs = { .create = { .handle = sleep_retention_phy_fe_init, .arg = NULL } },
esp_err_t err = sleep_retention_module_init(SLEEP_RETENTION_MODULE_PHY_FE, &init_param); .attribute = SLEEP_RETENTION_MODULE_ATTR_PASSIVE | SLEEP_RETENTION_MODULE_ATTR_ATTACH
if (err != ESP_OK) { };
ESP_LOGW(TAG, "PHY FE sleep retention init failed"); esp_err_t err = sleep_retention_module_init(SLEEP_RETENTION_MODULE_PHY_FE, &init_param);
return; if (err != ESP_OK) {
ESP_LOGW(TAG, "PHY FE sleep retention init failed");
s_phy_fe_retention_ref --;
_lock_release(&s_phy_fe_retention_lock);
return err;
}
} }
_lock_release(&s_phy_fe_retention_lock);
return ESP_OK;
} }
void esp_phy_fe_sleep_data_deinit(void) void esp_phy_fe_sleep_data_deinit(void)
{ {
esp_err_t err = sleep_retention_module_deinit(SLEEP_RETENTION_MODULE_PHY_FE); _lock_acquire(&s_phy_fe_retention_lock);
if (err != ESP_OK) { if (s_phy_fe_retention_ref == 0) {
ESP_LOGW(TAG, "PHY FE sleep retention deinit failed"); _lock_release(&s_phy_fe_retention_lock);
return; return;
} }
if (--s_phy_fe_retention_ref == 0) {
esp_err_t err = sleep_retention_module_deinit(SLEEP_RETENTION_MODULE_PHY_FE);
if (err != ESP_OK) {
ESP_LOGW(TAG, "PHY FE sleep retention deinit failed");
}
}
_lock_release(&s_phy_fe_retention_lock);
} }
#endif // SOC_PM_MODEM_RETENTION_BY_REGDMA && CONFIG_MAC_BB_PD #endif // SOC_PM_MODEM_RETENTION_BY_REGDMA && (CONFIG_MAC_BB_PD || CONFIG_ESP_PHY_HW_SWITCH_RF)

View File

@@ -300,20 +300,19 @@ void phy_wait_freq_hw_hop_done(void);
*/ */
void phy_track_temp_debug(uint8_t debug_flag, uint8_t track_temp); void phy_track_temp_debug(uint8_t debug_flag, uint8_t track_temp);
#endif #endif
#if SOC_PM_MODEM_RETENTION_BY_REGDMA && CONFIG_MAC_BB_PD #if SOC_PM_MODEM_RETENTION_BY_REGDMA && (CONFIG_MAC_BB_PD || CONFIG_ESP_PHY_HW_SWITCH_RF)
/** /**
* @brief PHY module common memory (FE) initialize * @brief PHY module common memory (FE) initialize
* *
*/ */
void esp_phy_fe_sleep_data_init(void); esp_err_t esp_phy_fe_sleep_data_init(void);
/** /**
* @brief PHY module common memory (FE) de-initialize * @brief PHY module common memory (FE) de-initialize
* *
*/ */
void esp_phy_fe_sleep_data_deinit(void); void esp_phy_fe_sleep_data_deinit(void);
#endif // SOC_PM_MODEM_RETENTION_BY_REGDMA && CONFIG_MAC_BB_PD #endif // SOC_PM_MODEM_RETENTION_BY_REGDMA && (CONFIG_MAC_BB_PD || CONFIG_ESP_PHY_HW_SWITCH_RF)
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View File

@@ -71,6 +71,9 @@ static esp_err_t btbb_sleep_retention_enable(void)
.attribute = SLEEP_RETENTION_MODULE_ATTR_ATTACH, .attribute = SLEEP_RETENTION_MODULE_ATTR_ATTACH,
}; };
init_param.depends.bitmap[SLEEP_RETENTION_MODULE_CLOCK_MODEM >> 5] |= BIT(SLEEP_RETENTION_MODULE_CLOCK_MODEM % 32); init_param.depends.bitmap[SLEEP_RETENTION_MODULE_CLOCK_MODEM >> 5] |= BIT(SLEEP_RETENTION_MODULE_CLOCK_MODEM % 32);
#if CONFIG_ESP_PHY_HW_SWITCH_RF
init_param.depends.bitmap[SLEEP_RETENTION_MODULE_PHY_FE >> 5] |= BIT(SLEEP_RETENTION_MODULE_PHY_FE % 32);
#endif // CONFIG_ESP_PHY_HW_SWITCH_RF
#if SOC_PM_MODEM_LOCK_CLK_WORKAROUND && CONFIG_BT_CTRL_SLEEP_ENABLE #if SOC_PM_MODEM_LOCK_CLK_WORKAROUND && CONFIG_BT_CTRL_SLEEP_ENABLE
init_param.depends.bitmap[SLEEP_RETENTION_MODULE_POWER >> 5] |= BIT(SLEEP_RETENTION_MODULE_POWER % 32); init_param.depends.bitmap[SLEEP_RETENTION_MODULE_POWER >> 5] |= BIT(SLEEP_RETENTION_MODULE_POWER % 32);
#endif #endif
@@ -98,9 +101,20 @@ void esp_btbb_enable(void)
if (s_btbb_access_ref == 0) { if (s_btbb_access_ref == 0) {
bt_bb_v2_init_cmplx(BTBB_ENABLE_VERSION_PRINT); bt_bb_v2_init_cmplx(BTBB_ENABLE_VERSION_PRINT);
#if SOC_PM_MODEM_RETENTION_BY_REGDMA && CONFIG_FREERTOS_USE_TICKLESS_IDLE #if SOC_PM_MODEM_RETENTION_BY_REGDMA && CONFIG_FREERTOS_USE_TICKLESS_IDLE
esp_err_t err = btbb_sleep_retention_enable(); esp_err_t err = ESP_OK;
#if CONFIG_ESP_PHY_HW_SWITCH_RF
err = esp_phy_fe_sleep_data_init();
if (err != ESP_OK) {
_lock_release(&s_btbb_access_lock);
return;
}
#endif // CONFIG_ESP_PHY_HW_SWITCH_RF
err = btbb_sleep_retention_enable();
if (err != ESP_OK) { if (err != ESP_OK) {
btbb_sleep_retention_disable(); btbb_sleep_retention_disable();
#if CONFIG_ESP_PHY_HW_SWITCH_RF
esp_phy_fe_sleep_data_deinit();
#endif // CONFIG_ESP_PHY_HW_SWITCH_RF
_lock_release(&s_btbb_access_lock); _lock_release(&s_btbb_access_lock);
return; return;
} }
@@ -116,6 +130,9 @@ void esp_btbb_disable(void)
if (s_btbb_access_ref && (--s_btbb_access_ref == 0)) { if (s_btbb_access_ref && (--s_btbb_access_ref == 0)) {
#if SOC_PM_MODEM_RETENTION_BY_REGDMA && CONFIG_FREERTOS_USE_TICKLESS_IDLE #if SOC_PM_MODEM_RETENTION_BY_REGDMA && CONFIG_FREERTOS_USE_TICKLESS_IDLE
btbb_sleep_retention_disable(); btbb_sleep_retention_disable();
#if CONFIG_ESP_PHY_HW_SWITCH_RF
esp_phy_fe_sleep_data_deinit();
#endif // CONFIG_ESP_PHY_HW_SWITCH_RF
#endif // SOC_PM_MODEM_RETENTION_BY_REGDMA && CONFIG_FREERTOS_USE_TICKLESS_IDLE #endif // SOC_PM_MODEM_RETENTION_BY_REGDMA && CONFIG_FREERTOS_USE_TICKLESS_IDLE
} }
_lock_release(&s_btbb_access_lock); _lock_release(&s_btbb_access_lock);