|
|
@@ -71,6 +71,7 @@
|
|
|
#include "esp_private/esp_mmu_map_private.h"
|
|
|
#if CONFIG_SPIRAM
|
|
|
#include "esp_psram.h"
|
|
|
+#include "esp_private/mmu_psram_flash.h"
|
|
|
#include "esp_private/esp_psram_extram.h"
|
|
|
#endif
|
|
|
|
|
|
@@ -112,6 +113,11 @@ extern int _bss_end;
|
|
|
extern int _rtc_bss_start;
|
|
|
extern int _rtc_bss_end;
|
|
|
|
|
|
+extern int _instruction_reserved_start;
|
|
|
+extern int _instruction_reserved_end;
|
|
|
+extern int _rodata_reserved_start;
|
|
|
+extern int _rodata_reserved_end;
|
|
|
+
|
|
|
extern int _vector_table;
|
|
|
|
|
|
static const char *TAG = "cpu_start";
|
|
|
@@ -358,20 +364,16 @@ void IRAM_ATTR call_start_cpu0(void)
|
|
|
esp_restart();
|
|
|
}
|
|
|
|
|
|
-#if CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32H4 || CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C6
|
|
|
- /* 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;
|
|
|
- uint32_t rodata_reserved_start_align = (uint32_t)&_rodata_reserved_start & ~(SPI_FLASH_MMU_PAGE_SIZE - 1);
|
|
|
- uint32_t cache_mmu_irom_size = ((rodata_reserved_start_align - SOC_DROM_LOW) / SPI_FLASH_MMU_PAGE_SIZE) * sizeof(uint32_t);
|
|
|
+#if CONFIG_ESP_ROM_NEEDS_SET_CACHE_MMU_SIZE
|
|
|
+ uint32_t _instruction_size = (uint32_t)&_instruction_reserved_end - (uint32_t)&_instruction_reserved_start;
|
|
|
+ uint32_t cache_mmu_irom_size = ((_instruction_size + SPI_FLASH_MMU_PAGE_SIZE - 1) / SPI_FLASH_MMU_PAGE_SIZE) * sizeof(uint32_t);
|
|
|
|
|
|
-#if CONFIG_IDF_TARGET_ESP32S3
|
|
|
- extern int _rodata_reserved_end;
|
|
|
- uint32_t cache_mmu_drom_size = (((uint32_t)&_rodata_reserved_end - rodata_reserved_start_align + SPI_FLASH_MMU_PAGE_SIZE - 1) / SPI_FLASH_MMU_PAGE_SIZE) * sizeof(uint32_t);
|
|
|
-#endif
|
|
|
+ uint32_t _rodata_size = (uint32_t)&_rodata_reserved_end - (uint32_t)&_rodata_reserved_start;
|
|
|
+ __attribute__((unused)) uint32_t cache_mmu_drom_size = ((_rodata_size + SPI_FLASH_MMU_PAGE_SIZE - 1) / SPI_FLASH_MMU_PAGE_SIZE) * sizeof(uint32_t);
|
|
|
|
|
|
+ /* Configure the Cache MMU size for instruction and rodata in flash. */
|
|
|
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_ESP32H4 || CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C6
|
|
|
+#endif // CONFIG_ESP_ROM_NEEDS_SET_CACHE_MMU_SIZE
|
|
|
|
|
|
#if CONFIG_ESPTOOLPY_OCT_FLASH && !CONFIG_ESPTOOLPY_FLASH_MODE_AUTO_DETECT
|
|
|
bool efuse_opflash_en = efuse_ll_get_flash_type();
|
|
|
@@ -458,22 +460,18 @@ void IRAM_ATTR call_start_cpu0(void)
|
|
|
int s_instr_flash2spiram_off = 0;
|
|
|
int s_rodata_flash2spiram_off = 0;
|
|
|
#if CONFIG_SPIRAM_FETCH_INSTRUCTIONS
|
|
|
- extern int instruction_flash2spiram_offset(void);
|
|
|
s_instr_flash2spiram_off = instruction_flash2spiram_offset();
|
|
|
#endif
|
|
|
#if CONFIG_SPIRAM_RODATA
|
|
|
- extern int rodata_flash2spiram_offset(void);
|
|
|
s_rodata_flash2spiram_off = rodata_flash2spiram_offset();
|
|
|
#endif
|
|
|
-
|
|
|
- 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
|
|
|
+#endif // CONFIG_IDF_TARGET_ESP32S3
|
|
|
|
|
|
#if CONFIG_ESP32S2_INSTRUCTION_CACHE_WRAP || CONFIG_ESP32S2_DATA_CACHE_WRAP || \
|
|
|
CONFIG_ESP32S3_INSTRUCTION_CACHE_WRAP || CONFIG_ESP32S3_DATA_CACHE_WRAP
|