armv8: Flush dcache before switching to EL2
PATCH 1/1 armv8: Flush dcache before switching to EL2
For ARMv8, U-boot has been running at EL3 with cache and MMU enabled. Without proper setup for EL2, cache and MMU are both disabled (out of reset). Before switching, we need to flush the dcache to make sure the data is in the main memory.
--- arch/arm/lib/bootm.c | 1 + 1 file changed, 1 insertion(+)
arch/arm/lib/bootm.c +1 -0
@@ -199,6 +199,7 @@ static void do_nonsec_virt_switch(void)#ifdef CONFIG_ARM64 smp_kick_all_cpus (); +flush_dcache_all ();/* flush cache before swtiching to EL2 */ armv8_switch_to_el2 ();#ifdef CONFIG_ARMV8_SWITCH_TO_EL1 armv8_switch_to_el1 ();
Signature · 1 line
1.7.9.5
PATCH 1/1 armv8: Flush dcache before switching to EL2
Quoted 34 lines
-----Original Messages-----
From: "York Sun" <[email protected]>
Sent Time: 2014-04-01 05:40:32 (Tuesday)
To: albert.u.boot at aribaud.net
Cc: u-boot at lists.denx.de, "York Sun" <[email protected]>
Subject: [U-Boot] [PATCH] armv8: Flush dcache before switching to EL2For ARMv8, U-boot has been running at EL3 with cache and MMU enabled. Without proper setup for EL2, cache and MMU are both disabled (out of reset). Before switching, we need to flush the dcache to make sure the data is in the main memory.
Signed-off-by York Sun <[email protected]>--- arch/arm/lib/bootm.c | 1 + 1 file changed, 1 insertion(+)arch/arm/lib/bootm.c +1
-0@@ -199,6 +199,7 @@ static void do_nonsec_virt_switch(void)#ifdef CONFIG_ARM64 smp_kick_all_cpus (); +flush_dcache_all ();/* flush cache before swtiching to EL2 */ armv8_switch_to_el2 ();#ifdef CONFIG_ARMV8_SWITCH_TO_EL1 armv8_switch_to_el1 ();Signature · 1 line
1.7.9.5
fine!
PATCH 1/1 armv8: Flush dcache before switching to EL2
In reply to York SunHi York,
Quoted 15 lines · York Sun
For ARMv8, U-boot has been running at EL3 with cache and MMU enabled. Without proper setup for EL2, cache and MMU are both disabled (out of reset). Before switching, we need to flush the dcache to make sure the data is in the main memory.
Signed-off-by York Sun <[email protected]>--- arch/arm/lib/bootm.c | 1 + 1 file changed, 1 insertion(+)arch/arm/lib/bootm.c +0
-0
arch/arm/lib/bootm.c static void do_nonsec_virt_switch(void) · line 205
Quoted 7 lines
arch/arm/lib/bootm.c +1
-0@@ -199,6 +199,7 @@ static void do_nonsec_virt_switch(void)#ifdef CONFIG_ARM64 smp_kick_all_cpus (); +flush_dcache_all ();/* flush cache before swtiching to EL2 */ armv8_switch_to_el2 ();#ifdef CONFIG_ARMV8_SWITCH_TO_EL1 armv8_switch_to_el1 ();
Applied as a bugfix to u-boot-arm/master, thanks!
Amicalement,
Signature · 1 line
Albert.