Browse Source

fix(cpus): workaround for Cortex-A710 erratum 2778471

Cortex-A710 erratum 2778471 is a Cat B erratum that applies
to revisions r0p1, r1p0, r2p0 and r2p1 and is still open.
The workaround is to set CPUACTLR3_EL1[47] to 1.

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

Change-Id: Id3bb4a2673e41ff237682e46784d37752daf2f83
Signed-off-by: Sona Mathew <sonarebecca.mathew@arm.com>
pull/2005/head
Sona Mathew 11 months ago
parent
commit
c9508d6a10
  1. 4
      docs/design/cpu-specific-build-macros.rst
  2. 7
      include/lib/cpus/aarch64/cortex_a710.h
  3. 6
      lib/cpus/aarch64/cortex_a710.S
  4. 5
      lib/cpus/cpu-ops.mk
  5. 3
      services/std_svc/errata_abi/errata_abi_main.c

4
docs/design/cpu-specific-build-macros.rst

@ -636,6 +636,10 @@ For Cortex-A710, the following errata build flags are defined :
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.
- ``ERRATA_A710_2778471``: This applies errata 2778471 workaround to Cortex-A710
CPU. This needs to be enabled for revisions r0p0, r1p0, r2p0 and r2p1 of the
CPU and is still open.
For Neoverse N2, the following errata build flags are defined : For Neoverse N2, the following errata build flags are defined :
- ``ERRATA_N2_2002655``: This applies errata 2002655 workaround to Neoverse-N2 - ``ERRATA_N2_2002655``: This applies errata 2002655 workaround to Neoverse-N2

7
include/lib/cpus/aarch64/cortex_a710.h

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2021-2022, Arm Limited. All rights reserved. * Copyright (c) 2021-2023, Arm Limited. All rights reserved.
* *
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
*/ */
@ -38,6 +38,11 @@
#define CORTEX_A710_CPUACTLR2_EL1_BIT_40 (ULL(1) << 40) #define CORTEX_A710_CPUACTLR2_EL1_BIT_40 (ULL(1) << 40)
#define CORTEX_A710_CPUACTLR2_EL1_BIT_36 (ULL(1) << 36) #define CORTEX_A710_CPUACTLR2_EL1_BIT_36 (ULL(1) << 36)
/*******************************************************************************
* CPU Auxiliary Control register 3 specific definitions.
******************************************************************************/
#define CORTEX_A710_CPUACTLR3_EL1 S3_0_C15_C1_2
/******************************************************************************* /*******************************************************************************
* CPU Auxiliary Control register 5 specific definitions. * CPU Auxiliary Control register 5 specific definitions.
******************************************************************************/ ******************************************************************************/

6
lib/cpus/aarch64/cortex_a710.S

@ -193,6 +193,12 @@ workaround_runtime_end cortex_a710, ERRATUM(2768515), NO_ISB
check_erratum_ls cortex_a710, ERRATUM(2768515), CPU_REV(2, 1) check_erratum_ls cortex_a710, ERRATUM(2768515), CPU_REV(2, 1)
workaround_reset_start cortex_a710, ERRATUM(2778471), ERRATA_A710_2778471
sysreg_bit_set CORTEX_A710_CPUACTLR3_EL1, BIT(47)
workaround_reset_end cortex_a710, ERRATUM(2778471)
check_erratum_ls cortex_a710, ERRATUM(2778471), CPU_REV(2, 1)
workaround_reset_start cortex_a710, CVE(2022, 23960), WORKAROUND_CVE_2022_23960 workaround_reset_start cortex_a710, CVE(2022, 23960), WORKAROUND_CVE_2022_23960
#if IMAGE_BL31 #if IMAGE_BL31
/* /*

5
lib/cpus/cpu-ops.mk

@ -625,6 +625,11 @@ CPU_FLAG_LIST += ERRATA_A710_2742423
# still open. # still open.
CPU_FLAG_LIST += ERRATA_A710_2768515 CPU_FLAG_LIST += ERRATA_A710_2768515
# Flag to apply erratum 2778471 workaround during reset. This erratum applies
# to revisions r0p0, r1p0, r2p0, r2p1 of the Cortex-A710 cpu and is still
# open.
CPU_FLAG_LIST += ERRATA_A710_2778471
# Flag to apply erratum 2002655 workaround during reset. This erratum applies # Flag to apply erratum 2002655 workaround during reset. This erratum applies
# to revisions r0p0 of the Neoverse-N2 cpu and is fixed in r0p1. # to revisions r0p0 of the Neoverse-N2 cpu and is fixed in r0p1.
CPU_FLAG_LIST += ERRATA_N2_2002655 CPU_FLAG_LIST += ERRATA_N2_2002655

3
services/std_svc/errata_abi/errata_abi_main.c

@ -332,7 +332,8 @@ struct em_cpu_list cpu_list[] = {
ERRATA_NON_ARM_INTERCONNECT}, ERRATA_NON_ARM_INTERCONNECT},
[15] = {2742423, 0x00, 0x21, ERRATA_A710_2742423}, [15] = {2742423, 0x00, 0x21, ERRATA_A710_2742423},
[16] = {2768515, 0x00, 0x21, ERRATA_A710_2768515}, [16] = {2768515, 0x00, 0x21, ERRATA_A710_2768515},
[17 ... ERRATA_LIST_END] = UNDEF_ERRATA, [17] = {2778471, 0x00, 0x21, ERRATA_A710_2778471},
[18 ... ERRATA_LIST_END] = UNDEF_ERRATA,
} }
}, },
#endif /* CORTEX_A710_H_INC */ #endif /* CORTEX_A710_H_INC */

Loading…
Cancel
Save