feat(esp_hw_support): support esp32s31 DFS

This commit is contained in:
wuzhenghui
2026-05-06 16:27:28 +08:00
parent f1f3f204fe
commit 68bd919fda
15 changed files with 65 additions and 33 deletions

View File

@@ -82,27 +82,6 @@
#elif CONFIG_IDF_TARGET_ESP32S2
/* Minimal divider at which REF_CLK_FREQ can be obtained */
#define REF_CLK_DIV_MIN 2
#elif CONFIG_IDF_TARGET_ESP32S3
/* Minimal divider at which REF_CLK_FREQ can be obtained */
#define REF_CLK_DIV_MIN 2 // TODO: IDF-5660
#elif CONFIG_IDF_TARGET_ESP32C3
#define REF_CLK_DIV_MIN 2
#elif CONFIG_IDF_TARGET_ESP32C2
#define REF_CLK_DIV_MIN 2
#elif CONFIG_IDF_TARGET_ESP32C6
#define REF_CLK_DIV_MIN 2
#elif CONFIG_IDF_TARGET_ESP32C61
#define REF_CLK_DIV_MIN 2
#elif CONFIG_IDF_TARGET_ESP32C5
#define REF_CLK_DIV_MIN 2
#elif CONFIG_IDF_TARGET_ESP32H2
#define REF_CLK_DIV_MIN 2
#elif CONFIG_IDF_TARGET_ESP32H21
#define REF_CLK_DIV_MIN 2
#elif CONFIG_IDF_TARGET_ESP32P4
#define REF_CLK_DIV_MIN 2
#elif CONFIG_IDF_TARGET_ESP32H4
#define REF_CLK_DIV_MIN 2
#endif
#ifdef CONFIG_PM_PROFILING
@@ -451,11 +430,13 @@ esp_err_t esp_pm_configure(const void* vconfig)
return ESP_ERR_INVALID_ARG;
}
#ifdef REF_CLK_DIV_MIN
int xtal_freq_mhz = esp_clk_xtal_freq() / MHZ;
if (min_freq_mhz < xtal_freq_mhz && min_freq_mhz * MHZ / REF_CLK_FREQ < REF_CLK_DIV_MIN) {
ESP_LOGW(TAG, "min_freq_mhz should be >= %d", REF_CLK_FREQ * REF_CLK_DIV_MIN / MHZ);
return ESP_ERR_INVALID_ARG;
}
#endif
if (!rtc_clk_cpu_freq_mhz_to_config(max_freq_mhz, &freq_config)) {
ESP_LOGW(TAG, "invalid max_freq_mhz value (%d)", max_freq_mhz);
@@ -479,7 +460,7 @@ esp_err_t esp_pm_configure(const void* vconfig)
/* Maximum SOC APB clock frequency is 40 MHz, maximum Modem (WiFi,
* Bluetooth, etc..) APB clock frequency is 80 MHz */
int apb_clk_freq = esp_clk_apb_freq() / MHZ;
#if (CONFIG_ESP_WIFI_ENABLED || CONFIG_BT_ENABLED || CONFIG_IEEE802154_ENABLED) && SOC_PHY_SUPPORTED
#if (CONFIG_ESP_WIFI_ENABLED || CONFIG_BT_ENABLED || CONFIG_IEEE802154_ENABLED) && SOC_PHY_SUPPORTED && !SOC_MODEM_APB_CLOCK_IS_INDEPENDENT
apb_clk_freq = MAX(apb_clk_freq, MODEM_REQUIRED_MIN_APB_CLK_FREQ / MHZ);
#endif
int apb_max_freq = MIN(max_freq_mhz, apb_clk_freq); /* CPU frequency in APB_MAX mode */

View File

@@ -142,7 +142,6 @@
//Periheral Clock {{
#define APB_CLK_FREQ (SOC_XTAL_FREQ_MHZ * 1000000 )
#define MODEM_REQUIRED_MIN_APB_CLK_FREQ ( 80*1000000 )
#define REF_CLK_FREQ ( 1000000 )
//}}
/* Overall memory map */

View File

@@ -135,7 +135,6 @@
//Periheral Clock {{
#define APB_CLK_FREQ ( 80*1000000 )
#define MODEM_REQUIRED_MIN_APB_CLK_FREQ ( 80*1000000 )
#define REF_CLK_FREQ ( 1000000 )
//}}
/* Overall memory map */

View File

@@ -133,7 +133,6 @@
//Periheral Clock {{
#define APB_CLK_FREQ ( 40*1000000 )
#define MODEM_REQUIRED_MIN_APB_CLK_FREQ ( 80*1000000 )
#define REF_CLK_FREQ ( 1000000 )
//}}
/* Overall memory map */

View File

@@ -136,7 +136,6 @@
//Periheral Clock {{
#define APB_CLK_FREQ ( 40*1000000 )
#define MODEM_REQUIRED_MIN_APB_CLK_FREQ ( 80*1000000 )
#define REF_CLK_FREQ ( 1000000 )
//}}
/* Overall memory map */

View File

@@ -133,7 +133,6 @@
//Periheral Clock {{
#define APB_CLK_FREQ ( 40*1000000 )
#define MODEM_REQUIRED_MIN_APB_CLK_FREQ ( 80*1000000 )
#define REF_CLK_FREQ ( 1000000 )
//}}
/* Overall memory map */

View File

@@ -135,7 +135,6 @@
//Periheral Clock {{
#define APB_CLK_FREQ ( 32*1000000 )
#define MODEM_REQUIRED_MIN_APB_CLK_FREQ ( 32*1000000 )
#define REF_CLK_FREQ ( 1000000 )
//}}
/* Overall memory map */

View File

@@ -137,7 +137,6 @@
//Periheral Clock {{
#define APB_CLK_FREQ ( 32*1000000 )
#define MODEM_REQUIRED_MIN_APB_CLK_FREQ ( 32*1000000 )
#define REF_CLK_FREQ ( 1000000 )
//}}
/* Overall memory map */

View File

@@ -126,7 +126,6 @@
//Periheral Clock {{
#define APB_CLK_FREQ ( 32*1000000 )
#define MODEM_REQUIRED_MIN_APB_CLK_FREQ ( 32*1000000 )
#define REF_CLK_FREQ ( 1000000 )
//}}
/* Overall memory map */

View File

@@ -133,7 +133,6 @@
//Periheral Clock {{
#define APB_CLK_FREQ ( 90*1000000 )
#define REF_CLK_FREQ ( 1000000 )
//}}
/* Overall memory map */

View File

@@ -150,7 +150,6 @@
//Periheral Clock {{
#define APB_CLK_FREQ (80*1000000)
#define MODEM_REQUIRED_MIN_APB_CLK_FREQ (80*1000000)
#define REF_CLK_FREQ (1000000)
//}}
/* Overall memory map */

View File

@@ -975,6 +975,10 @@ config SOC_MODEM_CLOCK_IS_INDEPENDENT
bool
default y
config SOC_MODEM_APB_CLOCK_IS_INDEPENDENT
bool
default y
config SOC_MODEM_CLOCK_SOC_PLL_SOURCE_CG_SUPPORTED
bool
default y

View File

@@ -128,7 +128,6 @@
//Periheral Clock {{
#define APB_CLK_FREQ ( 40*1000000 )
#define REF_CLK_FREQ ( 1000000 )
//}}
/* Overall memory map */

View File

@@ -402,6 +402,7 @@
// /*-------------------------- CLOCK SUBSYSTEM CAPS ----------------------------------------*/
#define SOC_MODEM_CLOCK_IS_INDEPENDENT (1)
#define SOC_MODEM_APB_CLOCK_IS_INDEPENDENT (1)
#define SOC_MODEM_CLOCK_SOC_PLL_SOURCE_CG_SUPPORTED (1)
#define SOC_MODEM_CLOCK_WIFI_BB_80X1_AS_APB (1)

View File

@@ -0,0 +1,57 @@
choice EXAMPLE_PM_MAX_FREQ_MHZ
prompt "Max CPU frequency (MHz)"
default EXAMPLE_PM_MAX_FREQ_MHZ_320
config EXAMPLE_PM_MAX_FREQ_MHZ_10
bool "10"
config EXAMPLE_PM_MAX_FREQ_MHZ_20
bool "20"
config EXAMPLE_PM_MAX_FREQ_MHZ_40
bool "40"
config EXAMPLE_PM_MAX_FREQ_MHZ_80
bool "80"
config EXAMPLE_PM_MAX_FREQ_MHZ_160
bool "160"
config EXAMPLE_PM_MAX_FREQ_MHZ_240
bool "240"
config EXAMPLE_PM_MAX_FREQ_MHZ_320
bool "320"
endchoice
config EXAMPLE_PM_MAX_FREQ
int
default 10 if EXAMPLE_PM_MAX_FREQ_MHZ_10
default 20 if EXAMPLE_PM_MAX_FREQ_MHZ_20
default 40 if EXAMPLE_PM_MAX_FREQ_MHZ_40
default 80 if EXAMPLE_PM_MAX_FREQ_MHZ_80
default 160 if EXAMPLE_PM_MAX_FREQ_MHZ_160
default 240 if EXAMPLE_PM_MAX_FREQ_MHZ_240
default 320 if EXAMPLE_PM_MAX_FREQ_MHZ_320
choice EXAMPLE_PM_MIN_FREQ_MHZ
prompt "Min CPU frequency (MHz)"
default EXAMPLE_PM_MIN_FREQ_MHZ_40
config EXAMPLE_PM_MIN_FREQ_MHZ_10
bool "10"
config EXAMPLE_PM_MIN_FREQ_MHZ_20
bool "20"
config EXAMPLE_PM_MIN_FREQ_MHZ_40
bool "40"
config EXAMPLE_PM_MIN_FREQ_MHZ_80
bool "80"
config EXAMPLE_PM_MIN_FREQ_MHZ_160
bool "160"
config EXAMPLE_PM_MIN_FREQ_MHZ_240
bool "240"
config EXAMPLE_PM_MIN_FREQ_MHZ_320
bool "320"
endchoice
config EXAMPLE_PM_MIN_FREQ
int
default 10 if EXAMPLE_PM_MIN_FREQ_MHZ_10
default 20 if EXAMPLE_PM_MIN_FREQ_MHZ_20
default 40 if EXAMPLE_PM_MIN_FREQ_MHZ_40
default 80 if EXAMPLE_PM_MIN_FREQ_MHZ_80
default 160 if EXAMPLE_PM_MIN_FREQ_MHZ_160
default 240 if EXAMPLE_PM_MIN_FREQ_MHZ_240
default 320 if EXAMPLE_PM_MIN_FREQ_MHZ_320