Skip to content

Commit bacb0ce

Browse files
author
Jiang Jiang Jian
committed
Merge branch 'bugfix/fix_c5_tx_pkt_failed' into 'master'
fix(pm): fix c5 tx pkt failed Closes PM-433 and PM-475 See merge request espressif/esp-idf!40323
2 parents c513e95 + 279ac41 commit bacb0ce

File tree

1 file changed

+34
-6
lines changed
  • components/esp_hw_support/port/esp32c5

1 file changed

+34
-6
lines changed

components/esp_hw_support/port/esp32c5/rtc_clk.c

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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)
409427
void 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

Comments
 (0)