mirror of
https://github.com/espressif/esp-idf.git
synced 2026-04-28 03:23:14 +00:00
fix(hw_support): Fix crash when reconfiguring flash from 40 to 80 MHz
Reading from the flash while it is being reconfigured leads to data
corruption and a crash when the reconfiguration code is located in flash.
This is only an issue if a device has a bootloader that runs with 40 MHz
flash and an application flashed via OTA that runs with 80 MHz flash.
If bootloader and application run with the same flash speed, the
reconfiguration is basically a no-op and no data corruption occurs.
Fix reconfiguration by placing the code back into IRAM.
Issue introduced in: 7549d08
Closes: https://github.com/espressif/esp-idf/pull/17905
This commit is contained in:
committed by
Michael (XIAO Xufeng)
parent
89924167ea
commit
02a3b294a5
@@ -612,6 +612,20 @@ MSPI_INIT_ATTR void mspi_init(void)
|
||||
}
|
||||
#endif // !CONFIG_APP_BUILD_TYPE_PURE_RAM_APP
|
||||
|
||||
#if CONFIG_IDF_TARGET_ESP32 && !CONFIG_APP_BUILD_TYPE_RAM && !CONFIG_SPIRAM_BOOT_HW_INIT
|
||||
/*
|
||||
* Adjust flash configuration. This must be placed in IRAM because running from flash,
|
||||
* while it is being reconfigured, will result in corrupt data being read.
|
||||
*/
|
||||
NOINLINE_ATTR IRAM_ATTR static void configure_flash(esp_image_header_t *fhdr)
|
||||
{
|
||||
bootloader_flash_gpio_config(fhdr);
|
||||
bootloader_flash_dummy_config(fhdr);
|
||||
bootloader_flash_clock_config(fhdr);
|
||||
bootloader_flash_cs_timing_config();
|
||||
}
|
||||
#endif // CONFIG_IDF_TARGET_ESP32 && !CONFIG_APP_BUILD_TYPE_RAM && !CONFIG_SPIRAM_BOOT_HW_INIT
|
||||
|
||||
/*
|
||||
* Initialize other parts of the system, including other CPUs.
|
||||
* As CPU0 needs to disable the cache in system_early_init function, the other cores are not allowed to run with the
|
||||
@@ -851,10 +865,7 @@ NOINLINE_ATTR static void system_early_init(const soc_reset_reason_t *rst_reas)
|
||||
#if CONFIG_IDF_TARGET_ESP32
|
||||
#if !CONFIG_SPIRAM_BOOT_HW_INIT
|
||||
// If psram is uninitialized, we need to improve some flash configuration.
|
||||
bootloader_flash_clock_config(&fhdr);
|
||||
bootloader_flash_gpio_config(&fhdr);
|
||||
bootloader_flash_dummy_config(&fhdr);
|
||||
bootloader_flash_cs_timing_config();
|
||||
configure_flash(&fhdr);
|
||||
#endif //!CONFIG_SPIRAM_BOOT_HW_INIT
|
||||
#endif //CONFIG_IDF_TARGET_ESP32
|
||||
|
||||
|
||||
Reference in New Issue
Block a user