[PATCH master v2 1/2] arm: armv8: mmu: move mmu enablement out of mmu_setup
Ilias Apalodimas
ilias.apalodimas at linaro.org
Tue May 19 20:37:31 CEST 2026
On Mon, 18 May 2026 at 14:54, Anshul Dalal <anshuld at ti.com> 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 <anshuld at ti.com>
> ---
Reviewed-by: Ilias Apalodimas <ilias.apalodimas at linaro.org>
> 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
>
More information about the U-Boot
mailing list