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.
Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
Signed-off-by: Anshul Dalal <anshuld@ti.com>
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);
}
if (!mmu_status()) {
__asm_invalidate_tlb_all();
mmu_setup();
+ mmu_enable();
}
/* Set up page tables only once (it is done also by mmu_setup()) */
* 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_ */
__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);