mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2026-06-02 09:46:37 +03:00
arm: armv8: mmu: move mmu enablement out of mmu_setup
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>
This commit is contained in:
@@ -810,8 +810,10 @@ __weak void mmu_setup(void)
|
|||||||
el = current_el();
|
el = current_el();
|
||||||
set_ttbr_tcr_mair(el, gd->arch.tlb_addr, get_tcr(NULL, NULL),
|
set_ttbr_tcr_mair(el, gd->arch.tlb_addr, get_tcr(NULL, NULL),
|
||||||
MEMORY_ATTRIBUTES);
|
MEMORY_ATTRIBUTES);
|
||||||
|
}
|
||||||
|
|
||||||
/* enable the mmu */
|
void mmu_enable(void)
|
||||||
|
{
|
||||||
set_sctlr(get_sctlr() | CR_M);
|
set_sctlr(get_sctlr() | CR_M);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -881,6 +883,7 @@ void dcache_enable(void)
|
|||||||
if (!mmu_status()) {
|
if (!mmu_status()) {
|
||||||
__asm_invalidate_tlb_all();
|
__asm_invalidate_tlb_all();
|
||||||
mmu_setup();
|
mmu_setup();
|
||||||
|
mmu_enable();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set up page tables only once (it is done also by mmu_setup()) */
|
/* Set up page tables only once (it is done also by mmu_setup()) */
|
||||||
|
|||||||
@@ -222,6 +222,11 @@ u64 get_tcr(u64 *pips, u64 *pva_bits);
|
|||||||
* mmu_setup() - Sets up the mmu page tables as per mem_map
|
* mmu_setup() - Sets up the mmu page tables as per mem_map
|
||||||
*/
|
*/
|
||||||
void mmu_setup(void);
|
void mmu_setup(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* mmu_enable() - Enable the MMU by setting 'M' bit in SCTLR register
|
||||||
|
*/
|
||||||
|
void mmu_enable(void);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* _ASM_ARMV8_MMU_H_ */
|
#endif /* _ASM_ARMV8_MMU_H_ */
|
||||||
|
|||||||
@@ -279,6 +279,7 @@ void enable_caches(void)
|
|||||||
__func__, fdt_strerror(ret));
|
__func__, fdt_strerror(ret));
|
||||||
|
|
||||||
mmu_setup();
|
mmu_setup();
|
||||||
|
mmu_enable();
|
||||||
|
|
||||||
if (CONFIG_K3_ATF_LOAD_ADDR >= CFG_SYS_SDRAM_BASE) {
|
if (CONFIG_K3_ATF_LOAD_ADDR >= CFG_SYS_SDRAM_BASE) {
|
||||||
ret = mmu_unmap_reserved_mem("tfa", true);
|
ret = mmu_unmap_reserved_mem("tfa", true);
|
||||||
|
|||||||
Reference in New Issue
Block a user