From fae124a2c1b12a45cea3d66ddf7be0c449a9525b Mon Sep 17 00:00:00 2001 From: Ivan Grokhotkov Date: Thu, 15 Aug 2019 16:20:37 +0200 Subject: [PATCH] esp32: cpu_start: read binary image header via cache When flash encryption is enabled, reading via cache also decrypts the data, whereas spi_flash_read does not. Closes https://github.com/espressif/esp-idf/issues/3907 --- components/esp32/cpu_start.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/components/esp32/cpu_start.c b/components/esp32/cpu_start.c index 5a811d0373..95684be8f8 100644 --- a/components/esp32/cpu_start.c +++ b/components/esp32/cpu_start.c @@ -444,10 +444,13 @@ void start_cpu0_default(void) #endif bootloader_flash_update_id(); -#if !CONFIG_SPIRAM_BOOT_INIT // If psram is uninitialized, we need to improve some flash configuration. - esp_image_header_t fhdr; - const esp_partition_t *partition = esp_ota_get_running_partition(); - spi_flash_read(partition->address, &fhdr, sizeof(esp_image_header_t)); +#if !CONFIG_SPIRAM_BOOT_INIT + // Read the application binary image header. This will also decrypt the header if the image is encrypted. + esp_image_header_t fhdr = {0}; + // This assumes that DROM is the first segment in the application binary, i.e. that we can read + // the binary header through cache by accessing SOC_DROM_LOW address. + memcpy(&fhdr, (void*) SOC_DROM_LOW, sizeof(fhdr)); + // 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);