summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBaruch Siach <baruch@tkos.co.il>2022-11-24 10:34:06 +0200
committerJulius Werner <jwerner@chromium.org>2022-11-29 03:35:23 +0100
commit5fb6946ad70f5c6e82502a704633bba1dd82e507 (patch)
tree435341f28f02a84fa17f3bf4469c1f8f7b1e2fd4
parentd3d2a5a484936a17a4425ea3634b1c2e64dac877 (diff)
downloadarm-trusted-firmware-5fb6946ad70f5c6e82502a704633bba1dd82e507.tar.gz
fix(console): fix crash on spin_unlock with cache disabled
Current code skips load of spinlock address when cache is disabled. The following call to spin_unlock stores into the random location that x0 points to. Move spinlock address load earlier so that x0 is always valid on spin_unlock call. Change-Id: Iac640289725dce2518f2fed483d7d36ca748ffe8 Signed-off-by: Baruch Siach <baruch@tkos.co.il>
-rw-r--r--plat/common/aarch64/crash_console_helpers.S6
1 files changed, 3 insertions, 3 deletions
diff --git a/plat/common/aarch64/crash_console_helpers.S b/plat/common/aarch64/crash_console_helpers.S
index e2950f5f7..75b420893 100644
--- a/plat/common/aarch64/crash_console_helpers.S
+++ b/plat/common/aarch64/crash_console_helpers.S
@@ -68,12 +68,12 @@ func plat_crash_console_init
mov x4, x30 /* x3 and x4 are not clobbered by spin_lock() */
mov x3, #0 /* return value */
+ adrp x0, crash_console_spinlock
+ add x0, x0, :lo12:crash_console_spinlock
+
mrs x1, sctlr_el3
tst x1, #SCTLR_C_BIT
beq skip_spinlock /* can't synchronize when cache disabled */
-
- adrp x0, crash_console_spinlock
- add x0, x0, :lo12:crash_console_spinlock
bl spin_lock
skip_spinlock: