[PATCH] arm64: issue ISB after updating system registers
Volodymyr Babchuk
Volodymyr_Babchuk at epam.com
Wed Jun 17 12:23:21 CEST 2020
ARM Architecture reference manual clearly states that PE pipeline
should be flushed after any change to system registers. Failing to
do so can lead to spurious errors, like synchronous exception when
accessing FPU registers. This is very prominent on CPUs with long
instruction pipeline, like Cortex A72.
This change fixes the following U-Boot panic:
"Synchronous Abort" handler, esr 0x1fe00000
elr: 00000000800948cc lr : 0000000080091e04
x0 : 00000000801ffdc8 x1 : 00000000000000c8
x2 : 00000000800979d4 x3 : 00000000801ffc60
x4 : 00000000801ffd40 x5 : ffffff80ffffffd8
x6 : 00000000801ffd70 x7 : 00000000801ffd70
x8 : 000000000000000a x9 : 0000000000000000
x10: 0000000000000044 x11: 0000000000000000
x12: 0000000000000000 x13: 0000000000000000
x14: 0000000000000000 x15: 0000000000000000
x16: 000000008008b2e0 x17: 0000000000000000
x18: 00000000801ffec0 x19: 00000000800957b0
x20: 00000000000000c8 x21: 00000000801ffdc8
x22: 000000008009909e x23: 0000000000000000
x24: 0000000000000000 x25: 0000000000000000
x26: 0000000000000000 x27: 0000000000000000
x28: 0000000000000000 x29: 00000000801ffc50
Code: a94417e4 a90217e4 a9051fe6 a90617e4 (3d801fe0)
While executing instruction
str q0, [sp, #112]
in vsnprintf() prologue. This panic was observed on Cortex A72 so far.
Also, this probably the right fix for the issue workarounded in the
commit 45f41c13 ("ARM: uniphier: add weird workaround code for LD20")
Signed-off-by: Volodymyr Babchuk <volodymyr_babchuk at epam.com>
CC: Tom Rini <trini at konsulko.com>
CC: Masahiro Yamada <yamada.masahiro at socionext.com>
---
arch/arm/cpu/armv8/start.S | 1 +
1 file changed, 1 insertion(+)
diff --git a/arch/arm/cpu/armv8/start.S b/arch/arm/cpu/armv8/start.S
index 99d126660d..eb1290ad29 100644
--- a/arch/arm/cpu/armv8/start.S
+++ b/arch/arm/cpu/armv8/start.S
@@ -120,6 +120,7 @@ pie_fixup_done:
mov x0, #3 << 20
msr cpacr_el1, x0 /* Enable FP/SIMD */
0:
+ isb
/*
* Enable SMPEN bit for coherency.
--
2.26.2
More information about the U-Boot
mailing list