On Mon, 18 May 2026 at 14:54, Anshul Dalal <[email protected]> wrote: > > Currently mmu_setup for ARMv8 performs two functions, first it sets up > the page tables based the memory map provided by the board and then it > enables the MMU. > > However for some platforms runtime fixes to the generated page tables > are required before the MMU can be enabled, such as K3 family of SoCs. > > Therefore this patch moves the enablement of the MMU out of mmu_setup > and to a standalone mmu_enable function to give more granular control to > the platforms. > > Note that no functional changes are intended from this patch. > > Signed-off-by: Anshul Dalal <[email protected]> > ---
Reviewed-by: Ilias Apalodimas <[email protected]> > arch/arm/cpu/armv8/cache_v8.c | 5 ++++- > arch/arm/include/asm/armv8/mmu.h | 5 +++++ > arch/arm/mach-k3/common.c | 1 + > 3 files changed, 10 insertions(+), 1 deletion(-) > > diff --git a/arch/arm/cpu/armv8/cache_v8.c b/arch/arm/cpu/armv8/cache_v8.c > index 39479df7b21..7c0e3f6d055 100644 > --- a/arch/arm/cpu/armv8/cache_v8.c > +++ b/arch/arm/cpu/armv8/cache_v8.c > @@ -810,8 +810,10 @@ __weak void mmu_setup(void) > el = current_el(); > set_ttbr_tcr_mair(el, gd->arch.tlb_addr, get_tcr(NULL, NULL), > MEMORY_ATTRIBUTES); > +} > > - /* enable the mmu */ > +void mmu_enable(void) > +{ > set_sctlr(get_sctlr() | CR_M); > } > > @@ -881,6 +883,7 @@ void dcache_enable(void) > if (!mmu_status()) { > __asm_invalidate_tlb_all(); > mmu_setup(); > + mmu_enable(); > } > > /* Set up page tables only once (it is done also by mmu_setup()) */ > diff --git a/arch/arm/include/asm/armv8/mmu.h > b/arch/arm/include/asm/armv8/mmu.h > index 8aa5f9721c4..5359b2ad87b 100644 > --- a/arch/arm/include/asm/armv8/mmu.h > +++ b/arch/arm/include/asm/armv8/mmu.h > @@ -222,6 +222,11 @@ u64 get_tcr(u64 *pips, u64 *pva_bits); > * mmu_setup() - Sets up the mmu page tables as per mem_map > */ > void mmu_setup(void); > + > +/** > + * mmu_enable() - Enable the MMU by setting 'M' bit in SCTLR register > + */ > +void mmu_enable(void); > #endif > > #endif /* _ASM_ARMV8_MMU_H_ */ > diff --git a/arch/arm/mach-k3/common.c b/arch/arm/mach-k3/common.c > index b0a75988714..396018b7a7a 100644 > --- a/arch/arm/mach-k3/common.c > +++ b/arch/arm/mach-k3/common.c > @@ -279,6 +279,7 @@ void enable_caches(void) > __func__, fdt_strerror(ret)); > > mmu_setup(); > + mmu_enable(); > > if (CONFIG_K3_ATF_LOAD_ADDR >= CFG_SYS_SDRAM_BASE) { > ret = mmu_unmap_reserved_mem("tfa", true); > > -- > 2.53.0 >

