feat(sleep): add config SOC_PM_SUPPORT_REGDMA_TRIGGERED_PHY

This commit is contained in:
cjin
2026-09-04 10:27:25 +08:00
parent 77003bcf0c
commit 506e3b30ed
19 changed files with 51 additions and 25 deletions
+1 -1
View File
@@ -36,7 +36,7 @@ typedef struct {
*/
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_REGDMA_TRIGGERED_PHY
#if SOC_PM_PAU_REGDMA_LINK_MODEM
/**
* @brief Set regdma modem link address
@@ -25,7 +25,7 @@ extern "C" {
*/
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_REGDMA_TRIGGERED_PHY
#if SOC_PM_PAU_REGDMA_LINK_MODEM
/**
* @brief Set the address of WiFi MAC REGDMA Link in modem state
@@ -55,7 +55,6 @@ void pau_regdma_trigger_wifimac_link_backup(void);
*/
void pau_regdma_trigger_wifimac_link_restore(void);
#endif
#endif
#if SOC_PM_RETENTION_SW_TRIGGER_REGDMA
/**
@@ -102,6 +101,7 @@ void pau_regdma_trigger_extra_link_restore(void);
*/
bool pau_regdma_enable_aon_link_entry(bool enable);
#endif
#endif
#ifdef __cplusplus
}
@@ -15,11 +15,11 @@
extern "C" {
#endif
#if SOC_PM_SUPPORT_PMU_MODEM_STATE
#if SOC_PM_SUPPORT_REGDMA_TRIGGERED_PHY
#define SLEEP_MODEM_SKIP_I2C_MST_CLK_RETENTION (BIT(0))
#define SLEEP_MODEM_SKIP_WIFI_RETENTION (BIT(1))
#define SLEEP_MODEM_RESET_RETENTION (0)
#endif // SOC_PM_SUPPORT_PMU_MODEM_STATE
#endif // SOC_PM_SUPPORT_REGDMA_TRIGGERED_PHY
typedef enum {
SLEEP_MODEM_WIFI = 1,
SLEEP_MODEM_BT = 2,
@@ -89,7 +89,7 @@ void sleep_modem_mac_bb_power_down_prepare(void);
void sleep_modem_mac_bb_power_up_prepare(void);
#endif // SOC_PM_RETENTION_HAS_CLOCK_BUG && CONFIG_MAC_BB_PD
#if SOC_PM_SUPPORT_PMU_MODEM_STATE
#if SOC_PM_SUPPORT_REGDMA_TRIGGERED_PHY
/**
* @brief The retention action in the modem state of PHY module
@@ -113,7 +113,7 @@ bool sleep_modem_phy_link_enabled(void);
*/
bool sleep_modem_phy_link_done(void);
#endif /* SOC_PM_SUPPORT_PMU_MODEM_STATE */
#endif /* SOC_PM_SUPPORT_REGDMA_TRIGGERED_PHY */
/**
* @brief Whether the current target allows Modem or the TOP power domain to be powered off during light sleep
@@ -211,7 +211,7 @@ void esp_pm_register_light_sleep_default_params_config_callback(update_light_sle
*/
void esp_pm_unregister_light_sleep_default_params_config_callback(void);
#if SOC_PM_SUPPORT_PMU_MODEM_STATE
#if SOC_PM_SUPPORT_REGDMA_TRIGGERED_PHY
/**
* @brief Init phy link.
*
@@ -279,7 +279,7 @@ esp_err_t sleep_phy_link_deinit(void *link_head);
* @param flags A bitmap to indicate the PHY link regdma description configuration flag
*/
void sleep_phy_link_config(void *link_context, uint32_t flags);
#endif /* SOC_PM_SUPPORT_PMU_MODEM_STATE */
#endif /* SOC_PM_SUPPORT_REGDMA_TRIGGERED_PHY */
#ifdef __cplusplus
}
@@ -46,7 +46,7 @@ if(CONFIG_BT_CTRL_SLEEP_ENABLE AND CONFIG_SOC_PM_MODEM_LOCK_CLK_WORKAROUND)
APPEND PROPERTY INTERFACE_LINK_LIBRARIES "-u sleep_power_system_retention_init")
endif()
if(CONFIG_SOC_PM_SUPPORT_PMU_MODEM_STATE)
if(CONFIG_SOC_PM_SUPPORT_REGDMA_TRIGGERED_PHY)
list(APPEND srcs "port/${target}/sleep_phy.c")
endif()
@@ -17,7 +17,7 @@
#include "esp_private/sleep_modem.h"
#include "esp_private/sleep_retention.h"
#if SOC_PM_SUPPORT_PMU_MODEM_STATE
#if SOC_PM_SUPPORT_REGDMA_TRIGGERED_PHY
#define SARADC_TSENS_REG (0x6000e058)
#define SARADC_TSENS_PU (BIT(22))
@@ -171,4 +171,4 @@ void sleep_phy_skip_wifi_reg(bool skip)
}
}
#endif /* SOC_PM_SUPPORT_PMU_MODEM_STATE */
#endif /* SOC_PM_SUPPORT_REGDMA_TRIGGERED_PHY */
@@ -16,7 +16,7 @@
#include "esp_private/sleep_modem.h"
#include "esp_private/sleep_retention.h"
#if SOC_PM_SUPPORT_PMU_MODEM_STATE
#if SOC_PM_SUPPORT_REGDMA_TRIGGERED_PHY
#define SARADC_TSENS_REG (0x6000e058)
#define SARADC_TSENS_PU (BIT(22))
@@ -180,4 +180,4 @@ void sleep_phy_skip_wifi_reg(bool skip)
regdma_link_set_skip_flag(s_phy_skip_links.skip_link[i], skip, skip);
}
}
#endif /* SOC_PM_SUPPORT_PMU_MODEM_STATE */
#endif /* SOC_PM_SUPPORT_REGDMA_TRIGGERED_PHY */
@@ -16,7 +16,7 @@
#include "esp_private/sleep_modem.h"
#include "esp_private/sleep_retention.h"
#if SOC_PM_SUPPORT_PMU_MODEM_STATE
#if SOC_PM_SUPPORT_REGDMA_TRIGGERED_PHY
#define SARADC_TSENS_REG (0x6000e058)
#define SARADC_TSENS_PU (BIT(22))
@@ -174,4 +174,4 @@ void sleep_phy_skip_wifi_reg(bool skip)
}
}
#endif /* SOC_PM_SUPPORT_PMU_MODEM_STATE */
#endif /* SOC_PM_SUPPORT_REGDMA_TRIGGERED_PHY */
@@ -17,7 +17,7 @@
#include "esp_private/sleep_modem.h"
#include "esp_private/sleep_retention.h"
#if SOC_PM_SUPPORT_PMU_MODEM_STATE
#if SOC_PM_SUPPORT_REGDMA_TRIGGERED_PHY
#define SARADC_TSENS_REG (0x20818000)
#define SARADC_TSENS_PU (BIT(22))
@@ -151,4 +151,4 @@ esp_err_t sleep_phy_link_deinit(void *link_head)
return err;
}
#endif /* SOC_PM_SUPPORT_PMU_MODEM_STATE */
#endif /* SOC_PM_SUPPORT_REGDMA_TRIGGERED_PHY */
+2 -2
View File
@@ -61,7 +61,7 @@ void pau_regdma_set_entry_link_addr(pau_regdma_link_addr_t *link_entries)
pau_hal_set_regdma_entry_link_addr(PAU_instance()->hal, link_entries);
}
#if SOC_PM_SUPPORT_PMU_MODEM_STATE
#if SOC_PM_SUPPORT_REGDMA_TRIGGERED_PHY
#if SOC_PM_PAU_REGDMA_LINK_MODEM
void pau_regdma_set_modem_link_addr(void *link_addr)
{
@@ -80,6 +80,7 @@ void IRAM_ATTR pau_regdma_trigger_modem_link_restore(void)
pau_hal_start_regdma_modem_link(PAU_instance()->hal, false);
pau_hal_stop_regdma_modem_link(PAU_instance()->hal);
}
#endif /* SOC_PM_SUPPORT_REGDMA_TRIGGERED_PHY */
#if SOC_PM_PAU_REGDMA_MODEM_WIFIMAC_WORKAROUND
void IRAM_ATTR pau_regdma_trigger_wifimac_link_backup(void)
@@ -94,7 +95,6 @@ void IRAM_ATTR pau_regdma_trigger_wifimac_link_restore(void)
pau_hal_stop_regdma_wifimac_link(PAU_instance()->hal);
}
#endif
#endif
#if SOC_PM_RETENTION_SW_TRIGGER_REGDMA
void IRAM_ATTR pau_regdma_set_system_link_addr(void *link_addr)
+2 -2
View File
@@ -129,7 +129,7 @@ void mac_bb_power_up_cb_execute(void)
#endif ///CONFIG_MAC_BB_PD
#if SOC_PM_SUPPORT_PMU_MODEM_STATE
#if SOC_PM_SUPPORT_REGDMA_TRIGGERED_PHY
typedef struct sleep_modem_config {
_lock_t phy_link_lock;
@@ -216,7 +216,7 @@ inline __attribute__((always_inline)) bool sleep_modem_phy_link_done(void)
return (s_sleep_modem.phy_link_done == 1);
}
#endif /* SOC_PM_SUPPORT_PMU_MODEM_STATE */
#endif /* SOC_PM_SUPPORT_REGDMA_TRIGGERED_PHY */
bool modem_domain_pd_allowed(void)
{
+8 -2
View File
@@ -341,9 +341,11 @@ void esp_phy_enable(esp_phy_modem_t modem)
#endif
s_is_phy_calibrated = true;
} else {
#if SOC_PM_SUPPORT_REGDMA_TRIGGERED_PHY
#if SOC_PM_SUPPORT_PMU_MODEM_STATE && CONFIG_ESP_WIFI_ENHANCED_LIGHT_SLEEP
bool wifimac_link_is_sel = false;
if (!pm_mac_modem_rf_already_enabled()) {
#endif /* SOC_PM_SUPPORT_PMU_MODEM_STATE && CONFIG_ESP_WIFI_ENHANCED_LIGHT_SLEEP */
if (sleep_modem_phy_link_enabled() && sleep_modem_phy_link_done()) {
#if SOC_PM_PAU_REGDMA_LINK_IDX_PHY && SOC_PM_PAU_REGDMA_MODEM_WIFIMAC_WORKAROUND
/*
@@ -362,12 +364,14 @@ void esp_phy_enable(esp_phy_modem_t modem)
} else {
phy_wakeup_init();
}
#if SOC_PM_SUPPORT_PMU_MODEM_STATE && CONFIG_ESP_WIFI_ENHANCED_LIGHT_SLEEP
} else {
phy_wakeup_from_modem_state_extra_init();
}
#endif /* SOC_PM_SUPPORT_PMU_MODEM_STATE && CONFIG_ESP_WIFI_ENHANCED_LIGHT_SLEEP */
#else
phy_wakeup_init();
#endif /* SOC_PM_SUPPORT_PMU_MODEM_STATE && CONFIG_ESP_WIFI_ENHANCED_LIGHT_SLEEP */
#endif /* SOC_PM_SUPPORT_REGDMA_TRIGGERED_PHY */
#if SOC_PM_MODEM_RETENTION_BY_BACKUPDMA
phy_digital_regs_load();
@@ -421,8 +425,10 @@ void esp_phy_disable(esp_phy_modem_t modem)
#if SOC_PM_MODEM_RETENTION_BY_BACKUPDMA
phy_digital_regs_store();
#endif
#if SOC_PM_SUPPORT_REGDMA_TRIGGERED_PHY
#if SOC_PM_SUPPORT_PMU_MODEM_STATE && CONFIG_ESP_WIFI_ENHANCED_LIGHT_SLEEP
pm_mac_modem_clear_rf_power_state();
#endif /* SOC_PM_SUPPORT_PMU_MODEM_STATE && CONFIG_ESP_WIFI_ENHANCED_LIGHT_SLEEP */
if (sleep_modem_phy_link_enabled()) {
bool wifimac_link_is_sel = false;
#if SOC_PM_PAU_REGDMA_LINK_IDX_PHY && SOC_PM_PAU_REGDMA_MODEM_WIFIMAC_WORKAROUND
@@ -430,7 +436,7 @@ void esp_phy_disable(esp_phy_modem_t modem)
#endif
sleep_modem_do_phy_retention(false, wifimac_link_is_sel);
} else
#endif /* SOC_PM_SUPPORT_PMU_MODEM_STATE && CONFIG_ESP_WIFI_ENHANCED_LIGHT_SLEEP */
#endif /* SOC_PM_SUPPORT_REGDMA_TRIGGERED_PHY */
{
// Disable PHY and RF.
phy_close_rf();
@@ -1407,6 +1407,10 @@ config SOC_PM_SUPPORT_RTC_PERIPH_PD
bool
default y
config SOC_PM_SUPPORT_REGDMA_TRIGGERED_PHY
bool
default y
config SOC_PM_SUPPORT_PMU_MODEM_STATE
bool
default y
@@ -570,6 +570,7 @@
#define SOC_PM_SUPPORT_MAC_BB_PD (1)
#define SOC_PM_SUPPORT_RTC_PERIPH_PD (1)
#define SOC_PM_SUPPORT_REGDMA_TRIGGERED_PHY (1)
#define SOC_PM_SUPPORT_PMU_MODEM_STATE (1)
/* macro redefine for pass esp_wifi headers md5sum check */
#define MAC_SUPPORT_PMU_MODEM_STATE SOC_PM_SUPPORT_PMU_MODEM_STATE
@@ -1143,6 +1143,10 @@ config SOC_PM_SUPPORT_RTC_PERIPH_PD
bool
default y
config SOC_PM_SUPPORT_REGDMA_TRIGGERED_PHY
bool
default y
config SOC_PM_SUPPORT_PMU_MODEM_STATE
bool
default y
@@ -469,7 +469,8 @@
#define SOC_PM_SUPPORT_MAC_BB_PD (1)
#define SOC_PM_SUPPORT_RTC_PERIPH_PD (1)
#define SOC_PM_SUPPORT_PMU_MODEM_STATE (1)
#define SOC_PM_SUPPORT_REGDMA_TRIGGERED_PHY (1)
#define SOC_PM_SUPPORT_PMU_MODEM_STATE (1)
/* macro redefine for pass esp_wifi headers md5sum check */
#define MAC_SUPPORT_PMU_MODEM_STATE SOC_PM_SUPPORT_PMU_MODEM_STATE
@@ -1059,6 +1059,10 @@ config SOC_PM_SUPPORT_RTC_PERIPH_PD
bool
default y
config SOC_PM_SUPPORT_REGDMA_TRIGGERED_PHY
bool
default y
config SOC_PM_SUPPORT_PMU_MODEM_STATE
bool
default y
@@ -437,6 +437,7 @@
#define SOC_PM_SUPPORT_MAC_BB_PD (1)
#define SOC_PM_SUPPORT_RTC_PERIPH_PD (1)
#define SOC_PM_SUPPORT_REGDMA_TRIGGERED_PHY (1)
#define SOC_PM_SUPPORT_PMU_MODEM_STATE (1)
/* macro redefine for pass esp_wifi headers md5sum check */
#define MAC_SUPPORT_PMU_MODEM_STATE SOC_PM_SUPPORT_PMU_MODEM_STATE
@@ -1583,6 +1583,10 @@ config SOC_PM_MODEM_RETENTION_BY_REGDMA
bool
default y
config SOC_PM_SUPPORT_REGDMA_TRIGGERED_PHY
bool
default y
config SOC_PM_SUPPORT_PMU_MODEM_STATE
bool
default y
@@ -586,6 +586,7 @@
#define SOC_PM_PAU_REGDMA_MODEM_WIFIMAC_WORKAROUND (1)
#define SOC_PM_MODEM_RETENTION_BY_REGDMA (1)
#define SOC_PM_SUPPORT_REGDMA_TRIGGERED_PHY (1)
#define SOC_PM_SUPPORT_PMU_MODEM_STATE (1)
#define MAC_SUPPORT_PMU_MODEM_STATE SOC_PM_SUPPORT_PMU_MODEM_STATE
/* Since SOC APB and MODEM APB on ESP32-S31 are decoupled, XTAL can be used as SOC clock in modem state */