@ -1,5 +1,5 @@
/ *
* Copyright ( c ) 2019 - 2020 , ARM Limited. All rights reserved.
* Copyright ( c ) 2019 - 2021 , ARM Limited. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
* /
@ -21,6 +21,34 @@
# error " Neoverse-V1 supports only AArch64. Compile with CTX_INCLUDE_AARCH32_REGS = 0 "
# endif
/ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Errata Workaround for Neoverse V1 Errata # 1774420 .
* This applies to revisions r0p0 and r1p0 , fixed in r1p1.
* x0: variant [ 4 : 7 ] and revision [ 0 : 3 ] of current cpu.
* Shall clobber : x0-x17
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* /
func errata_neoverse_v1_1774420_wa
/ * Check workaround compatibility. * /
mov x17 , x30
bl check_errata_1774420
cbz x0 , 1 f
/ * Set bit 53 in CPUECTLR_EL1 * /
mrs x1 , NEOVERSE_V1_CPUECTLR_EL1
orr x1 , x1 , # NEOVERSE_V1_CPUECTLR_EL1_BIT_53
msr NEOVERSE_V1_CPUECTLR_EL1 , x1
isb
1 :
ret x17
endfunc errata_neoverse_v1_1774420_wa
func check_errata_1774420
/ * Applies to r0p0 and r1p0. * /
mov x1 , # 0x10
b cpu_rev_var_ls
endfunc check_errata_1774420
/ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Errata Workaround for Neoverse V1 Errata # 1791573 .
* This applies to revisions r0p0 and r1p0 , fixed in r1p1.
@ -35,9 +63,9 @@ func errata_neoverse_v1_1791573_wa
cbz x0 , 1 f
/ * Set bit 2 in ACTLR2_EL1 * /
mrs x1 , NEOVERSE_V1_ACTLR2_EL1
mrs x1 , NEOVERSE_V1_ACTLR2_EL1
orr x1 , x1 , # NEOVERSE_V1_ACTLR2_EL1_BIT_2
msr NEOVERSE_V1_ACTLR2_EL1 , x1
msr NEOVERSE_V1_ACTLR2_EL1 , x1
isb
1 :
ret x17
@ -134,6 +162,7 @@ func neoverse_v1_errata_report
* Report all errata. The revision-variant information is passed to
* checking functions of each errata.
* /
rep ort_errata ERRATA_V1_1774420 , neoverse_v1 , 1774420
rep ort_errata ERRATA_V1_1791573 , neoverse_v1 , 1791573
rep ort_errata ERRATA_V1_1940577 , neoverse_v1 , 1940577
@ -149,6 +178,11 @@ func neoverse_v1_reset_func
msr SSBS , xzr
isb
# if ERRATA_V1_1774420
mov x0 , x18
bl errata_neoverse_v1_1774420_wa
# endif
# if ERRATA_V1_1791573
mov x0 , x18
bl errata_neoverse_v1_1791573_wa