static void clock_configure(void)
{
/* Set CPU to 80MHz. Keep other clocks unmodified. */
+ rtc_cpu_freq_t cpu_freq = RTC_CPU_FREQ_80M;
+
+ /* On ESP32 rev 0, switching to 80MHz if clock was previously set to
+ * 240 MHz may cause the chip to lock up (see section 3.5 of the errata
+ * document). For rev. 0, switch to 240 instead if it was chosen in
+ * menuconfig.
+ */
+ uint32_t chip_ver_reg = REG_READ(EFUSE_BLK0_RDATA3_REG);
+ if ((chip_ver_reg & EFUSE_RD_CHIP_VER_REV1_M) == 0 &&
+ CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ == 240) {
+ cpu_freq = RTC_CPU_FREQ_240M;
+ }
+
uart_tx_wait_idle(0);
rtc_clk_config_t clk_cfg = RTC_CLK_CONFIG_DEFAULT();
clk_cfg.xtal_freq = CONFIG_ESP32_XTAL_FREQ;
- clk_cfg.cpu_freq = RTC_CPU_FREQ_80M;
+ clk_cfg.cpu_freq = cpu_freq;
clk_cfg.slow_freq = rtc_clk_slow_freq_get();
clk_cfg.fast_freq = rtc_clk_fast_freq_get();
rtc_clk_init(clk_cfg);