Merge "fix(errata): workaround for Neoverse-N2 erratum 2376738" into integration

This commit is contained in:
Bipin Ravi 2022-08-18 01:04:51 +02:00 committed by TrustedFirmware Code Review
commit 25c9a4c820
4 changed files with 51 additions and 0 deletions

View file

@ -516,6 +516,10 @@ For Neoverse N2, the following errata build flags are defined :
- ``ERRATA_N2_2280757``: This applies errata 2280757 workaround to Neoverse-N2 - ``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 still open. CPU. This needs to be enabled for revision r0p0 of the CPU and is still open.
- ``ERRATA_N2_2376738``: This applies errata 2376738 workaround to Neoverse-N2
CPU. This needs to be enabled for revision r0p0 of the CPU, it is fixed in
r0p1.
- ``ERRATA_N2_2388450``: This applies errata 2388450 workaround to Neoverse-N2 - ``ERRATA_N2_2388450``: This applies errata 2388450 workaround to Neoverse-N2
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.

View file

@ -37,6 +37,7 @@
* CPU Auxiliary Control register 2 specific definitions. * CPU Auxiliary Control register 2 specific definitions.
******************************************************************************/ ******************************************************************************/
#define NEOVERSE_N2_CPUACTLR2_EL1 S3_0_C15_C1_1 #define NEOVERSE_N2_CPUACTLR2_EL1 S3_0_C15_C1_1
#define NEOVERSE_N2_CPUACTLR2_EL1_BIT_0 (ULL(1) << 0)
#define NEOVERSE_N2_CPUACTLR2_EL1_BIT_2 (ULL(1) << 2) #define NEOVERSE_N2_CPUACTLR2_EL1_BIT_2 (ULL(1) << 2)
#define NEOVERSE_N2_CPUACTLR2_EL1_BIT_40 (ULL(1) << 40) #define NEOVERSE_N2_CPUACTLR2_EL1_BIT_40 (ULL(1) << 40)

View file

@ -338,6 +338,38 @@ func check_errata_2280757
b cpu_rev_var_ls b cpu_rev_var_ls
endfunc check_errata_2280757 endfunc check_errata_2280757
/* --------------------------------------------------
* Errata Workaround for Neoverse N2 Erratum 2376738.
* This applies to revision r0p0 of Neoverse N2,
* fixed in r0p1.
* Inputs:
* x0: variant[4:7] and revision[0:3] of current CPU.
* Shall clobber: x0-x1, x17
* --------------------------------------------------
*/
func errata_n2_2376738_wa
mov x17, x30
bl check_errata_2376738
cbz x0, 1f
/* Set CPUACTLR2_EL1[0] to 1 to force PLDW/PFRM
* ST to behave like PLD/PFRM LD and not cause
* invalidations to other PE caches.
*/
mrs x1, NEOVERSE_N2_CPUACTLR2_EL1
orr x1, x1, NEOVERSE_N2_CPUACTLR2_EL1_BIT_0
msr NEOVERSE_N2_CPUACTLR2_EL1, x1
1:
ret x17
endfunc errata_n2_2376738_wa
func check_errata_2376738
/* Applies to r0p0, fixed in r0p1 */
mov x1, 0x00
b cpu_rev_var_ls
endfunc check_errata_2376738
/* -------------------------------------------------- /* --------------------------------------------------
* Errata Workaround for Neoverse N2 Erratum 2388450. * Errata Workaround for Neoverse N2 Erratum 2388450.
* This applies to revision r0p0 of Neoverse N2, * This applies to revision r0p0 of Neoverse N2,
@ -447,6 +479,11 @@ func neoverse_n2_reset_func
bl errata_n2_2280757_wa bl errata_n2_2280757_wa
#endif #endif
#if ERRATA_N2_2376738
mov x0, x18
bl errata_n2_2376738_wa
#endif
#if ERRATA_N2_2388450 #if ERRATA_N2_2388450
mov x0, x18 mov x0, x18
bl errata_n2_2388450_wa bl errata_n2_2388450_wa
@ -531,6 +568,7 @@ func neoverse_n2_errata_report
report_errata ERRATA_N2_2138958, neoverse_n2, 2138958 report_errata ERRATA_N2_2138958, neoverse_n2, 2138958
report_errata ERRATA_N2_2242400, neoverse_n2, 2242400 report_errata ERRATA_N2_2242400, neoverse_n2, 2242400
report_errata ERRATA_N2_2280757, neoverse_n2, 2280757 report_errata ERRATA_N2_2280757, neoverse_n2, 2280757
report_errata ERRATA_N2_2376738, neoverse_n2, 2376738
report_errata ERRATA_N2_2388450, neoverse_n2, 2388450 report_errata ERRATA_N2_2388450, neoverse_n2, 2388450
report_errata WORKAROUND_CVE_2022_23960, neoverse_n2, cve_2022_23960 report_errata WORKAROUND_CVE_2022_23960, neoverse_n2, cve_2022_23960
report_errata ERRATA_DSU_2313941, neoverse_n2, dsu_2313941 report_errata ERRATA_DSU_2313941, neoverse_n2, dsu_2313941

View file

@ -572,6 +572,10 @@ ERRATA_N2_2242400 ?=0
# to revision r0p0 of the Neoverse N2 cpu and is still open. # to revision r0p0 of the Neoverse N2 cpu and is still open.
ERRATA_N2_2280757 ?=0 ERRATA_N2_2280757 ?=0
# Flag to apply erratum 2376738 workaround during reset. This erratum applies
# to revision r0p0 of the Neoverse N2 cpu, it is fixed in r0p1.
ERRATA_N2_2376738 ?=0
# Flag to apply erratum 2388450 workaround during reset. This erratum applies # Flag to apply erratum 2388450 workaround during reset. This erratum applies
# to revision r0p0 of the Neoverse N2 cpu, it is fixed in r0p1. # to revision r0p0 of the Neoverse N2 cpu, it is fixed in r0p1.
ERRATA_N2_2388450 ?=0 ERRATA_N2_2388450 ?=0
@ -1143,6 +1147,10 @@ $(eval $(call add_define,ERRATA_N2_2242400))
$(eval $(call assert_boolean,ERRATA_N2_2280757)) $(eval $(call assert_boolean,ERRATA_N2_2280757))
$(eval $(call add_define,ERRATA_N2_2280757)) $(eval $(call add_define,ERRATA_N2_2280757))
# Process ERRATA_N2_2376738 flag
$(eval $(call assert_boolean,ERRATA_N2_2376738))
$(eval $(call add_define,ERRATA_N2_2376738))
# Process ERRATA_N2_2388450 flag # Process ERRATA_N2_2388450 flag
$(eval $(call assert_boolean,ERRATA_N2_2388450)) $(eval $(call assert_boolean,ERRATA_N2_2388450))
$(eval $(call add_define,ERRATA_N2_2388450)) $(eval $(call add_define,ERRATA_N2_2388450))