feat(mmu): support mmu and flash mmap driver on p4

This commit is contained in:
Armando
2023-08-14 13:58:35 +08:00
parent d97b3fec67
commit 8c8affc812
17 changed files with 327 additions and 226 deletions
+7 -24
View File
@@ -16,12 +16,11 @@
void mmu_hal_init(void)
{
//TODO: IDF-7509
#if CONFIG_ESP_ROM_RAM_APP_NEEDS_MMU_INIT || CONFIG_IDF_TARGET_ESP32P4
#if CONFIG_ESP_ROM_RAM_APP_NEEDS_MMU_INIT
ROM_Boot_Cache_Init();
#endif
//TODO: IDF-7509
//TODO: IDF-7516
#if CONFIG_IDF_TARGET_ESP32P4
Cache_Invalidate_All(CACHE_MAP_L2_CACHE);
#endif
@@ -32,10 +31,15 @@ void mmu_hal_init(void)
void mmu_hal_unmap_all(void)
{
#if MMU_LL_MMU_PER_TARGET
mmu_ll_unmap_all(MMU_LL_FLASH_MMU_ID);
mmu_ll_unmap_all(MMU_LL_PSRAM_MMU_ID);
#else
mmu_ll_unmap_all(0);
#if !CONFIG_FREERTOS_UNICORE
mmu_ll_unmap_all(1);
#endif
#endif
}
uint32_t mmu_hal_pages_to_bytes(uint32_t mmu_id, uint32_t page_num)
@@ -90,11 +94,6 @@ void mmu_hal_map_region(uint32_t mmu_id, mmu_target_t mem_type, uint32_t vaddr,
uint32_t entry_id = 0;
uint32_t mmu_val; //This is the physical address in the format that MMU supported
//TODO: IDF-7509
#if CONFIG_IDF_TARGET_ESP32P4
uint32_t vaddr_orig = vaddr;
#endif
*out_len = mmu_hal_pages_to_bytes(mmu_id, page_num);
mmu_val = mmu_ll_format_paddr(mmu_id, paddr, mem_type);
@@ -105,22 +104,11 @@ void mmu_hal_map_region(uint32_t mmu_id, mmu_target_t mem_type, uint32_t vaddr,
mmu_val++;
page_num--;
}
//TODO: IDF-7509
#if CONFIG_IDF_TARGET_ESP32P4
Cache_Invalidate_Addr(CACHE_MAP_L1_DCACHE | CACHE_MAP_L2_CACHE, vaddr_orig, len);
#endif
}
void mmu_hal_unmap_region(uint32_t mmu_id, uint32_t vaddr, uint32_t len)
{
uint32_t page_size_in_bytes = mmu_hal_pages_to_bytes(mmu_id, 1);
//TODO: IDF-7509
#if CONFIG_IDF_TARGET_ESP32P4
uint32_t vaddr_orig = vaddr;
#endif
HAL_ASSERT(vaddr % page_size_in_bytes == 0);
HAL_ASSERT(mmu_hal_check_valid_ext_vaddr_region(mmu_id, vaddr, len, MMU_VADDR_DATA | MMU_VADDR_INSTRUCTION));
@@ -132,11 +120,6 @@ void mmu_hal_unmap_region(uint32_t mmu_id, uint32_t vaddr, uint32_t len)
vaddr += page_size_in_bytes;
page_num--;
}
//TODO: IDF-7509
#if CONFIG_IDF_TARGET_ESP32P4
Cache_Invalidate_Addr(CACHE_MAP_L1_DCACHE | CACHE_MAP_L2_CACHE, vaddr_orig, len);
#endif
}
bool mmu_hal_vaddr_to_paddr(uint32_t mmu_id, uint32_t vaddr, uint32_t *out_paddr, mmu_target_t *out_target)