feat(phy): rename sleep modem state to sleep phy

This commit is contained in:
cjin
2026-09-14 19:18:39 +08:00
parent 70b2846100
commit 5f74a4da51
13 changed files with 44 additions and 43 deletions
@@ -26,11 +26,13 @@ extern "C" {
void pau_regdma_set_entry_link_addr(pau_regdma_link_addr_t *link_entries); void pau_regdma_set_entry_link_addr(pau_regdma_link_addr_t *link_entries);
#if SOC_PM_SUPPORT_PMU_MODEM_STATE #if SOC_PM_SUPPORT_PMU_MODEM_STATE
#if SOC_PM_PAU_REGDMA_LINK_MODEM
/** /**
* @brief Set the address of WiFi MAC REGDMA Link in modem state * @brief Set the address of WiFi MAC REGDMA Link in modem state
* @param link_addr linked lists address * @param link_addr linked lists address
*/ */
void pau_regdma_set_modem_link_addr(void *link_addr); void pau_regdma_set_modem_link_addr(void *link_addr);
#endif // SOC_PM_PAU_REGDMA_LINK_MODEM
/** /**
* @brief Software trigger regdma to perform modem link backup * @brief Software trigger regdma to perform modem link backup
@@ -227,7 +227,7 @@ void sleep_modem_wifi_modem_state_deinit(void);
bool sleep_modem_wifi_modem_state_skip_light_sleep(void); bool sleep_modem_wifi_modem_state_skip_light_sleep(void);
/** /**
* @brief Function to initialize and create the modem state phy link * @brief Function to initialize and create the phy link
* @param link_head the pointer that point to the head of the created phy link * @param link_head the pointer that point to the head of the created phy link
* @return * @return
* - ESP_OK on success * - ESP_OK on success
@@ -235,24 +235,24 @@ bool sleep_modem_wifi_modem_state_skip_light_sleep(void);
* - ESP_ERR_INVALID_ARG if value is out of range * - ESP_ERR_INVALID_ARG if value is out of range
* - ESP_ERR_INVALID_STATE if the phy module retention state is invalid * - ESP_ERR_INVALID_STATE if the phy module retention state is invalid
*/ */
esp_err_t sleep_modem_state_phy_link_init(void **link_head); esp_err_t sleep_phy_link_init(void **link_head);
/** /**
* @brief Function to destroy and de-initialize modem state phy link * @brief Function to destroy and de-initialize phy link
* @param link_head the phy link head will be destroyed * @param link_head the phy link head will be destroyed
* @return * @return
* - ESP_OK on success * - ESP_OK on success
* - ESP_ERR_INVALID_ARG if value is out of range * - ESP_ERR_INVALID_ARG if value is out of range
* - ESP_ERR_INVALID_STATE if the phy module retention state is invalid * - ESP_ERR_INVALID_STATE if the phy module retention state is invalid
*/ */
esp_err_t sleep_modem_state_phy_link_deinit(void *link_head); esp_err_t sleep_phy_link_deinit(void *link_head);
/** /**
* @brief Function to configure PHY link regdma description at runtime * @brief Function to configure PHY link regdma description at runtime
* @param link_context PHY link regdma description conteoxt pointer * @param link_context PHY link regdma description conteoxt pointer
* @param flags A bitmap to indicate the PHY link regdma description configuration flag * @param flags A bitmap to indicate the PHY link regdma description configuration flag
*/ */
void sleep_modem_state_phy_link_config(void *link_context, uint32_t flags); void sleep_phy_link_config(void *link_context, uint32_t flags);
#endif #endif
#ifdef __cplusplus #ifdef __cplusplus
@@ -38,7 +38,7 @@ if((CONFIG_SOC_PM_SUPPORT_MODEM_PD OR CONFIG_SOC_PM_SUPPORT_TOP_PD) AND CONFIG_S
endif() endif()
if(CONFIG_SOC_PM_SUPPORT_PMU_MODEM_STATE) if(CONFIG_SOC_PM_SUPPORT_PMU_MODEM_STATE)
list(APPEND srcs "port/${target}/sleep_modem_state.c") list(APPEND srcs "port/${target}/sleep_phy.c")
endif() endif()
add_prefix(srcs "${CMAKE_CURRENT_LIST_DIR}/" "${srcs}") add_prefix(srcs "${CMAKE_CURRENT_LIST_DIR}/" "${srcs}")
@@ -45,7 +45,7 @@ typedef struct {
void *regdma_desc[DESC_IDX_I2C_MST_DIS + 1]; void *regdma_desc[DESC_IDX_I2C_MST_DIS + 1];
} sleep_modem_state_phy_link_context_t; } sleep_modem_state_phy_link_context_t;
static esp_err_t sleep_modem_state_phy_wifi_init(void *arg) static esp_err_t sleep_phy_retention_init(void *arg)
{ {
#define WIFIMAC_ENTRY() (BIT(SOC_PM_PAU_REGDMA_LINK_IDX_WIFIMAC)) #define WIFIMAC_ENTRY() (BIT(SOC_PM_PAU_REGDMA_LINK_IDX_WIFIMAC))
@@ -96,12 +96,12 @@ static esp_err_t sleep_modem_state_phy_wifi_init(void *arg)
} }
#endif #endif
esp_err_t sleep_modem_state_phy_link_init(void **link_head) esp_err_t sleep_phy_link_init(void **link_context)
{ {
esp_err_t err = ESP_OK; esp_err_t err = ESP_OK;
#if SOC_PM_PAU_REGDMA_LINK_IDX_WIFIMAC #if SOC_PM_PAU_REGDMA_LINK_IDX_WIFIMAC
sleep_retention_module_init_param_t init_param = { .cbs = { .create = { .handle = sleep_modem_state_phy_wifi_init, .arg = NULL } } }; sleep_retention_module_init_param_t init_param = { .cbs = { .create = { .handle = sleep_phy_retention_init, .arg = NULL } } };
err = sleep_retention_module_init(SLEEP_RETENTION_MODULE_MODEM_PHY, &init_param); err = sleep_retention_module_init(SLEEP_RETENTION_MODULE_MODEM_PHY, &init_param);
if (err == ESP_OK) { if (err == ESP_OK) {
err = sleep_retention_module_allocate(SLEEP_RETENTION_MODULE_MODEM_PHY); err = sleep_retention_module_allocate(SLEEP_RETENTION_MODULE_MODEM_PHY);
@@ -118,7 +118,7 @@ esp_err_t sleep_modem_state_phy_link_init(void **link_head)
} }
} }
if (err == ESP_OK) { if (err == ESP_OK) {
*link_head = (void *)&phy_link_context; *link_context = (void *)&phy_link_context;
} }
} }
} }
@@ -126,7 +126,7 @@ esp_err_t sleep_modem_state_phy_link_init(void **link_head)
return err; return err;
} }
void IRAM_ATTR sleep_modem_state_phy_link_config(void *link_context, uint32_t flags) void IRAM_ATTR sleep_phy_link_config(void *link_context, uint32_t flags)
{ {
#if SOC_PM_PAU_REGDMA_LINK_IDX_WIFIMAC #if SOC_PM_PAU_REGDMA_LINK_IDX_WIFIMAC
sleep_modem_state_phy_link_context_t *phy_link_context = (sleep_modem_state_phy_link_context_t *)link_context; sleep_modem_state_phy_link_context_t *phy_link_context = (sleep_modem_state_phy_link_context_t *)link_context;
@@ -141,7 +141,7 @@ void IRAM_ATTR sleep_modem_state_phy_link_config(void *link_context, uint32_t fl
#endif #endif
} }
esp_err_t sleep_modem_state_phy_link_deinit(void *link_head) esp_err_t sleep_phy_link_deinit(void *link_head)
{ {
esp_err_t err = ESP_OK; esp_err_t err = ESP_OK;
#if SOC_PM_PAU_REGDMA_LINK_IDX_WIFIMAC #if SOC_PM_PAU_REGDMA_LINK_IDX_WIFIMAC
@@ -40,14 +40,14 @@ typedef struct {
#define DESC_IDX_I2C_MST_SEL (1) #define DESC_IDX_I2C_MST_SEL (1)
#define DESC_IDX_I2C_MST_DIS (2) #define DESC_IDX_I2C_MST_DIS (2)
void *regdma_desc[DESC_IDX_I2C_MST_DIS + 1]; void *regdma_desc[DESC_IDX_I2C_MST_DIS + 1];
} sleep_modem_state_phy_link_context_t; } sleep_phy_link_context_t;
esp_err_t sleep_modem_state_phy_link_init(void **link_head) esp_err_t sleep_phy_link_init(void **link_head)
{ {
esp_err_t err = ESP_OK; esp_err_t err = ESP_OK;
#if SOC_PM_PAU_REGDMA_LINK_WIFIMAC #if SOC_PM_PAU_REGDMA_LINK_MODEM
static regdma_link_config_t wifi_modem_config[] = { static regdma_link_config_t phy_modem_config[] = {
[0] = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_MODEM_FE_LINK(0), MODEM_FE_DATA_BASE, MODEM_FE_DATA_BASE, 41, 0, 0), [0] = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_MODEM_FE_LINK(0), MODEM_FE_DATA_BASE, MODEM_FE_DATA_BASE, 41, 0, 0),
[1] = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_MODEM_FE_LINK(1), MODEM_FE_CTRL_BASE, MODEM_FE_CTRL_BASE, 87, 0, 0), [1] = REGDMA_LINK_CONTINUOUS_INIT(REGDMA_MODEM_FE_LINK(1), MODEM_FE_CTRL_BASE, MODEM_FE_CTRL_BASE, 87, 0, 0),
@@ -100,12 +100,12 @@ esp_err_t sleep_modem_state_phy_link_init(void **link_head)
[38] = REGDMA_LINK_WRITE_INIT(REGDMA_PHY_LINK(0x24), PMU_SLP_WAKEUP_CNTL7_REG, 0x9730000, 0xffff0000, 0, 1) [38] = REGDMA_LINK_WRITE_INIT(REGDMA_PHY_LINK(0x24), PMU_SLP_WAKEUP_CNTL7_REG, 0x9730000, 0xffff0000, 0, 1)
}; };
extern uint32_t phy_ana_i2c_master_burst_rf_onoff(bool on); extern uint32_t phy_ana_i2c_master_burst_rf_onoff(bool on);
wifi_modem_config[7].write_wait.value = phy_ana_i2c_master_burst_rf_onoff(true); phy_modem_config[7].write_wait.value = phy_ana_i2c_master_burst_rf_onoff(true);
wifi_modem_config[22].write_wait.value = phy_ana_i2c_master_burst_rf_onoff(false); phy_modem_config[22].write_wait.value = phy_ana_i2c_master_burst_rf_onoff(false);
void *link = NULL; void *link = NULL;
for (int i = ARRAY_SIZE(wifi_modem_config) - 1; (err == ESP_OK) && (i >= 0); i--) { for (int i = ARRAY_SIZE(phy_modem_config) - 1; (err == ESP_OK) && (i >= 0); i--) {
void *next = regdma_link_init_safe(&wifi_modem_config[i], false, 0, link); void *next = regdma_link_init_safe(&phy_modem_config[i], false, 0, link);
if (next) { if (next) {
link = next; link = next;
} else { } else {
@@ -117,7 +117,7 @@ esp_err_t sleep_modem_state_phy_link_init(void **link_head)
pau_regdma_set_modem_link_addr(link); pau_regdma_set_modem_link_addr(link);
const int id_array[] = { REGDMA_PHY_LINK(0x00), REGDMA_PHY_LINK(0x01), REGDMA_PHY_LINK(0x1b) }; const int id_array[] = { REGDMA_PHY_LINK(0x00), REGDMA_PHY_LINK(0x01), REGDMA_PHY_LINK(0x1b) };
static DRAM_ATTR sleep_modem_state_phy_link_context_t phy_link_context; static DRAM_ATTR sleep_phy_link_context_t phy_link_context;
for (int i = 0; (err == ESP_OK) && (i < ARRAY_SIZE(phy_link_context.regdma_desc)); i++) { for (int i = 0; (err == ESP_OK) && (i < ARRAY_SIZE(phy_link_context.regdma_desc)); i++) {
void *desc = regdma_find_link_by_id(link, 0, id_array[i]); void *desc = regdma_find_link_by_id(link, 0, id_array[i]);
@@ -136,9 +136,9 @@ esp_err_t sleep_modem_state_phy_link_init(void **link_head)
return err; return err;
} }
void IRAM_ATTR sleep_modem_state_phy_link_config(void *link_context, uint32_t flags) void IRAM_ATTR sleep_phy_link_config(void *link_context, uint32_t flags)
{ {
sleep_modem_state_phy_link_context_t *phy_link_context = (sleep_modem_state_phy_link_context_t *)link_context; sleep_phy_link_context_t *phy_link_context = (sleep_phy_link_context_t *)link_context;
if (flags & BIT(0)) { if (flags & BIT(0)) {
regdma_link_set_skip_flag(phy_link_context->regdma_desc[DESC_IDX_I2C_MST_ENA], true, true); regdma_link_set_skip_flag(phy_link_context->regdma_desc[DESC_IDX_I2C_MST_ENA], true, true);
@@ -151,9 +151,9 @@ void IRAM_ATTR sleep_modem_state_phy_link_config(void *link_context, uint32_t fl
} }
} }
esp_err_t sleep_modem_state_phy_link_deinit(void *link_head) esp_err_t sleep_phy_link_deinit(void *link_head)
{ {
#if SOC_PM_PAU_REGDMA_LINK_WIFIMAC #if SOC_PM_PAU_REGDMA_LINK_MODEM
regdma_link_destroy(((sleep_modem_state_phy_link_context_t *)link_head)->link_head, 0); regdma_link_destroy(((sleep_modem_state_phy_link_context_t *)link_head)->link_head, 0);
#endif #endif
return ESP_OK; return ESP_OK;
@@ -39,7 +39,7 @@ typedef struct {
void *regdma_desc[DESC_IDX_I2C_MST_DIS + 1]; void *regdma_desc[DESC_IDX_I2C_MST_DIS + 1];
} sleep_modem_state_phy_link_context_t; } sleep_modem_state_phy_link_context_t;
esp_err_t sleep_modem_state_phy_link_init(void **link_head) esp_err_t sleep_phy_link_init(void **link_context)
{ {
esp_err_t err = ESP_OK; esp_err_t err = ESP_OK;
@@ -124,14 +124,14 @@ esp_err_t sleep_modem_state_phy_link_init(void **link_head)
} }
if (err == ESP_OK) { if (err == ESP_OK) {
phy_link_context.link_head = link; phy_link_context.link_head = link;
*link_head = (void *)&phy_link_context; *link_context = (void *)&phy_link_context;
} }
} }
#endif #endif
return err; return err;
} }
void IRAM_ATTR sleep_modem_state_phy_link_config(void *link_context, uint32_t flags) void IRAM_ATTR sleep_phy_link_config(void *link_context, uint32_t flags)
{ {
sleep_modem_state_phy_link_context_t *phy_link_context = (sleep_modem_state_phy_link_context_t *)link_context; sleep_modem_state_phy_link_context_t *phy_link_context = (sleep_modem_state_phy_link_context_t *)link_context;
@@ -144,10 +144,10 @@ void IRAM_ATTR sleep_modem_state_phy_link_config(void *link_context, uint32_t fl
} }
} }
esp_err_t sleep_modem_state_phy_link_deinit(void *link_head) esp_err_t sleep_phy_link_deinit(void *link_context)
{ {
#if SOC_PM_PAU_REGDMA_LINK_WIFIMAC #if SOC_PM_PAU_REGDMA_LINK_WIFIMAC
regdma_link_destroy(((sleep_modem_state_phy_link_context_t *)link_head)->link_head, 0); regdma_link_destroy(((sleep_modem_state_phy_link_context_t *)link_context)->link_head, 0);
#endif #endif
return ESP_OK; return ESP_OK;
} }
+1 -1
View File
@@ -69,7 +69,7 @@ void pau_regdma_set_entry_link_addr(pau_regdma_link_addr_t *link_entries)
} }
#if SOC_PM_SUPPORT_PMU_MODEM_STATE #if SOC_PM_SUPPORT_PMU_MODEM_STATE
#if SOC_PM_PAU_REGDMA_LINK_WIFIMAC #if SOC_PM_PAU_REGDMA_LINK_MODEM
void pau_regdma_set_modem_link_addr(void *link_addr) void pau_regdma_set_modem_link_addr(void *link_addr)
{ {
pau_hal_set_regdma_modem_link_addr(PAU_instance()->hal, link_addr); pau_hal_set_regdma_modem_link_addr(PAU_instance()->hal, link_addr);
+6 -7
View File
@@ -153,7 +153,7 @@ esp_err_t sleep_modem_wifi_modem_state_init(void)
void *link = NULL; void *link = NULL;
if (s_sleep_modem.wifi.phy_link == NULL) { if (s_sleep_modem.wifi.phy_link == NULL) {
err = sleep_modem_state_phy_link_init(&link); err = sleep_phy_link_init(&link);
if (err == ESP_OK) { if (err == ESP_OK) {
s_sleep_modem.wifi.phy_link = link; s_sleep_modem.wifi.phy_link = link;
s_sleep_modem.wifi.flags = 0; s_sleep_modem.wifi.flags = 0;
@@ -165,7 +165,7 @@ esp_err_t sleep_modem_wifi_modem_state_init(void)
__attribute__((unused)) void sleep_modem_wifi_modem_state_deinit(void) __attribute__((unused)) void sleep_modem_wifi_modem_state_deinit(void)
{ {
if (s_sleep_modem.wifi.phy_link) { if (s_sleep_modem.wifi.phy_link) {
sleep_modem_state_phy_link_deinit(s_sleep_modem.wifi.phy_link); sleep_phy_link_deinit(s_sleep_modem.wifi.phy_link);
s_sleep_modem.wifi.phy_link = NULL; s_sleep_modem.wifi.phy_link = NULL;
s_sleep_modem.wifi.flags = 0; s_sleep_modem.wifi.flags = 0;
} }
@@ -173,11 +173,10 @@ __attribute__((unused)) void sleep_modem_wifi_modem_state_deinit(void)
void IRAM_ATTR sleep_modem_wifi_do_phy_retention(bool restore) void IRAM_ATTR sleep_modem_wifi_do_phy_retention(bool restore)
{ {
sleep_modem_state_phy_link_config(s_sleep_modem.wifi.phy_link, 1); sleep_phy_link_config(s_sleep_modem.wifi.phy_link, 1);
if (restore) { sleep_retention_do_phy_retention(!restore, wifimac_link_is_sel);
pau_regdma_trigger_modem_link_restore(); sleep_phy_link_config(s_sleep_modem.wifi.phy_link, 0);
} else { if (!restore) {
pau_regdma_trigger_modem_link_backup();
s_sleep_modem.wifi.modem_state_phy_done = 1; s_sleep_modem.wifi.modem_state_phy_done = 1;
} }
sleep_modem_state_phy_link_config(s_sleep_modem.wifi.phy_link, 0); sleep_modem_state_phy_link_config(s_sleep_modem.wifi.phy_link, 0);
+1 -1
View File
@@ -38,7 +38,7 @@ typedef struct {
void pau_hal_set_regdma_entry_link_addr(pau_hal_context_t *hal, pau_regdma_link_addr_t *link_addr); void pau_hal_set_regdma_entry_link_addr(pau_hal_context_t *hal, pau_regdma_link_addr_t *link_addr);
#if SOC_PM_SUPPORT_PMU_MODEM_STATE #if SOC_PM_SUPPORT_PMU_MODEM_STATE
#if SOC_PM_PAU_REGDMA_LINK_WIFIMAC #if SOC_PM_PAU_REGDMA_LINK_MODEM
/** /**
* @brief Set regdma modem link address * @brief Set regdma modem link address
* *
@@ -1455,7 +1455,7 @@ config SOC_PM_PAU_REGDMA_LINK_MULTI_ADDR
bool bool
default y default y
config SOC_PM_PAU_REGDMA_LINK_WIFIMAC config SOC_PM_PAU_REGDMA_LINK_MODEM
bool bool
default y default y
@@ -568,7 +568,7 @@
#define SOC_PM_PAU_LINK_NUM (4) #define SOC_PM_PAU_LINK_NUM (4)
#define SOC_PM_PAU_REGDMA_LINK_MULTI_ADDR (1) #define SOC_PM_PAU_REGDMA_LINK_MULTI_ADDR (1)
#define SOC_PM_PAU_REGDMA_LINK_WIFIMAC (1) #define SOC_PM_PAU_REGDMA_LINK_MODEM (1)
#define SOC_PM_PAU_REGDMA_UPDATE_CACHE_BEFORE_WAIT_COMPARE (1) #define SOC_PM_PAU_REGDMA_UPDATE_CACHE_BEFORE_WAIT_COMPARE (1)
#define SOC_PM_PMU_MIN_SLP_SLOW_CLK_CYCLE_FIXED (1) #define SOC_PM_PMU_MIN_SLP_SLOW_CLK_CYCLE_FIXED (1)
@@ -1415,7 +1415,7 @@ config SOC_PM_PAU_REGDMA_LINK_MULTI_ADDR
bool bool
default y default y
config SOC_PM_PAU_REGDMA_LINK_WIFIMAC config SOC_PM_PAU_REGDMA_LINK_MODEM
bool bool
default y default y
@@ -570,7 +570,7 @@
#define SOC_PM_PAU_LINK_NUM (4) #define SOC_PM_PAU_LINK_NUM (4)
#define SOC_PM_PAU_REGDMA_LINK_MULTI_ADDR (1) #define SOC_PM_PAU_REGDMA_LINK_MULTI_ADDR (1)
#define SOC_PM_PAU_REGDMA_LINK_WIFIMAC (1) #define SOC_PM_PAU_REGDMA_LINK_MODEM (1)
#define SOC_PM_PAU_REGDMA_UPDATE_CACHE_BEFORE_WAIT_COMPARE (1) #define SOC_PM_PAU_REGDMA_UPDATE_CACHE_BEFORE_WAIT_COMPARE (1)