diff --git a/include/lib/cpus/aarch64/cpu_macros.S b/include/lib/cpus/aarch64/cpu_macros.S index 8f0a74f0a3f397b9432f352016142e5fd1c1222f..bfe2449e9a05f04d916c21ae7def2472fc78126e 100644 --- a/include/lib/cpus/aarch64/cpu_macros.S +++ b/include/lib/cpus/aarch64/cpu_macros.S @@ -230,6 +230,7 @@ CPU_OPS_SIZE = . /* Check whether errata applies */ mov x0, \_rev_var + /* Shall clobber: x0-x7 */ bl check_errata_\_id .ifeq \_chosen diff --git a/lib/cpus/aarch64/cortex_a53.S b/lib/cpus/aarch64/cortex_a53.S index 3e480bc1fe2ddb1ab111cfa98954f6b5b9a1141e..bec5b9e030be4d4ab3383ba41c188e81cd69f96a 100644 --- a/lib/cpus/aarch64/cortex_a53.S +++ b/lib/cpus/aarch64/cortex_a53.S @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2017, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2014-2018, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -9,6 +9,7 @@ #include <cortex_a53.h> #include <cpu_macros.S> #include <debug.h> +#include <errata_report.h> #include <plat_macros.S> #if A53_DISABLE_NON_TEMPORAL_HINT @@ -154,8 +155,22 @@ endfunc check_errata_835769 * This workaround is statically enabled at build time. */ func check_errata_843419 - mov x1, #0x04 - b cpu_rev_var_ls + mov x1, #ERRATA_APPLIES + mov x2, #ERRATA_NOT_APPLIES + cmp x0, #0x04 + csel x0, x1, x2, ls + /* + * Fix potentially available for revision r0p4. + * If r0p4 check for fix in REVIDR, else exit. + */ + b.ne exit_check_errata_843419 + /* Load REVIDR. */ + mrs x3, revidr_el1 + /* If REVIDR[8] is set (fix exists) set ERRATA_NOT_APPLIES, else exit. */ + tbz x3, #8, exit_check_errata_843419 + mov x0, x2 +exit_check_errata_843419: + ret endfunc check_errata_843419 /* ------------------------------------------------- diff --git a/lib/cpus/aarch64/cpu_helpers.S b/lib/cpus/aarch64/cpu_helpers.S index 5a9226d8326430fe0d1dc8615d9b026f33fa8b61..9f13ed2ca20b8ad4dd4227ba07d304ae11783322 100644 --- a/lib/cpus/aarch64/cpu_helpers.S +++ b/lib/cpus/aarch64/cpu_helpers.S @@ -198,6 +198,8 @@ endfunc cpu_get_rev_var * Compare the CPU's revision-variant (x0) with a given value (x1), for errata * application purposes. If the revision-variant is less than or same as a given * value, indicates that errata applies; otherwise not. + * + * Shall clobber: x0-x3 */ .globl cpu_rev_var_ls func cpu_rev_var_ls @@ -212,6 +214,8 @@ endfunc cpu_rev_var_ls * Compare the CPU's revision-variant (x0) with a given value (x1), for errata * application purposes. If the revision-variant is higher than or same as a * given value, indicates that errata applies; otherwise not. + * + * Shall clobber: x0-x3 */ .globl cpu_rev_var_hs func cpu_rev_var_hs