[coreboot-gerrit] New patch to review for coreboot: ada54a9 libpayload arm64: fix mmu_disable() cache problem

Patrick Georgi (pgeorgi@google.com) gerrit at coreboot.org
Fri Mar 20 10:34:26 CET 2015


Patrick Georgi (pgeorgi at google.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/8799

-gerrit

commit ada54a9805586db1ff33107f9537d9a1d313a3ce
Author: HC Yen <hc.yen at mediatek.com>
Date:   Mon Jan 12 18:53:01 2015 +0800

    libpayload arm64: fix mmu_disable() cache problem
    
    The raw_write_sctlr_current() cannot be used in mmu_disable() because
    it pushes some registers to cached stack, and then just after cache
    disabled, the value was gone.
    
    BRANCH=none
    BUG=none
    TEST=build and boot on mt8173-evb
    
    Change-Id: I512405b7917f27d16bdd3c51d9459827ad714e67
    Signed-off-by: Patrick Georgi <pgeorgi at chromium.org>
    Original-Commit-Id: aafe64922cc4cd01ecb099db106d04538e3e57ff
    Original-Change-Id: I0dda8518d14c46fae1fe76e3629bd4ee81c1e0ee
    Original-Signed-off-by: HC Yen <hc.yen at mediatek.com>
    Original-Reviewed-on: https://chromium-review.googlesource.com/240323
    Original-Reviewed-by: Aaron Durbin <adurbin at chromium.org>
---
 payloads/libpayload/arch/arm64/mmu.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/payloads/libpayload/arch/arm64/mmu.c b/payloads/libpayload/arch/arm64/mmu.c
index 86d9fc5..da2127d 100644
--- a/payloads/libpayload/arch/arm64/mmu.c
+++ b/payloads/libpayload/arch/arm64/mmu.c
@@ -332,9 +332,10 @@ static uint32_t is_mmu_enabled(void)
  */
 void mmu_disable(void)
 {
+	uint32_t el = get_current_el();
 	uint32_t sctlr;
 
-	sctlr = raw_read_sctlr_current();
+	sctlr = raw_read_sctlr(el);
 	sctlr &= ~(SCTLR_C | SCTLR_M | SCTLR_I);
 
 	tlbiall_current();
@@ -343,7 +344,7 @@ void mmu_disable(void)
 	dsb();
 	isb();
 
-	raw_write_sctlr_current(sctlr);
+	raw_write_sctlr(sctlr, el);
 
 	dcache_clean_invalidate_all();
 	dsb();



More information about the coreboot-gerrit mailing list