From: Anshul Dalal Date: Fri, 17 Oct 2025 13:15:25 +0000 (+0530) Subject: arm: armv8: mmu: export mmu_setup X-Git-Tag: v2026.01-rc1~11^2~8 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=567a683e8ced54c3ffa53f62a4ed7e535268c6f2;p=thirdparty%2Fu-boot.git arm: armv8: mmu: export mmu_setup The mmu_setup function configures the page tables based on the board supplied mem_map struct array. It is called implicitly as part of dcache_enable but this limits us to only be able to use APIs such as mmu_change_region_attr only after caches are enabled. This might lead to speculative accesses before we can unmap a region that is marked as cacheable in the static memory map. Therefore this patch exports the mmu_setup function in mmu.h allowing users to have more control over when the mmu is configured. For K3 specifically this allows for the following configuration sequence as part of enable_caches: static mem_map fixups (TODO) -> mmu_setup -> carveouts using mmu_change_region_attr (TODO) -> icache/dcache enable Reviewed-by: Dhruva Gole Reviewed-by: Ilias Apalodimas Signed-off-by: Anshul Dalal Tested-by: Wadim Egorov --- diff --git a/arch/arm/include/asm/armv8/mmu.h b/arch/arm/include/asm/armv8/mmu.h index 6af8cd111a4..3807c702fb6 100644 --- a/arch/arm/include/asm/armv8/mmu.h +++ b/arch/arm/include/asm/armv8/mmu.h @@ -197,6 +197,11 @@ struct mm_region { extern struct mm_region *mem_map; void setup_pgtables(void); u64 get_tcr(u64 *pips, u64 *pva_bits); + +/** + * mmu_setup() - Sets up the mmu page tables as per mem_map + */ +void mmu_setup(void); #endif #endif /* _ASM_ARMV8_MMU_H_ */ diff --git a/arch/arm/mach-k3/common.c b/arch/arm/mach-k3/common.c index 7f2a4e6260e..ea287ba1226 100644 --- a/arch/arm/mach-k3/common.c +++ b/arch/arm/mach-k3/common.c @@ -30,6 +30,7 @@ #include #include #include +#include #define PROC_BOOT_CTRL_FLAG_R5_CORE_HALT 0x00000001 #define PROC_BOOT_STATUS_FLAG_R5_WFI 0x00000002 @@ -261,6 +262,8 @@ void board_prep_linux(struct bootm_headers *images) void enable_caches(void) { + mmu_setup(); + icache_enable(); dcache_enable(); }