mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
fix(mmap): fixed spi_flash_phys2cache return addr in PSRAM issue
When SPIRAM_FETCH_INSTRUCTIONS or SPIRAM_RODATA enabled
This commit is contained in:
parent
28340977bd
commit
8bf68ff07b
@ -270,38 +270,6 @@ uint32_t spi_flash_mmap_get_free_pages(spi_flash_mmap_memory_t memory)
|
||||
return len / CONFIG_MMU_PAGE_SIZE;
|
||||
}
|
||||
|
||||
const void * spi_flash_phys2cache(size_t phys_offs, spi_flash_mmap_memory_t memory)
|
||||
{
|
||||
esp_err_t ret = ESP_FAIL;
|
||||
void *ptr = NULL;
|
||||
mmu_target_t target = MMU_TARGET_FLASH0;
|
||||
|
||||
__attribute__((unused)) uint32_t phys_page = phys_offs / CONFIG_MMU_PAGE_SIZE;
|
||||
#if !CONFIG_SPIRAM_FLASH_LOAD_TO_PSRAM
|
||||
#if CONFIG_SPIRAM_FETCH_INSTRUCTIONS
|
||||
if (phys_page >= instruction_flash_start_page_get() && phys_page <= instruction_flash_end_page_get()) {
|
||||
target = MMU_TARGET_PSRAM0;
|
||||
phys_offs -= instruction_flash2spiram_offset() * CONFIG_MMU_PAGE_SIZE;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if CONFIG_SPIRAM_RODATA
|
||||
if (phys_page >= rodata_flash_start_page_get() && phys_page <= rodata_flash_start_page_get()) {
|
||||
target = MMU_TARGET_PSRAM0;
|
||||
phys_offs -= rodata_flash2spiram_offset() * CONFIG_MMU_PAGE_SIZE;
|
||||
}
|
||||
#endif
|
||||
#endif //#if !CONFIG_SPIRAM_FLASH_LOAD_TO_PSRAM
|
||||
|
||||
mmu_vaddr_t type = (memory == SPI_FLASH_MMAP_DATA) ? MMU_VADDR_DATA : MMU_VADDR_INSTRUCTION;
|
||||
ret = esp_mmu_paddr_to_vaddr(phys_offs, target, type, &ptr);
|
||||
if (ret == ESP_ERR_NOT_FOUND) {
|
||||
return NULL;
|
||||
}
|
||||
assert(ret == ESP_OK);
|
||||
return (const void *)ptr;
|
||||
}
|
||||
|
||||
static bool IRAM_ATTR is_page_mapped_in_cache(uint32_t phys_addr, const void **out_ptr)
|
||||
{
|
||||
*out_ptr = NULL;
|
||||
@ -398,4 +366,36 @@ size_t spi_flash_cache2phys(const void *cached)
|
||||
|
||||
return paddr + offset * CONFIG_MMU_PAGE_SIZE;
|
||||
}
|
||||
|
||||
const void * spi_flash_phys2cache(size_t phys_offs, spi_flash_mmap_memory_t memory)
|
||||
{
|
||||
esp_err_t ret = ESP_FAIL;
|
||||
void *ptr = NULL;
|
||||
mmu_target_t target = MMU_TARGET_FLASH0;
|
||||
|
||||
__attribute__((unused)) uint32_t phys_page = phys_offs / CONFIG_MMU_PAGE_SIZE;
|
||||
#if !CONFIG_SPIRAM_FLASH_LOAD_TO_PSRAM
|
||||
#if CONFIG_SPIRAM_FETCH_INSTRUCTIONS
|
||||
if (phys_page >= instruction_flash_start_page_get() && phys_page <= instruction_flash_end_page_get()) {
|
||||
target = MMU_TARGET_PSRAM0;
|
||||
phys_offs -= instruction_flash2spiram_offset() * CONFIG_MMU_PAGE_SIZE;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if CONFIG_SPIRAM_RODATA
|
||||
if (phys_page >= rodata_flash_start_page_get() && phys_page <= rodata_flash_start_page_get()) {
|
||||
target = MMU_TARGET_PSRAM0;
|
||||
phys_offs -= rodata_flash2spiram_offset() * CONFIG_MMU_PAGE_SIZE;
|
||||
}
|
||||
#endif
|
||||
#endif //#if !CONFIG_SPIRAM_FLASH_LOAD_TO_PSRAM
|
||||
|
||||
mmu_vaddr_t type = (memory == SPI_FLASH_MMAP_DATA) ? MMU_VADDR_DATA : MMU_VADDR_INSTRUCTION;
|
||||
ret = esp_mmu_paddr_to_vaddr(phys_offs, target, type, &ptr);
|
||||
if (ret == ESP_ERR_NOT_FOUND) {
|
||||
return NULL;
|
||||
}
|
||||
assert(ret == ESP_OK);
|
||||
return (const void *)ptr;
|
||||
}
|
||||
#endif //!CONFIG_SPI_FLASH_ROM_IMPL || CONFIG_SPIRAM_FETCH_INSTRUCTIONS || CONFIG_SPIRAM_RODATA
|
||||
|
Loading…
x
Reference in New Issue
Block a user