fix(cpus): workaround for Neoverse V1 erratum 2348377

Neoverse V1 erratum 2348377 is a Cat B erratum that applies to
all revisions <= r1p1 and is fixed in r1p2. The workaround is to
set CPUACTLR5_EL1[61] to 1.

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

Change-Id: Ica402494f78811c85e56a262e1f60b09915168fe
Signed-off-by: Sona Mathew <sonarebecca.mathew@arm.com>
This commit is contained in:
Sona Mathew 2023-11-07 13:46:15 -06:00
parent 355ce0a43a
commit 71ed917331
5 changed files with 23 additions and 6 deletions

View file

@ -501,6 +501,10 @@ For Neoverse V1, the following errata build flags are defined :
CPU. This needs to be enabled for revisions r0p0, r1p0, and r1p1 and r1p2 of CPU. This needs to be enabled for revisions r0p0, r1p0, and r1p1 and r1p2 of
the CPU. the CPU.
- ``ERRATA_V1_2348377``: This applies errata 2348377 workaroud to Neoverse-V1
CPU. This needs to be enabled for revisions r0p0, r1p0 and r1p1 of the CPU.
It has been fixed in r1p2.
- ``ERRATA_V1_2372203``: This applies errata 2372203 workaround to Neoverse-V1 - ``ERRATA_V1_2372203``: This applies errata 2372203 workaround to Neoverse-V1
CPU. This needs to be enabled for revisions r0p0, r1p0 and r1p1 of the CPU. CPU. This needs to be enabled for revisions r0p0, r1p0 and r1p1 of the CPU.
It is still open. It is still open.

View file

@ -47,5 +47,6 @@
#define NEOVERSE_V1_ACTLR5_EL1 S3_0_C15_C9_0 #define NEOVERSE_V1_ACTLR5_EL1 S3_0_C15_C9_0
#define NEOVERSE_V1_ACTLR5_EL1_BIT_55 (ULL(1) << 55) #define NEOVERSE_V1_ACTLR5_EL1_BIT_55 (ULL(1) << 55)
#define NEOVERSE_V1_ACTLR5_EL1_BIT_56 (ULL(1) << 56) #define NEOVERSE_V1_ACTLR5_EL1_BIT_56 (ULL(1) << 56)
#define NEOVERSE_V1_ACTLR5_EL1_BIT_61 (ULL(1) << 61)
#endif /* NEOVERSE_V1_H */ #endif /* NEOVERSE_V1_H */

View file

@ -196,6 +196,13 @@ workaround_reset_end neoverse_v1, ERRATUM(2294912)
check_erratum_ls neoverse_v1, ERRATUM(2294912), CPU_REV(1, 2) check_erratum_ls neoverse_v1, ERRATUM(2294912), CPU_REV(1, 2)
workaround_runtime_start neoverse_v1, ERRATUM(2348377), ERRATA_V1_2348377
/* Set bit 61 in CPUACTLR5_EL1 */
sysreg_bit_set NEOVERSE_V1_ACTLR5_EL1, NEOVERSE_V1_ACTLR5_EL1_BIT_61
workaround_runtime_end neoverse_v1, ERRATUM(2348377)
check_erratum_ls neoverse_v1, ERRATUM(2348377), CPU_REV(1, 1)
workaround_reset_start neoverse_v1, ERRATUM(2372203), ERRATA_V1_2372203 workaround_reset_start neoverse_v1, ERRATUM(2372203), ERRATA_V1_2372203
/* Set bit 40 in ACTLR2_EL1 */ /* Set bit 40 in ACTLR2_EL1 */
sysreg_bit_set NEOVERSE_V1_ACTLR2_EL1, NEOVERSE_V1_ACTLR2_EL1_BIT_40 sysreg_bit_set NEOVERSE_V1_ACTLR2_EL1, NEOVERSE_V1_ACTLR2_EL1_BIT_40

View file

@ -520,6 +520,10 @@ CPU_FLAG_LIST += ERRATA_V1_2216392
# to revisions r0p0, r1p0, and r1p1 and r1p2 of the Neoverse V1 cpu and is still open. # to revisions r0p0, r1p0, and r1p1 and r1p2 of the Neoverse V1 cpu and is still open.
CPU_FLAG_LIST += ERRATA_V1_2294912 CPU_FLAG_LIST += ERRATA_V1_2294912
# Flag to apply erratum 2348377 workaround during reset. This erratum applies
# to revisions r0p0, r1p0 and r1p1 of the Neoverse V1 cpu and is fixed in r1p2.
CPU_FLAG_LIST += ERRATA_V1_2348377
# Flag to apply erratum 2372203 workaround during reset. This erratum applies # Flag to apply erratum 2372203 workaround during reset. This erratum applies
# to revisions r0p0, r1p0 and r1p1 of the Neoverse V1 cpu and is still open. # to revisions r0p0, r1p0 and r1p1 of the Neoverse V1 cpu and is still open.
CPU_FLAG_LIST += ERRATA_V1_2372203 CPU_FLAG_LIST += ERRATA_V1_2372203

View file

@ -297,13 +297,14 @@ struct em_cpu_list cpu_list[] = {
[8] = {2139242, 0x00, 0x11, ERRATA_V1_2139242}, [8] = {2139242, 0x00, 0x11, ERRATA_V1_2139242},
[9] = {2216392, 0x10, 0x11, ERRATA_V1_2216392}, [9] = {2216392, 0x10, 0x11, ERRATA_V1_2216392},
[10] = {2294912, 0x00, 0x12, ERRATA_V1_2294912}, [10] = {2294912, 0x00, 0x12, ERRATA_V1_2294912},
[11] = {2372203, 0x00, 0x11, ERRATA_V1_2372203}, [11] = {2348377, 0x00, 0x11, ERRATA_V1_2348377},
[12] = {2701953, 0x00, 0x11, ERRATA_V1_2701953, \ [12] = {2372203, 0x00, 0x11, ERRATA_V1_2372203},
[13] = {2701953, 0x00, 0x11, ERRATA_V1_2701953, \
ERRATA_NON_ARM_INTERCONNECT}, ERRATA_NON_ARM_INTERCONNECT},
[13] = {2743093, 0x00, 0x12, ERRATA_V1_2743093}, [14] = {2743093, 0x00, 0x12, ERRATA_V1_2743093},
[14] = {2743233, 0x00, 0x12, ERRATA_V1_2743233}, [15] = {2743233, 0x00, 0x12, ERRATA_V1_2743233},
[15] = {2779461, 0x00, 0x12, ERRATA_V1_2779461}, [16] = {2779461, 0x00, 0x12, ERRATA_V1_2779461},
[16 ... ERRATA_LIST_END] = UNDEF_ERRATA, [17 ... ERRATA_LIST_END] = UNDEF_ERRATA,
} }
}, },
#endif /* NEOVERSE_V1_H_INC */ #endif /* NEOVERSE_V1_H_INC */