summaryrefslogtreecommitdiff
path: root/arch/arm/config.mk
diff options
context:
space:
mode:
authorSamuel Holland <samuel@sholland.org>2021-08-21 19:54:02 -0500
committerTom Rini <trini@konsulko.com>2021-09-02 11:19:58 -0400
commitf43312c974eaeb7301cb2638aa4ab05ed7ca4c44 (patch)
tree435cb510829dde1f9f7d6c68f68a6f427172f458 /arch/arm/config.mk
parente0bd6f31ce41771964b64dc86dcd976c8bdb116a (diff)
ARM: Prevent the compiler from using NEON registers
For ARMv8-A, NEON is standard, so the compiler can use it even when no special target flags are provided. For example, it can use stores from NEON registers to zero-initialize large structures. GCC 11 decides to do this inside the DRAM init code for the Allwinner H6. However, GCC 11 has a bug where it generates misaligned NEON register stores even with -mstrict-align. Since the MMU is not enabled this early in SPL, the misaligned store causes an exception and breaks booting. Work around this issue by restricting the compiler to using GPRs only, not vector registers. This prevents any future surprises relating to NEON use as well. Signed-off-by: Samuel Holland <samuel@sholland.org> Acked-by: Andre Przywara <andre.przywara@arm.com>
Diffstat (limited to 'arch/arm/config.mk')
-rw-r--r--arch/arm/config.mk1
1 files changed, 1 insertions, 0 deletions
diff --git a/arch/arm/config.mk b/arch/arm/config.mk
index b684d8b416..b107b1af27 100644
--- a/arch/arm/config.mk
+++ b/arch/arm/config.mk
@@ -25,6 +25,7 @@ endif
PLATFORM_RELFLAGS += -fno-common -ffixed-r9
PLATFORM_RELFLAGS += $(call cc-option, -msoft-float) \
+ $(call cc-option,-mgeneral-regs-only) \
$(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,))
# LLVM support