|
|
@@ -48,6 +48,7 @@
|
|
|
#include "bootloader_flash.h"
|
|
|
#include "bootloader_random.h"
|
|
|
#include "bootloader_config.h"
|
|
|
+#include "bootloader_clock.h"
|
|
|
|
|
|
#include "flash_qio_mode.h"
|
|
|
|
|
|
@@ -75,7 +76,6 @@ static void set_cache_and_start_app(uint32_t drom_addr,
|
|
|
static void update_flash_config(const esp_image_header_t* pfhdr);
|
|
|
static void vddsdio_configure();
|
|
|
static void flash_gpio_configure();
|
|
|
-static void clock_configure(void);
|
|
|
static void uart_console_configure(void);
|
|
|
static void wdt_reset_check(void);
|
|
|
|
|
|
@@ -447,7 +447,7 @@ void bootloader_main()
|
|
|
{
|
|
|
vddsdio_configure();
|
|
|
flash_gpio_configure();
|
|
|
- clock_configure();
|
|
|
+ bootloader_clock_configure();
|
|
|
uart_console_configure();
|
|
|
wdt_reset_check();
|
|
|
ESP_LOGI(TAG, "ESP-IDF %s 2nd stage bootloader", IDF_VER);
|
|
|
@@ -835,46 +835,6 @@ static void IRAM_ATTR flash_gpio_configure()
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-static void clock_configure(void)
|
|
|
-{
|
|
|
- // ROM bootloader may have put a lot of text into UART0 FIFO.
|
|
|
- // Wait for it to be printed.
|
|
|
- // This is not needed on power on reset, when ROM bootloader is running at
|
|
|
- // 40 MHz. But in case of TG WDT reset, CPU may still be running at >80 MHZ,
|
|
|
- // and will be done with the bootloader much earlier than UART FIFO is empty.
|
|
|
- uart_tx_wait_idle(0);
|
|
|
-
|
|
|
- /* 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;
|
|
|
- }
|
|
|
-
|
|
|
- rtc_clk_config_t clk_cfg = RTC_CLK_CONFIG_DEFAULT();
|
|
|
- clk_cfg.xtal_freq = CONFIG_ESP32_XTAL_FREQ;
|
|
|
- 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);
|
|
|
- /* As a slight optimization, if 32k XTAL was enabled in sdkconfig, we enable
|
|
|
- * it here. Usually it needs some time to start up, so we amortize at least
|
|
|
- * part of the start up time by enabling 32k XTAL early.
|
|
|
- * App startup code will wait until the oscillator has started up.
|
|
|
- */
|
|
|
-#ifdef CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_CRYSTAL
|
|
|
- if (!rtc_clk_32k_enabled()) {
|
|
|
- rtc_clk_32k_bootstrap();
|
|
|
- }
|
|
|
-#endif
|
|
|
-}
|
|
|
|
|
|
static void uart_console_configure(void)
|
|
|
{
|