| /* |
| * SPDX-FileCopyrightText: 2024-2025 Espressif Systems (Shanghai) CO LTD |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #include "hw_init.h" |
| #include <stdint.h> |
| #include <esp_cpu.h> |
| #include <soc/rtc.h> |
| #include <soc/extmem_reg.h> |
| #include <esp_rom_sys.h> |
| |
| #include <hal/cache_hal.h> |
| #include <hal/mmu_hal.h> |
| |
| #include <bootloader_clock.h> |
| #include <bootloader_flash.h> |
| #include <esp_flash_internal.h> |
| #include <esp_log.h> |
| |
| #include <console_init.h> |
| #include <flash_init.h> |
| #include <soc_flash_init.h> |
| #include <soc_init.h> |
| #include <soc_random.h> |
| |
| const static char *TAG = "hw_init"; |
| |
| int hardware_init(void) |
| { |
| int err = 0; |
| |
| super_wdt_auto_feed(); |
| |
| #ifdef CONFIG_BOOTLOADER_REGION_PROTECTION_ENABLE |
| esp_cpu_configure_region_protection(); |
| #endif |
| |
| bootloader_clock_configure(); |
| |
| #ifdef CONFIG_ESP_CONSOLE |
| /* initialize console, from now on, we can log */ |
| esp_console_init(); |
| print_banner(); |
| #endif /* CONFIG_ESP_CONSOLE */ |
| |
| cache_hal_init(); |
| |
| mmu_hal_init(); |
| |
| /* Workaround: normal ROM bootloader exits with DROM0 cache unmasked, but 2nd bootloader |
| * exits with it masked. |
| */ |
| REG_CLR_BIT(EXTMEM_PRO_ICACHE_CTRL1_REG, EXTMEM_PRO_ICACHE_MASK_DROM0); |
| |
| flash_update_id(); |
| |
| err = bootloader_flash_xmc_startup(); |
| if (err != 0) { |
| ESP_EARLY_LOGE(TAG, "failed when running XMC startup flow, reboot!"); |
| return err; |
| } |
| |
| err = read_bootloader_header(); |
| if (err != 0) { |
| return err; |
| } |
| |
| err = check_bootloader_validity(); |
| if (err != 0) { |
| return err; |
| } |
| |
| err = init_spi_flash(); |
| if (err != 0) { |
| return err; |
| } |
| |
| check_wdt_reset(); |
| config_wdt(); |
| |
| soc_random_enable(); |
| |
| return 0; |
| } |