fix(cpus): workaround for Cortex-X2 erratum 1916945

Cortex-X2 erratum 1916945 is a Cat B erratum that applies to
revisions r0p0 and r1p0 and is fixed in r2p0.

The workaround is to set CPUECTLR_EL1[8]. This has a small
performance impact (<0.5%).

SDEN documentation:
https://developer.arm.com/documentation/SDEN-1775100/latest

Change-Id: If810b1d0a07c43b3e1aa70d2ec88c1dcfa6f735f
Signed-off-by: John Powell <john.powell@arm.com>
This commit is contained in:
John Powell 2025-07-11 19:27:15 -05:00
parent ce64ea6ecb
commit ff879c5280
3 changed files with 14 additions and 0 deletions

View File

@ -744,6 +744,10 @@ For Cortex-X2, the following errata build flags are defined :
- ``ERRATA_X2_1901946``: This applies errata 1901946 workaround to Cortex-X2 - ``ERRATA_X2_1901946``: This applies errata 1901946 workaround to Cortex-X2
CPU. This needs to be enabled only for r1p0, it is fixed in r2p0. CPU. This needs to be enabled only for r1p0, it is fixed in r2p0.
- ``ERRATA_X2_1916945``: This applies errata 1916945 workaround to Cortex-X2
CPU. This needs to be enabled for revisions r0p0 and r1p0, it is fixed in
r2p0.
- ``ERRATA_X2_2002765``: This applies errata 2002765 workaround to Cortex-X2 - ``ERRATA_X2_2002765``: This applies errata 2002765 workaround to Cortex-X2
CPU. This needs to be enabled for revisions r0p0, r1p0, and r2p0 of the CPU, CPU. This needs to be enabled for revisions r0p0, r1p0, and r2p0 of the CPU,
it is still open. it is still open.

View File

@ -37,6 +37,12 @@ workaround_reset_end cortex_x2, ERRATUM(1901946)
check_erratum_range cortex_x2, ERRATUM(1901946), CPU_REV(1, 0), CPU_REV(1, 0) check_erratum_range cortex_x2, ERRATUM(1901946), CPU_REV(1, 0), CPU_REV(1, 0)
workaround_reset_start cortex_x2, ERRATUM(1916945), ERRATA_X2_1916945
sysreg_bit_set CORTEX_X2_CPUECTLR_EL1, BIT(8)
workaround_reset_end cortex_x2, ERRATUM(1916945)
check_erratum_ls cortex_x2, ERRATUM(1916945), CPU_REV(1, 0)
workaround_reset_start cortex_x2, ERRATUM(2002765), ERRATA_X2_2002765 workaround_reset_start cortex_x2, ERRATUM(2002765), ERRATA_X2_2002765
ldr x0, =0x6 ldr x0, =0x6
msr S3_6_C15_C8_0, x0 /* CPUPSELR_EL3 */ msr S3_6_C15_C8_0, x0 /* CPUPSELR_EL3 */

View File

@ -746,6 +746,10 @@ CPU_FLAG_LIST += ERRATA_N3_3699563
# only to revision r1p0 of the Cortex-X2 cpu, it is fixed in r2p0. # only to revision r1p0 of the Cortex-X2 cpu, it is fixed in r2p0.
CPU_FLAG_LIST += ERRATA_X2_1901946 CPU_FLAG_LIST += ERRATA_X2_1901946
# Flag to apply erratum 1916945 workaround during reset. This erratum applies
# to revisions r0p0 and r1p0 of the Cortex-X2 cpu, it is fixed in r2p0.
CPU_FLAG_LIST += ERRATA_X2_1916945
# Flag to apply erratum 2002765 workaround during reset. This erratum applies # Flag to apply erratum 2002765 workaround during reset. This erratum applies
# to revisions r0p0, r1p0, and r2p0 of the Cortex-X2 cpu and is still open. # to revisions r0p0, r1p0, and r2p0 of the Cortex-X2 cpu and is still open.
CPU_FLAG_LIST += ERRATA_X2_2002765 CPU_FLAG_LIST += ERRATA_X2_2002765