mirror of
https://github.com/espressif/esp-idf.git
synced 2025-09-30 19:19:21 +00:00
fix(bootloader): fixed P4 bootloader being able to boot with certain configs
Due to internal memory being behind a cache on P4 we need to make sure we do cache write backs when manipulating IRAM over the dcache.
This commit is contained in:
@@ -226,6 +226,8 @@ static esp_err_t image_load(esp_image_load_mode_t mode, const esp_partition_pos_
|
||||
}
|
||||
}
|
||||
#if SOC_CACHE_INTERNAL_MEM_VIA_L1CACHE
|
||||
/* We have manipulated data over dcache that will be read over icache and need
|
||||
to writeback, else the data read might be invalid */
|
||||
cache_ll_writeback_all(CACHE_LL_LEVEL_INT_MEM, CACHE_TYPE_DATA, CACHE_LL_ID_ALL);
|
||||
#endif
|
||||
}
|
||||
@@ -673,6 +675,13 @@ static esp_err_t process_segment_data(int segment, intptr_t load_addr, uint32_t
|
||||
|
||||
if (checksum == NULL && sha_handle == NULL) {
|
||||
memcpy((void *)load_addr, data, data_len);
|
||||
#if SOC_CACHE_INTERNAL_MEM_VIA_L1CACHE
|
||||
if (esp_ptr_in_iram((uint32_t *)load_addr)) {
|
||||
/* If we have manipulated data over dcache that will be read over icache then we need
|
||||
to writeback, else the data read might be invalid */
|
||||
cache_ll_writeback_all(CACHE_LL_LEVEL_INT_MEM, CACHE_TYPE_DATA, CACHE_LL_ID_ALL);
|
||||
}
|
||||
#endif
|
||||
bootloader_munmap(data);
|
||||
return ESP_OK;
|
||||
}
|
||||
@@ -728,7 +737,9 @@ static esp_err_t process_segment_data(int segment, intptr_t load_addr, uint32_t
|
||||
}
|
||||
}
|
||||
#if SOC_CACHE_INTERNAL_MEM_VIA_L1CACHE
|
||||
if (do_load && esp_ptr_in_diram_iram((uint32_t *)load_addr)) {
|
||||
if (do_load && esp_ptr_in_iram((uint32_t *)load_addr)) {
|
||||
/* If we have manipulated data over dcache that will be read over icache then we need
|
||||
to writeback, else the data read might be invalid */
|
||||
cache_ll_writeback_all(CACHE_LL_LEVEL_INT_MEM, CACHE_TYPE_DATA, CACHE_LL_ID_ALL);
|
||||
}
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user