From f7137254e94def968a4c91379a0f7542eb9082f7 Mon Sep 17 00:00:00 2001 From: jiangguangming Date: Mon, 28 Sep 2020 10:19:56 +0800 Subject: [PATCH] flash_mmap: register flash2spiram info to ROM --- components/esp_system/port/cpu_start.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/components/esp_system/port/cpu_start.c b/components/esp_system/port/cpu_start.c index b51efe895e..0e5498ee64 100644 --- a/components/esp_system/port/cpu_start.c +++ b/components/esp_system/port/cpu_start.c @@ -359,9 +359,11 @@ void IRAM_ATTR call_start_cpu0(void) #if CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32H2 /* Configure the Cache MMU size for instruction and rodata in flash. */ extern uint32_t Cache_Set_IDROM_MMU_Size(uint32_t irom_size, uint32_t drom_size); - extern int _rodata_reserved_start; + extern int _rodata_reserved_start, _rodata_reserved_end; uint32_t rodata_reserved_start_align = (uint32_t)&_rodata_reserved_start & ~(MMU_PAGE_SIZE - 1); uint32_t cache_mmu_irom_size = ((rodata_reserved_start_align - SOC_DROM_LOW) / MMU_PAGE_SIZE) * sizeof(uint32_t); + uint32_t cache_mmu_drom_size = (((uint32_t)&_rodata_reserved_end - rodata_reserved_start_align + MMU_PAGE_SIZE - 1)/MMU_PAGE_SIZE)*sizeof(uint32_t); + Cache_Set_IDROM_MMU_Size(cache_mmu_irom_size, CACHE_DROM_MMU_MAX_END - cache_mmu_irom_size); #endif // CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32H2 @@ -437,6 +439,8 @@ void IRAM_ATTR call_start_cpu0(void) } #endif + static int s_instr_flash2spiram_off = 0; + static int s_rodata_flash2spiram_off = 0; #if CONFIG_SPIRAM_FETCH_INSTRUCTIONS extern void instruction_flash_page_info_init(void); instruction_flash_page_info_init(); @@ -449,10 +453,22 @@ void IRAM_ATTR call_start_cpu0(void) #if CONFIG_SPIRAM_FETCH_INSTRUCTIONS extern void esp_spiram_enable_instruction_access(void); esp_spiram_enable_instruction_access(); + s_instr_flash2spiram_off = instruction_flash2spiram_offset(); #endif #if CONFIG_SPIRAM_RODATA extern void esp_spiram_enable_rodata_access(void); esp_spiram_enable_rodata_access(); + s_rodata_flash2spiram_off = rodata_flash2spiram_offset(); +#endif + +#if CONFIG_IDF_TARGET_ESP32S3 + extern void Cache_Set_IDROM_MMU_Info(uint32_t instr_page_num, uint32_t rodata_page_num, uint32_t rodata_start, uint32_t rodata_end, int i_off, int ro_off); + Cache_Set_IDROM_MMU_Info(cache_mmu_irom_size/sizeof(uint32_t), \ + cache_mmu_drom_size/sizeof(uint32_t), \ + (uint32_t)&_rodata_reserved_start, \ + (uint32_t)&_rodata_reserved_end, \ + s_instr_flash2spiram_off, \ + s_rodata_flash2spiram_off); #endif #if CONFIG_ESP32S2_INSTRUCTION_CACHE_WRAP || CONFIG_ESP32S2_DATA_CACHE_WRAP