From 4bfa29e94788df12c5845adeb8d5fb915db89541 Mon Sep 17 00:00:00 2001 From: Julius Werner Date: Thu, 20 Aug 2015 14:36:34 -0700 Subject: arm64: xcompile: Add support for A53 erratum 843419 This patch adds support to enable a linker workaround to a hardware erratum on some early Cortex-A53 revisions. Since the linker option was added very recently, we use xcompile to test whether the toolchain supports it first. It is also guarded by a Kconfig since only a few ARM64 SoCs will need this and it incurs a performance penalty. BRANCH=none BUG=none TEST=Turned it on or off for Smaug and confirmed that it (dis)appeared in verbose make output accordingly. Change-Id: I01c9642d3cf489134645f0db6f79f1c788ddb00d Signed-off-by: Patrick Georgi Original-Commit-Id: 57128785760c4dfa32d6e6d764756443a9323cb7 Original-Change-Id: Ia5dd124f484e38460d75fb864304e7e8b18d16b7 Original-Signed-off-by: Julius Werner Original-Reviewed-on: https://chromium-review.googlesource.com/294745 Original-Reviewed-by: Patrick Georgi Reviewed-on: http://review.coreboot.org/11403 Tested-by: build bot (Jenkins) Reviewed-by: Stefan Reinauer Reviewed-by: Julius Werner --- payloads/libpayload/arch/arm64/Kconfig | 8 ++++++++ payloads/libpayload/bin/lpgcc | 6 ++++++ 2 files changed, 14 insertions(+) (limited to 'payloads/libpayload') diff --git a/payloads/libpayload/arch/arm64/Kconfig b/payloads/libpayload/arch/arm64/Kconfig index d2f8e5675a..a28a1f27d2 100644 --- a/payloads/libpayload/arch/arm64/Kconfig +++ b/payloads/libpayload/arch/arm64/Kconfig @@ -33,6 +33,14 @@ config ARCH_SPECIFIC_OPTIONS # dummy def_bool y select LITTLE_ENDIAN +config ARM64_A53_ERRATUM_843419 + bool "Enable Cortex-A53 erratum 843419 linker workaround" + default n + help + Some early Cortex-A53 revisions had a hardware bug that results in + incorrect address calculations in rare cases. This option enables a + linker workaround to avoid those cases if your toolchain supports it. + config DMA_LIM_EXCL hex "DMA address limit(exclusive) in MiB units" default 0x1000 diff --git a/payloads/libpayload/bin/lpgcc b/payloads/libpayload/bin/lpgcc index 17d8edaf03..8d0260b895 100755 --- a/payloads/libpayload/bin/lpgcc +++ b/payloads/libpayload/bin/lpgcc @@ -181,6 +181,12 @@ else echo "Could not find head.o" exit 1 fi + + if grep -q ARM64_A53_ERRATUM_843419=y $BASE/../libpayload.config && + grep -q fix-cortex-a53-843419 $BASE/../libpayload.xcompile; then + _LDFLAGS+=" -Wl,--fix-cortex-a53-843419" + fi + if [ $DEBUGME -eq 1 ]; then echo "$DEFAULT_CC $_LDFLAGS $HEAD_O $CMDLINE $_CFLAGS -lpayload $_LIBGCC" fi -- cgit v1.2.3