diff --git a/docs/design/cpu-specific-build-macros.rst b/docs/design/cpu-specific-build-macros.rst index 652c14203..abd9f8771 100644 --- a/docs/design/cpu-specific-build-macros.rst +++ b/docs/design/cpu-specific-build-macros.rst @@ -872,6 +872,10 @@ For Cortex-A520, the following errata build flags are defined : For Cortex-A715, the following errata build flags are defined : +- ``ERRATA_A715_2561034``: This applies errata 2561034 workaround to + Cortex-A715 CPU. This needs to be enabled only for revision r1p0. + It is fixed in r1p1. + - ``ERRATA_A715_2701951``: This applies erratum 2701951 workaround to Cortex-A715 CPU and affects system configurations that do not use an ARM interconnect IP. This needs to be applied to revisions r0p0, r1p0 and r1p1. It is fixed diff --git a/include/lib/cpus/aarch64/cortex_a715.h b/include/lib/cpus/aarch64/cortex_a715.h index 950d02f32..366894d06 100644 --- a/include/lib/cpus/aarch64/cortex_a715.h +++ b/include/lib/cpus/aarch64/cortex_a715.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2023, Arm Limited. All rights reserved. + * Copyright (c) 2021-2024, Arm Limited. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -12,6 +12,11 @@ /* Cortex-A715 loop count for CVE-2022-23960 mitigation */ #define CORTEX_A715_BHB_LOOP_COUNT U(38) +/******************************************************************************* + * CPU Auxiliary Control register 2 specific definitions. + ******************************************************************************/ +#define CORTEX_A715_CPUACTLR2_EL1 S3_0_C15_C1_1 + /******************************************************************************* * CPU Extended Control register specific definitions ******************************************************************************/ diff --git a/lib/cpus/aarch64/cortex_a715.S b/lib/cpus/aarch64/cortex_a715.S index dd4c307f7..0faa2768b 100644 --- a/lib/cpus/aarch64/cortex_a715.S +++ b/lib/cpus/aarch64/cortex_a715.S @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2023, Arm Limited. All rights reserved. + * Copyright (c) 2021-2024, Arm Limited. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -26,6 +26,12 @@ wa_cve_2022_23960_bhb_vector_table CORTEX_A715_BHB_LOOP_COUNT, cortex_a715 #endif /* WORKAROUND_CVE_2022_23960 */ +workaround_runtime_start cortex_a715, ERRATUM(2561034), ERRATA_A715_2561034 + sysreg_bit_set CORTEX_A715_CPUACTLR2_EL1, BIT(26) +workaround_runtime_end cortex_a715, ERRATUM(2561034), NO_ISB + +check_erratum_range cortex_a715, ERRATUM(2561034), CPU_REV(1, 0), CPU_REV(1, 0) + workaround_reset_start cortex_a715, CVE(2022, 23960), WORKAROUND_CVE_2022_23960 #if IMAGE_BL31 /* diff --git a/lib/cpus/cpu-ops.mk b/lib/cpus/cpu-ops.mk index 31430ae99..dcbeba191 100644 --- a/lib/cpus/cpu-ops.mk +++ b/lib/cpus/cpu-ops.mk @@ -903,6 +903,10 @@ CPU_FLAG_LIST += ERRATA_V2_2779510 # This erratum applies to revisions r0p0, r0p1. Fixed in r0p2. CPU_FLAG_LIST += ERRATA_V2_2801372 +# Flag to apply erratum 2561034 workaround during reset. This erratum applies +# only to revision r1p0. It is fixed in r1p1. +CPU_FLAG_LIST += ERRATA_A715_2561034 + # Flag to apply erratum 2701951 workaround for non-arm interconnect ip. # This erratum applies to revisions r0p0, r1p0, and r1p1. Its is fixed in r1p2. CPU_FLAG_LIST += ERRATA_A715_2701951 diff --git a/services/std_svc/errata_abi/errata_abi_main.c b/services/std_svc/errata_abi/errata_abi_main.c index a2669d2cc..811adcb0a 100644 --- a/services/std_svc/errata_abi/errata_abi_main.c +++ b/services/std_svc/errata_abi/errata_abi_main.c @@ -435,9 +435,10 @@ struct em_cpu_list cpu_list[] = { { .cpu_partnumber = CORTEX_A715_MIDR, .cpu_errata_list = { - [0] = {2701951, 0x00, 0x11, ERRATA_A715_2701951, \ + [0] = {2561034, 0x10, 0x10, ERRATA_A715_2561034}, + [1] = {2701951, 0x00, 0x11, ERRATA_A715_2701951, \ ERRATA_NON_ARM_INTERCONNECT}, - [1 ... ERRATA_LIST_END] = UNDEF_ERRATA, + [2 ... ERRATA_LIST_END] = UNDEF_ERRATA, } }, #endif /* CORTEX_A715_H_INC */