summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXialin Liu <xialin.liu@arm.com>2025-12-31 10:23:22 -0600
committerXialin Liu <xialin.liu@arm.com>2026-01-06 11:38:51 -0600
commit420a05916d163999ef5271243535dd1e497850ad (patch)
tree1ab33246b9de5fd1b7d5ec4ad91f57b6ffe5e414
parent35f001256250782a9ef6af0c7218053bd485995a (diff)
downloadarm-trusted-firmware-420a05916d163999ef5271243535dd1e497850ad.tar.gz
arm-trusted-firmware-420a05916d163999ef5271243535dd1e497850ad.zip
fix(cpus): workaround for Neoverse-N2 erratum 4302970
Neoverse-N2 erratum 4302970 that applies to revisions r0p0, r0p1, r0p2, r0p3, and is still open. This erratum can be avoided by setting CPUACTLR5_EL1[50] to 1. SDEN documentation: https://developer.arm.com/documentation/SDEN-1982442/latest Change-Id: I2436b11a36be204d549522f1176fcd49658c044c Signed-off-by: Xialin Liu <xialin.liu@arm.com>
-rw-r--r--docs/design/cpu-specific-build-macros.rst4
-rw-r--r--lib/cpus/aarch64/neoverse_n2.S6
-rw-r--r--lib/cpus/cpu-ops.mk4
3 files changed, 14 insertions, 0 deletions
diff --git a/docs/design/cpu-specific-build-macros.rst b/docs/design/cpu-specific-build-macros.rst
index da2b596d1..d131754df 100644
--- a/docs/design/cpu-specific-build-macros.rst
+++ b/docs/design/cpu-specific-build-macros.rst
@@ -789,6 +789,10 @@ For Neoverse N2, the following errata build flags are defined :
CPU. This needs to be enabled for revisions r0p0, r0p1, r0p2, r0p3 and is
still open.
+- ``ERRATA_N2_4302970``: This applies errata 4302970 workaround to Neoverse-N2
+ CPU. This needs to be enabled for revisions r0p0, r0p1, r0p2, r0p3 and is
+ still open.
+
For Neoverse N3, the following errata build flags are defined :
- ``ERRATA_N3_3456111``: This applies errata 3456111 workaround to Neoverse-N3
diff --git a/lib/cpus/aarch64/neoverse_n2.S b/lib/cpus/aarch64/neoverse_n2.S
index a69223e19..57b39619a 100644
--- a/lib/cpus/aarch64/neoverse_n2.S
+++ b/lib/cpus/aarch64/neoverse_n2.S
@@ -235,6 +235,12 @@ workaround_reset_end neoverse_n2, ERRATUM(3888123)
check_erratum_ls neoverse_n2, ERRATUM(3888123), CPU_REV(0, 3)
+workaround_reset_start neoverse_n2, ERRATUM(4302970), ERRATA_N2_4302970
+ sysreg_bit_set NEOVERSE_N2_CPUACTLR5_EL1, BIT(50)
+workaround_reset_end neoverse_n2, ERRATUM(4302970)
+
+check_erratum_ls neoverse_n2, ERRATUM(4302970), CPU_REV(0, 3)
+
workaround_reset_start neoverse_n2, CVE(2022,23960), WORKAROUND_CVE_2022_23960
#if IMAGE_BL31
/*
diff --git a/lib/cpus/cpu-ops.mk b/lib/cpus/cpu-ops.mk
index e241c0d5b..a8e01fef5 100644
--- a/lib/cpus/cpu-ops.mk
+++ b/lib/cpus/cpu-ops.mk
@@ -790,6 +790,10 @@ CPU_FLAG_LIST += ERRATA_N2_3701773
# to r0p0, r0p1, r0p2 and r0p3 of the Neoverse N2 cpu and is still open.
CPU_FLAG_LIST += ERRATA_N2_3888123
+# Flag to apply erratum 4302970 workaround during reset. This erratum applies
+# to r0p0, r0p1, r0p2 and r0p3 of the Neoverse N2 cpu and is still open.
+CPU_FLAG_LIST += ERRATA_N2_4302970
+
# Flag to apply erratum 3456111 workaround during reset. This erratum applies
# to revisions r0p0 and r0p1 of the Neoverse N3 cpu and is still open.
CPU_FLAG_LIST += ERRATA_N3_3456111