summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLauren Wehrmeister <lauren.wehrmeister@arm.com>2026-01-06 21:42:47 +0000
committerTrustedFirmware Code Review <review@review.trustedfirmware.org>2026-01-06 21:42:47 +0000
commit0eaf5de8e0a0678ab57602f8e804bd35245fcc2b (patch)
tree53cf548b2a2d0abb821a875533050a96251f56ca
parentea5a7ab16ccdceac1229b1d61d44b8d79bf7a2c7 (diff)
parent925661ad87d677f505a5f1b3742e47d9515d2585 (diff)
downloadarm-trusted-firmware-0eaf5de8e0a0678ab57602f8e804bd35245fcc2b.tar.gz
arm-trusted-firmware-0eaf5de8e0a0678ab57602f8e804bd35245fcc2b.zip
Merge changes from topic "xl/n2-errata" into integration
* changes: fix(cpus): workaround for Neoverse-N2 erratum 2138953 fix(cpus): workaround for Neoverse-N2 erratum 4302970 fix(cpus): workaround for Neoverse-N2 erratum 3888123 refactor(cpus): reorder the errratum build flag for Neoverse-N2
-rw-r--r--docs/design/cpu-specific-build-macros.rst20
-rw-r--r--lib/cpus/aarch64/neoverse_n2.S22
-rw-r--r--lib/cpus/cpu-ops.mk26
3 files changed, 55 insertions, 13 deletions
diff --git a/docs/design/cpu-specific-build-macros.rst b/docs/design/cpu-specific-build-macros.rst
index 8c65b171c..334f3f60e 100644
--- a/docs/design/cpu-specific-build-macros.rst
+++ b/docs/design/cpu-specific-build-macros.rst
@@ -759,21 +759,25 @@ For Neoverse N2, the following errata build flags are defined :
- ``ERRATA_N2_2025414``: This applies errata 2025414 workaround to Neoverse-N2
CPU. This needs to be enabled for revision r0p0 of the CPU and is fixed in r0p1.
-- ``ERRATA_N2_2189731``: This applies errata 2189731 workaround to Neoverse-N2
- CPU. This needs to be enabled for revision r0p0 of the CPU and is fixed in r0p1.
+- ``ERRATA_N2_2138953``: This applies errata 2138953 workaround to Neoverse-N2
+ CPU. This needs to be enabled for revisions r0p0, r0p1, r0p2 and r0p3 of the
+ Neoverse N2 cpu and is still open.
- ``ERRATA_N2_2138956``: This applies errata 2138956 workaround to Neoverse-N2
CPU. This needs to be enabled for revision r0p0 of the CPU and is fixed in r0p1.
-- ``ERRATA_N2_2242415``: This applies errata 2242415 workaround to Neoverse-N2
+- ``ERRATA_N2_2138958``: This applies errata 2138958 workaround to Neoverse-N2
CPU. This needs to be enabled for revision r0p0 of the CPU and is fixed in r0p1.
-- ``ERRATA_N2_2138958``: This applies errata 2138958 workaround to Neoverse-N2
+- ``ERRATA_N2_2189731``: This applies errata 2189731 workaround to Neoverse-N2
CPU. This needs to be enabled for revision r0p0 of the CPU and is fixed in r0p1.
- ``ERRATA_N2_2242400``: This applies errata 2242400 workaround to Neoverse-N2
CPU. This needs to be enabled for revision r0p0 of the CPU and is fixed in r0p1.
+- ``ERRATA_N2_2242415``: This applies errata 2242415 workaround to Neoverse-N2
+ CPU. This needs to be enabled for revision r0p0 of the CPU and is fixed in r0p1.
+
- ``ERRATA_N2_2280757``: This applies errata 2280757 workaround to Neoverse-N2
CPU. This needs to be enabled for revision r0p0 of the CPU and is fixed in r0p1.
@@ -821,6 +825,14 @@ 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_3888123``: This applies errata 3888123 workaround to Neoverse-N2
+ 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 df088c426..26fc419ab 100644
--- a/lib/cpus/aarch64/neoverse_n2.S
+++ b/lib/cpus/aarch64/neoverse_n2.S
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2025, Arm Limited. All rights reserved.
+ * Copyright (c) 2020-2026, Arm Limited. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
@@ -79,6 +79,12 @@ workaround_reset_end neoverse_n2, ERRATUM(2067956)
check_erratum_ls neoverse_n2, ERRATUM(2067956), CPU_REV(0, 0)
+workaround_runtime_start neoverse_n2, ERRATUM(2138953), ERRATA_N2_2138953
+ sysreg_bit_set NEOVERSE_N2_CPUACTLR2_EL1, BIT(29)
+workaround_runtime_end neoverse_n2, ERRATUM(2138953)
+
+check_erratum_ls neoverse_n2, ERRATUM(2138953), CPU_REV(0, 3)
+
workaround_reset_start neoverse_n2, ERRATUM(2138956), ERRATA_N2_2138956
/* Apply instruction patching sequence */
ldr x0,=0x3
@@ -101,7 +107,6 @@ workaround_reset_end neoverse_n2, ERRATUM(2138956)
check_erratum_ls neoverse_n2, ERRATUM(2138956), CPU_REV(0, 0)
-
workaround_reset_start neoverse_n2, ERRATUM(2138958), ERRATA_N2_2138958
/* Apply instruction patching sequence */
sysreg_bit_set NEOVERSE_N2_CPUACTLR5_EL1, NEOVERSE_N2_CPUACTLR5_EL1_BIT_13
@@ -229,6 +234,18 @@ add_erratum_entry neoverse_n2, ERRATUM(3701773), ERRATA_N2_3701773
check_erratum_ls neoverse_n2, ERRATUM(3701773), CPU_REV(0, 3)
+workaround_reset_start neoverse_n2, ERRATUM(3888123), ERRATA_N2_3888123
+ sysreg_bit_set NEOVERSE_N2_CPUACTLR2_EL1, BIT(22)
+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
/*
@@ -281,6 +298,7 @@ cpu_reset_func_start neoverse_n2
#endif
#if NEOVERSE_N2_PREFETCHER_DISABLE
/* Disable region prefetcher for L2 cache perf measurement */
+ apply_erratum neoverse_n2, ERRATUM(2138953), ERRATA_N2_2138953
sysreg_bit_set NEOVERSE_N2_CPUECTLR_EL1, NEOVERSE_N2_CPUECTLR_EL1_PFDIS_BIT
#endif
cpu_reset_func_end neoverse_n2
diff --git a/lib/cpus/cpu-ops.mk b/lib/cpus/cpu-ops.mk
index b5ed8f6cc..095dfd496 100644
--- a/lib/cpus/cpu-ops.mk
+++ b/lib/cpus/cpu-ops.mk
@@ -744,26 +744,30 @@ CPU_FLAG_LIST += ERRATA_N2_2067956
# to revision r0p0 of the Neoverse N2 cpu and is fixed in r0p1.
CPU_FLAG_LIST += ERRATA_N2_2025414
-# Flag to apply erratum 2189731 workaround during reset. This erratum applies
-# to revision r0p0 of the Neoverse N2 cpu and is fixed in r0p1.
-CPU_FLAG_LIST += ERRATA_N2_2189731
+# Flag to apply erratum 2138953 workaround during runtime. This erratum applies
+# to r0p0, r0p1, r0p2 and r0p3 of the Neoverse N2 cpu and is still open.
+CPU_FLAG_LIST += ERRATA_N2_2138953
# Flag to apply erratum 2138956 workaround during reset. This erratum applies
# to revision r0p0 of the Neoverse N2 cpu and is fixed in r0p1.
CPU_FLAG_LIST += ERRATA_N2_2138956
-# Flag to apply erratum 2242415 workaround during reset. This erratum applies
-# to revision r0p0 of the Neoverse N2 cpu and is fixed in r0p1.
-CPU_FLAG_LIST += ERRATA_N2_2242415
-
# Flag to apply erratum 2138958 workaround during reset. This erratum applies
# to revision r0p0 of the Neoverse N2 cpu and is fixed in r0p1.
CPU_FLAG_LIST += ERRATA_N2_2138958
+# Flag to apply erratum 2189731 workaround during reset. This erratum applies
+# to revision r0p0 of the Neoverse N2 cpu and is fixed in r0p1.
+CPU_FLAG_LIST += ERRATA_N2_2189731
+
# Flag to apply erratum 2242400 workaround during reset. This erratum applies
# to revision r0p0 of the Neoverse N2 cpu and is fixed in r0p1.
CPU_FLAG_LIST += ERRATA_N2_2242400
+# Flag to apply erratum 2242415 workaround during reset. This erratum applies
+# to revision r0p0 of the Neoverse N2 cpu and is fixed in r0p1.
+CPU_FLAG_LIST += ERRATA_N2_2242415
+
# Flag to apply erratum 2280757 workaround during reset. This erratum applies
# to revision r0p0 of the Neoverse N2 cpu and is fixed in r0p1.
CPU_FLAG_LIST += ERRATA_N2_2280757
@@ -814,6 +818,14 @@ CPU_FLAG_LIST += ERRATA_N2_3324339
# of the Neoverse N2 cpu and is still open.
CPU_FLAG_LIST += ERRATA_N2_3701773
+# Flag to apply erratum 3888123 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_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