Introduce functions to disable the MMU in EL1
authorAntonio Nino Diaz <antonio.ninodiaz@arm.com>
Thu, 5 Oct 2017 14:19:42 +0000 (15:19 +0100)
committerAntonio Nino Diaz <antonio.ninodiaz@arm.com>
Tue, 17 Oct 2017 11:02:37 +0000 (12:02 +0100)
The implementation is the same as those used to disable it in EL3.

Change-Id: Ibfe7e69034a691fbf57477c5a76a8cdca28f6b26
Signed-off-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
include/lib/aarch64/arch_helpers.h
lib/aarch64/misc_helpers.S

index 0d0d7d3353c44753954b919e1c1e70ab465a9a22..5d20ce9c4440fb850a5e3b49b3c6cd234036b14a 100644 (file)
@@ -171,7 +171,9 @@ void inv_dcache_range(uintptr_t addr, size_t size);
 void dcsw_op_louis(u_register_t op_type);
 void dcsw_op_all(u_register_t op_type);
 
+void disable_mmu_el1(void);
 void disable_mmu_el3(void);
+void disable_mmu_icache_el1(void);
 void disable_mmu_icache_el3(void);
 
 /*******************************************************************************
index 78153bfba01b33f63ca0e14f964464e055f9f23d..9dfe46a2f2eaacb8d34d2e0962c0059c285818b3 100644 (file)
@@ -18,7 +18,9 @@
        .globl  zeromem16
        .globl  memcpy16
 
+       .globl  disable_mmu_el1
        .globl  disable_mmu_el3
+       .globl  disable_mmu_icache_el1
        .globl  disable_mmu_icache_el3
 
 #if SUPPORT_VFP
@@ -451,11 +453,11 @@ endfunc memcpy16
 
 func disable_mmu_el3
        mov     x1, #(SCTLR_M_BIT | SCTLR_C_BIT)
-do_disable_mmu:
+do_disable_mmu_el3:
        mrs     x0, sctlr_el3
        bic     x0, x0, x1
        msr     sctlr_el3, x0
-       isb                             // ensure MMU is off
+       isb     /* ensure MMU is off */
        dsb     sy
        ret
 endfunc disable_mmu_el3
@@ -463,9 +465,31 @@ endfunc disable_mmu_el3
 
 func disable_mmu_icache_el3
        mov     x1, #(SCTLR_M_BIT | SCTLR_C_BIT | SCTLR_I_BIT)
-       b       do_disable_mmu
+       b       do_disable_mmu_el3
 endfunc disable_mmu_icache_el3
 
+/* ---------------------------------------------------------------------------
+ * Disable the MMU at EL1
+ * ---------------------------------------------------------------------------
+ */
+
+func disable_mmu_el1
+       mov     x1, #(SCTLR_M_BIT | SCTLR_C_BIT)
+do_disable_mmu_el1:
+       mrs     x0, sctlr_el1
+       bic     x0, x0, x1
+       msr     sctlr_el1, x0
+       isb     /* ensure MMU is off */
+       dsb     sy
+       ret
+endfunc disable_mmu_el1
+
+
+func disable_mmu_icache_el1
+       mov     x1, #(SCTLR_M_BIT | SCTLR_C_BIT | SCTLR_I_BIT)
+       b       do_disable_mmu_el1
+endfunc disable_mmu_icache_el1
+
 /* ---------------------------------------------------------------------------
  * Enable the use of VFP at EL3
  * ---------------------------------------------------------------------------