@@ -232,9 +232,21 @@ bool rtc_clk_cpu_freq_mhz_to_config(uint32_t freq_mhz, rtc_cpu_freq_config_t *ou
232232 // 40MHz with PLL_F160M or PLL_F240M clock source. This is a special case, has to handle separately.
233233 if (xtal_freq == SOC_XTAL_FREQ_48M && freq_mhz == 40 ) {
234234 real_freq_mhz = freq_mhz ;
235- source = SOC_CPU_CLK_SRC_PLL_F160M ;
236- source_freq_mhz = CLK_LL_PLL_160M_FREQ_MHZ ;
237- divider = 4 ;
235+ if (!ESP_CHIP_REV_ABOVE (efuse_hal_chip_revision (), 101 )) {
236+ #if CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240
237+ source = SOC_CPU_CLK_SRC_PLL_F240M ;
238+ source_freq_mhz = CLK_LL_PLL_240M_FREQ_MHZ ;
239+ divider = 6 ;
240+ #else
241+ source = SOC_CPU_CLK_SRC_PLL_F160M ;
242+ source_freq_mhz = CLK_LL_PLL_160M_FREQ_MHZ ;
243+ divider = 4 ;
244+ #endif
245+ } else {
246+ source = SOC_CPU_CLK_SRC_PLL_F160M ;
247+ source_freq_mhz = CLK_LL_PLL_160M_FREQ_MHZ ;
248+ divider = 4 ;
249+ }
238250 } else if (freq_mhz <= xtal_freq && freq_mhz != 0 ) {
239251 divider = xtal_freq / freq_mhz ;
240252 real_freq_mhz = (xtal_freq + divider / 2 ) / divider ; /* round */
@@ -257,12 +269,18 @@ bool rtc_clk_cpu_freq_mhz_to_config(uint32_t freq_mhz, rtc_cpu_freq_config_t *ou
257269 divider = 1 ;
258270 } else if (freq_mhz == 80 ) {
259271 real_freq_mhz = freq_mhz ;
260- if (!ESP_CHIP_REV_ABOVE (efuse_hal_chip_revision (), 1 )) {
272+ if (!ESP_CHIP_REV_ABOVE (efuse_hal_chip_revision (), 101 )) {
261273 /* ESP32C5 has a root clock ICG issue when switching SOC_CPU_CLK_SRC from PLL_F160M to PLL_F240M
262274 * For detailed information, refer to IDF-11064 */
275+ #if CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240
263276 source = SOC_CPU_CLK_SRC_PLL_F240M ;
264277 source_freq_mhz = CLK_LL_PLL_240M_FREQ_MHZ ;
265278 divider = 3 ;
279+ #else
280+ source = SOC_CPU_CLK_SRC_PLL_F160M ;
281+ source_freq_mhz = CLK_LL_PLL_160M_FREQ_MHZ ;
282+ divider = 2 ;
283+ #endif
266284 } else {
267285 source = SOC_CPU_CLK_SRC_PLL_F160M ;
268286 source_freq_mhz = CLK_LL_PLL_160M_FREQ_MHZ ;
@@ -409,10 +427,20 @@ void rtc_clk_cpu_freq_set_xtal_for_sleep(void)
409427void rtc_clk_cpu_freq_to_pll_and_pll_lock_release (int cpu_freq_mhz )
410428{
411429 // IDF-11064
412- if (cpu_freq_mhz == 240 || ( cpu_freq_mhz == 80 && ! ESP_CHIP_REV_ABOVE ( efuse_hal_chip_revision (), 1 )) ) {
430+ if (cpu_freq_mhz == 240 ) {
413431 rtc_clk_cpu_freq_to_pll_240_mhz (cpu_freq_mhz );
414- } else { // cpu_freq_mhz is 160 or 80 (fixed for chip rev. >= ECO1)
432+ } else if ( cpu_freq_mhz == 160 ) {
415433 rtc_clk_cpu_freq_to_pll_160_mhz (cpu_freq_mhz );
434+ } else {// cpu_freq_mhz is 80
435+ if (!ESP_CHIP_REV_ABOVE (efuse_hal_chip_revision (), 101 )) {// (use 240mhz pll if max cpu freq is 240MHz)
436+ #if CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240
437+ rtc_clk_cpu_freq_to_pll_240_mhz (cpu_freq_mhz );
438+ #else
439+ rtc_clk_cpu_freq_to_pll_160_mhz (cpu_freq_mhz );
440+ #endif
441+ } else {// (fixed for chip rev. >= ECO3)
442+ rtc_clk_cpu_freq_to_pll_160_mhz (cpu_freq_mhz );
443+ }
416444 }
417445 clk_ll_cpu_clk_src_lock_release ();
418446}
0 commit comments