fix(cpus): workaround for Neoverse N2 erratum 2340933

Neoverse N2 erratum 2340933 is a Cat B erratum that applies to
revision r0p0 and is fixed in r0p1. The workaround is to set
CPUACTLR5_EL1[61] to 1.

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

Change-Id: I121add0dd35072c53392d33f049d893a5ff6354f
Signed-off-by: Bipin Ravi <bipin.ravi@arm.com>
This commit is contained in:
Bipin Ravi 2023-10-17 06:21:15 -05:00 committed by laurenw-arm
parent 6cb8be17a5
commit 68085ad482
4 changed files with 25 additions and 9 deletions

View file

@ -655,6 +655,10 @@ For Neoverse N2, the following errata build flags are defined :
CPU. This needs to be enabled for revision r0p0 of the CPU, it is fixed in CPU. This needs to be enabled for revision r0p0 of the CPU, it is fixed in
r0p1. r0p1.
- ``ERRATA_N2_2340933``: This applies errata 2340933 workaround to Neoverse-N2
CPU. This needs to be enabled for revision r0p0 of the CPU, it is fixed in
r0p1.
- ``ERRATA_N2_2346952``: This applies errata 2346952 workaround to Neoverse-N2 - ``ERRATA_N2_2346952``: This applies errata 2346952 workaround to Neoverse-N2
CPU. This needs to be enabled for revisions r0p0, r0p1 and r0p2 of the CPU, CPU. This needs to be enabled for revisions r0p0, r0p1 and r0p2 of the CPU,
it is fixed in r0p3. it is fixed in r0p3.

View file

@ -165,6 +165,13 @@ workaround_runtime_end neoverse_n2, ERRATUM(2326639)
check_erratum_ls neoverse_n2, ERRATUM(2326639), CPU_REV(0, 0) check_erratum_ls neoverse_n2, ERRATUM(2326639), CPU_REV(0, 0)
workaround_runtime_start neoverse_n2, ERRATUM(2340933), ERRATA_N2_2340933
/* Set bit 61 in CPUACTLR5_EL1 */
sysreg_bit_set NEOVERSE_N2_CPUACTLR5_EL1, BIT(61)
workaround_runtime_end neoverse_n2, ERRATUM(2340933)
check_erratum_ls neoverse_n2, ERRATUM(2340933), CPU_REV(0, 0)
workaround_runtime_start neoverse_n2, ERRATUM(2346952), ERRATA_N2_2346952 workaround_runtime_start neoverse_n2, ERRATUM(2346952), ERRATA_N2_2346952
/* Set TXREQ to STATIC and full L2 TQ size */ /* Set TXREQ to STATIC and full L2 TQ size */
mrs x1, NEOVERSE_N2_CPUECTLR2_EL1 mrs x1, NEOVERSE_N2_CPUECTLR2_EL1

View file

@ -656,10 +656,14 @@ CPU_FLAG_LIST += ERRATA_N2_2242400
# to revision r0p0 of the Neoverse N2 cpu and is fixed in r0p1. # to revision r0p0 of the Neoverse N2 cpu and is fixed in r0p1.
CPU_FLAG_LIST += ERRATA_N2_2280757 CPU_FLAG_LIST += ERRATA_N2_2280757
# Flag to apply erraturm 2326639 workaroud during powerdown. This erratum # Flag to apply erratum 2326639 workaroud during powerdown. This erratum
# applies to revision r0p0 of the Neoverse N2 cpu and is fixed in r0p1. # applies to revision r0p0 of the Neoverse N2 cpu and is fixed in r0p1.
CPU_FLAG_LIST += ERRATA_N2_2326639 CPU_FLAG_LIST += ERRATA_N2_2326639
# Flag to apply erratum 2340933 workaroud during reset. This erratum
# applies to revision r0p0 of the Neoverse N2 cpu and is fixed in r0p1.
CPU_FLAG_LIST += ERRATA_N2_2340933
# Flag to apply erratum 2346952 workaround during reset. This erratum applies # Flag to apply erratum 2346952 workaround during reset. This erratum applies
# to r0p0, r0p1, r0p2 of the Neoverse N2 cpu, it is fixed in r0p3. # to r0p0, r0p1, r0p2 of the Neoverse N2 cpu, it is fixed in r0p3.
CPU_FLAG_LIST += ERRATA_N2_2346952 CPU_FLAG_LIST += ERRATA_N2_2346952

View file

@ -350,15 +350,16 @@ struct em_cpu_list cpu_list[] = {
[9] = {2242415, 0x00, 0x00, ERRATA_N2_2242415}, [9] = {2242415, 0x00, 0x00, ERRATA_N2_2242415},
[10] = {2280757, 0x00, 0x00, ERRATA_N2_2280757}, [10] = {2280757, 0x00, 0x00, ERRATA_N2_2280757},
[11] = {2326639, 0x00, 0x00, ERRATA_N2_2326639}, [11] = {2326639, 0x00, 0x00, ERRATA_N2_2326639},
[12] = {2346952, 0x00, 0x02, ERRATA_N2_2346952}, [12] = {2340933, 0x00, 0x00, ERRATA_N2_2340933},
[13] = {2376738, 0x00, 0x00, ERRATA_N2_2376738}, [13] = {2346952, 0x00, 0x02, ERRATA_N2_2346952},
[14] = {2388450, 0x00, 0x00, ERRATA_N2_2388450}, [14] = {2376738, 0x00, 0x00, ERRATA_N2_2376738},
[15] = {2728475, 0x00, 0x02, ERRATA_N2_2728475, \ [15] = {2388450, 0x00, 0x00, ERRATA_N2_2388450},
[16] = {2728475, 0x00, 0x02, ERRATA_N2_2728475, \
ERRATA_NON_ARM_INTERCONNECT}, ERRATA_NON_ARM_INTERCONNECT},
[16] = {2743014, 0x00, 0x02, ERRATA_N2_2743014}, [17] = {2743014, 0x00, 0x02, ERRATA_N2_2743014},
[17] = {2743089, 0x00, 0x02, ERRATA_N2_2743089}, [18] = {2743089, 0x00, 0x02, ERRATA_N2_2743089},
[18] = {2779511, 0x00, 0x02, ERRATA_N2_2779511}, [19] = {2779511, 0x00, 0x02, ERRATA_N2_2779511},
[19 ... ERRATA_LIST_END] = UNDEF_ERRATA, [20 ... ERRATA_LIST_END] = UNDEF_ERRATA,
} }
}, },
#endif /* NEOVERSE_N2_H_INC */ #endif /* NEOVERSE_N2_H_INC */