Merge changes from topic "errata" into integration

* changes:
  fix(cpus): workaround for Cortex-X2 erratum 2742423
  fix(cpus): workaround for Cortex-A710 erratum 2742423
  fix(cpus): workaround for Neoverse N2 erratum 2340933
  fix(cpus): workaround for Neoverse N2 erratum 2346952
This commit is contained in:
Lauren Wehrmeister 2023-11-06 17:33:30 +01:00 committed by TrustedFirmware Code Review
commit 11a8a3e935
7 changed files with 86 additions and 13 deletions

View file

@ -612,6 +612,10 @@ For Cortex-A710, the following errata build flags are defined :
interconnect IP. This needs to be enabled for r0p0, r1p0, r2p0 and r2p1 and interconnect IP. This needs to be enabled for r0p0, r1p0, r2p0 and r2p1 and
is still open. is still open.
- ``ERRATA_A710_2742423``: This applies errata 2742423 workaround to
Cortex-A710 CPU. This needs to be enabled for revisions r0p0, r1p0, r2p0 and
r2p1 of the CPU and is still open.
- ``ERRATA_A710_2768515``: This applies errata 2768515 workaround to - ``ERRATA_A710_2768515``: This applies errata 2768515 workaround to
Cortex-A710 CPU. This needs to be enabled for revisions r0p0, r1p0, r2p0 and Cortex-A710 CPU. This needs to be enabled for revisions r0p0, r1p0, r2p0 and
r2p1 of the CPU and is still open. r2p1 of the CPU and is still open.
@ -655,6 +659,14 @@ 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
CPU. This needs to be enabled for revisions r0p0, r0p1 and r0p2 of the CPU,
it is fixed in r0p3.
- ``ERRATA_N2_2376738``: This applies errata 2376738 workaround to Neoverse-N2 - ``ERRATA_N2_2376738``: This applies errata 2376738 workaround to Neoverse-N2
CPU. This needs to be enabled for revision r0p0, r0p1, r0p2, r0p3 and is still open. CPU. This needs to be enabled for revision r0p0, r0p1, r0p2, r0p3 and is still open.
@ -721,6 +733,10 @@ For Cortex-X2, the following errata build flags are defined :
This needs to be enabled for revisions r0p0, r1p0, r2p0 and r2p1 and is This needs to be enabled for revisions r0p0, r1p0, r2p0 and r2p1 and is
still open. still open.
- ``ERRATA_X2_2742423``: This applies errata 2742423 workaround to Cortex-X2
CPU. This needs to be enabled for revisions r0p0, r1p0, r2p0 and r2p1 of the
CPU and is still open.
- ``ERRATA_X2_2768515``: This applies errata 2768515 workaround to Cortex-X2 - ``ERRATA_X2_2768515``: This applies errata 2768515 workaround to Cortex-X2
CPU. This needs to be enabled for revisions r0p0, r1p0, r2p0 and r2p1 of the CPU. This needs to be enabled for revisions r0p0, r1p0, r2p0 and r2p1 of the
CPU and is still open. CPU and is still open.

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2020-2022, Arm Limited. All rights reserved. * Copyright (c) 2020-2023, Arm Limited. All rights reserved.
* *
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
*/ */
@ -65,5 +65,8 @@
#define NEOVERSE_N2_CPUECTLR2_EL1_PF_MODE_CNSRV ULL(9) #define NEOVERSE_N2_CPUECTLR2_EL1_PF_MODE_CNSRV ULL(9)
#define CPUECTLR2_EL1_PF_MODE_LSB U(11) #define CPUECTLR2_EL1_PF_MODE_LSB U(11)
#define CPUECTLR2_EL1_PF_MODE_WIDTH U(4) #define CPUECTLR2_EL1_PF_MODE_WIDTH U(4)
#define CPUECTLR2_EL1_TXREQ_STATIC_FULL ULL(0)
#define CPUECTLR2_EL1_TXREQ_LSB U(0)
#define CPUECTLR2_EL1_TXREQ_WIDTH U(3)
#endif /* NEOVERSE_N2_H */ #endif /* NEOVERSE_N2_H */

View file

@ -178,6 +178,14 @@ workaround_reset_end cortex_a710, ERRATUM(2371105)
check_erratum_ls cortex_a710, ERRATUM(2371105), CPU_REV(2, 0) check_erratum_ls cortex_a710, ERRATUM(2371105), CPU_REV(2, 0)
workaround_reset_start cortex_a710, ERRATUM(2742423), ERRATA_A710_2742423
/* Set CPUACTLR5_EL1[56:55] to 2'b01 */
sysreg_bit_set CORTEX_A710_CPUACTLR5_EL1, BIT(55)
sysreg_bit_clear CORTEX_A710_CPUACTLR5_EL1, BIT(56)
workaround_reset_end cortex_a710, ERRATUM(2742423)
check_erratum_ls cortex_a710, ERRATUM(2742423), CPU_REV(2, 1)
workaround_runtime_start cortex_a710, ERRATUM(2768515), ERRATA_A710_2768515 workaround_runtime_start cortex_a710, ERRATUM(2768515), ERRATA_A710_2768515
/* dsb before isb of power down sequence */ /* dsb before isb of power down sequence */
dsb sy dsb sy

View file

@ -118,6 +118,14 @@ workaround_reset_end cortex_x2, ERRATUM(2371105)
check_erratum_ls cortex_x2, ERRATUM(2371105), CPU_REV(2, 0) check_erratum_ls cortex_x2, ERRATUM(2371105), CPU_REV(2, 0)
workaround_reset_start cortex_x2, ERRATUM(2742423), ERRATA_X2_2742423
/* Set CPUACTLR5_EL1[56:55] to 2'b01 */
sysreg_bit_set CORTEX_X2_CPUACTLR5_EL1, BIT(55)
sysreg_bit_clear CORTEX_X2_CPUACTLR5_EL1, BIT(56)
workaround_reset_end cortex_x2, ERRATUM(2742423)
check_erratum_ls cortex_x2, ERRATUM(2742423), CPU_REV(2, 1)
workaround_reset_start cortex_x2, ERRATUM(2768515), ERRATA_X2_2768515 workaround_reset_start cortex_x2, ERRATUM(2768515), ERRATA_X2_2768515
/* dsb before isb of power down sequence */ /* dsb before isb of power down sequence */
dsb sy dsb sy

View file

@ -165,6 +165,23 @@ 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
/* Set TXREQ to STATIC and full L2 TQ size */
mrs x1, NEOVERSE_N2_CPUECTLR2_EL1
mov x0, #CPUECTLR2_EL1_TXREQ_STATIC_FULL
bfi x1, x0, #CPUECTLR2_EL1_TXREQ_LSB, #CPUECTLR2_EL1_TXREQ_WIDTH
msr NEOVERSE_N2_CPUECTLR2_EL1, x1
workaround_runtime_end neoverse_n2, ERRATUM(2346952)
check_erratum_ls neoverse_n2, ERRATUM(2346952), CPU_REV(0, 2)
workaround_reset_start neoverse_n2, ERRATUM(2376738), ERRATA_N2_2376738 workaround_reset_start neoverse_n2, ERRATUM(2376738), ERRATA_N2_2376738
/* Set CPUACTLR2_EL1[0] to 1 to force PLDW/PFRM /* Set CPUACTLR2_EL1[0] to 1 to force PLDW/PFRM
* ST to behave like PLD/PFRM LD and not cause * ST to behave like PLD/PFRM LD and not cause

View file

@ -607,6 +607,11 @@ CPU_FLAG_LIST += ERRATA_A710_2371105
# and is still open. # and is still open.
CPU_FLAG_LIST += ERRATA_A710_2701952 CPU_FLAG_LIST += ERRATA_A710_2701952
# Flag to apply erratum 2742423 workaround during reset. This erratum applies
# to revision r0p0, r1p0, r2p0 and r2p1 of the Cortex-A710 cpu and is still
# open.
CPU_FLAG_LIST += ERRATA_A710_2742423
# Flag to apply erratum 2768515 workaround during power down. This erratum # Flag to apply erratum 2768515 workaround during power down. This erratum
# applies to revision r0p0, r1p0, r2p0 and r2p1 of the Cortex-A710 cpu and is # applies to revision r0p0, r1p0, r2p0 and r2p1 of the Cortex-A710 cpu and is
# still open. # still open.
@ -656,10 +661,18 @@ 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
# to r0p0, r0p1, r0p2 of the Neoverse N2 cpu, it is fixed in r0p3.
CPU_FLAG_LIST += ERRATA_N2_2346952
# Flag to apply erratum 2376738 workaround during reset. This erratum applies # Flag to apply erratum 2376738 workaround during reset. This erratum applies
# to revision r0p0, r0p1, r0p2, r0p3 of the Neoverse N2 cpu and is still open. # to revision r0p0, r0p1, r0p2, r0p3 of the Neoverse N2 cpu and is still open.
CPU_FLAG_LIST += ERRATA_N2_2376738 CPU_FLAG_LIST += ERRATA_N2_2376738
@ -730,6 +743,10 @@ CPU_FLAG_LIST += ERRATA_X2_2371105
# and is still open. # and is still open.
CPU_FLAG_LIST += ERRATA_X2_2701952 CPU_FLAG_LIST += ERRATA_X2_2701952
# Flag to apply erratum 2742423 workaround during reset. This erratum applies
# to revisions r0p0, r1p0, r2p0 and r2p1 of the Cortex-X2 cpu and is still open.
CPU_FLAG_LIST += ERRATA_X2_2742423
# Flag to apply erratum 2768515 workaround during power down. This erratum # Flag to apply erratum 2768515 workaround during power down. This erratum
# applies to revision r0p0, r1p0, r2p0 and r2p1 of the Cortex-X2 cpu and is # applies to revision r0p0, r1p0, r2p0 and r2p1 of the Cortex-X2 cpu and is
# still open. # still open.

View file

@ -328,8 +328,9 @@ struct em_cpu_list cpu_list[] = {
[13] = {2371105, 0x00, 0x20, ERRATA_A710_2371105}, [13] = {2371105, 0x00, 0x20, ERRATA_A710_2371105},
[14] = {2701952, 0x00, 0x21, ERRATA_A710_2701952, \ [14] = {2701952, 0x00, 0x21, ERRATA_A710_2701952, \
ERRATA_NON_ARM_INTERCONNECT}, ERRATA_NON_ARM_INTERCONNECT},
[15] = {2768515, 0x00, 0x21, ERRATA_A710_2768515}, [15] = {2742423, 0x00, 0x21, ERRATA_A710_2742423},
[16 ... ERRATA_LIST_END] = UNDEF_ERRATA, [16] = {2768515, 0x00, 0x21, ERRATA_A710_2768515},
[17 ... ERRATA_LIST_END] = UNDEF_ERRATA,
} }
}, },
#endif /* CORTEX_A710_H_INC */ #endif /* CORTEX_A710_H_INC */
@ -350,14 +351,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] = {2376738, 0x00, 0x03, ERRATA_N2_2376738}, [12] = {2340933, 0x00, 0x00, ERRATA_N2_2340933},
[13] = {2388450, 0x00, 0x00, ERRATA_N2_2388450}, [13] = {2346952, 0x00, 0x02, ERRATA_N2_2346952},
[14] = {2728475, 0x00, 0x02, ERRATA_N2_2728475, \ [14] = {2376738, 0x00, 0x00, ERRATA_N2_2376738},
[15] = {2388450, 0x00, 0x00, ERRATA_N2_2388450},
[16] = {2728475, 0x00, 0x02, ERRATA_N2_2728475, \
ERRATA_NON_ARM_INTERCONNECT}, ERRATA_NON_ARM_INTERCONNECT},
[15] = {2743014, 0x00, 0x02, ERRATA_N2_2743014}, [17] = {2743014, 0x00, 0x02, ERRATA_N2_2743014},
[16] = {2743089, 0x00, 0x02, ERRATA_N2_2743089}, [18] = {2743089, 0x00, 0x02, ERRATA_N2_2743089},
[17] = {2779511, 0x00, 0x02, ERRATA_N2_2779511}, [19] = {2779511, 0x00, 0x02, ERRATA_N2_2779511},
[18 ... ERRATA_LIST_END] = UNDEF_ERRATA, [20 ... ERRATA_LIST_END] = UNDEF_ERRATA,
} }
}, },
#endif /* NEOVERSE_N2_H_INC */ #endif /* NEOVERSE_N2_H_INC */
@ -377,8 +380,9 @@ struct em_cpu_list cpu_list[] = {
[8] = {2371105, 0x00, 0x20, ERRATA_X2_2371105}, [8] = {2371105, 0x00, 0x20, ERRATA_X2_2371105},
[9] = {2701952, 0x00, 0x21, ERRATA_X2_2701952, \ [9] = {2701952, 0x00, 0x21, ERRATA_X2_2701952, \
ERRATA_NON_ARM_INTERCONNECT}, ERRATA_NON_ARM_INTERCONNECT},
[10] = {2768515, 0x00, 0x21, ERRATA_X2_2768515}, [10] = {2742423, 0x00, 0x21, ERRATA_X2_2742423},
[11 ... ERRATA_LIST_END] = UNDEF_ERRATA, [11] = {2768515, 0x00, 0x21, ERRATA_X2_2768515},
[12 ... ERRATA_LIST_END] = UNDEF_ERRATA,
} }
}, },
#endif /* CORTEX_X2_H_INC */ #endif /* CORTEX_X2_H_INC */