blob: 36a7ee75a47d4cb72c32a4fe0c85fb9545276920 [file] [log] [blame]
Isla Mitchellea84d6b2017-08-03 16:04:46 +01001/*
laurenw-arm521510a2023-06-27 14:41:38 -05002 * Copyright (c) 2017-2023, Arm Limited and Contributors. All rights reserved.
Isla Mitchellea84d6b2017-08-03 16:04:46 +01003 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#include <arch.h>
8#include <asm_macros.S>
Dimitris Papastamos89736dd2018-02-13 11:28:02 +00009#include <cpuamu.h>
Isla Mitchellea84d6b2017-08-03 16:04:46 +010010#include <cpu_macros.S>
Javier Almansa Sobrino9faad3c2020-10-23 13:22:07 +010011#include <neoverse_n1.h>
Bipin Ravi86499742022-01-18 01:59:06 -060012#include "wa_cve_2022_23960_bhb_vector.S"
Dimitris Papastamos89736dd2018-02-13 11:28:02 +000013
John Tsichritzisfe6df392019-03-19 17:20:52 +000014/* Hardware handled coherency */
15#if HW_ASSISTED_COHERENCY == 0
16#error "Neoverse N1 must be compiled with HW_ASSISTED_COHERENCY enabled"
17#endif
18
John Tsichritzis7557c662019-06-03 13:54:30 +010019/* 64-bit only core */
20#if CTX_INCLUDE_AARCH32_REGS == 1
21#error "Neoverse-N1 supports only AArch64. Compile with CTX_INCLUDE_AARCH32_REGS=0"
22#endif
23
laurenw-arm94accd32019-08-20 15:51:24 -050024 .global neoverse_n1_errata_ic_trap_handler
laurenw-arm94accd32019-08-20 15:51:24 -050025
Bipin Ravi86499742022-01-18 01:59:06 -060026#if WORKAROUND_CVE_2022_23960
27 wa_cve_2022_23960_bhb_vector_table NEOVERSE_N1_BHB_LOOP_COUNT, neoverse_n1
28#endif /* WORKAROUND_CVE_2022_23960 */
29
laurenw-arm41c3e262023-06-06 16:53:15 -050030/*
31 * ERRATA_DSU_936184:
32 * The errata is defined in dsu_helpers.S and applies to Neoverse N1.
33 * Henceforth creating symbolic names to the already existing errata
34 * workaround functions to get them registered under the Errata Framework.
Dimitris Papastamos7ca21db2018-03-26 16:46:01 +010035 */
laurenw-arm41c3e262023-06-06 16:53:15 -050036.equ check_erratum_neoverse_n1_936184, check_errata_dsu_936184
37.equ erratum_neoverse_n1_936184_wa, errata_dsu_936184_wa
38add_erratum_entry neoverse_n1, ERRATUM(936184), ERRATA_DSU_936184, APPLY_AT_RESET
Dimitris Papastamos7ca21db2018-03-26 16:46:01 +010039
laurenw-arm41c3e262023-06-06 16:53:15 -050040workaround_reset_start neoverse_n1, ERRATUM(1043202), ERRATA_N1_1043202
Dimitris Papastamos7ca21db2018-03-26 16:46:01 +010041 /* Apply instruction patching sequence */
42 ldr x0, =0x0
43 msr CPUPSELR_EL3, x0
44 ldr x0, =0xF3BF8F2F
45 msr CPUPOR_EL3, x0
46 ldr x0, =0xFFFFFFFF
47 msr CPUPMR_EL3, x0
48 ldr x0, =0x800200071
49 msr CPUPCR_EL3, x0
laurenw-arm41c3e262023-06-06 16:53:15 -050050workaround_reset_end neoverse_n1, ERRATUM(1043202)
Dimitris Papastamos7ca21db2018-03-26 16:46:01 +010051
laurenw-arm41c3e262023-06-06 16:53:15 -050052check_erratum_ls neoverse_n1, ERRATUM(1043202), CPU_REV(1, 0)
Dimitris Papastamos7ca21db2018-03-26 16:46:01 +010053
laurenw-arm41c3e262023-06-06 16:53:15 -050054workaround_reset_start neoverse_n1, ERRATUM(1073348), ERRATA_N1_1073348
laurenw-armb45d7d72023-06-07 13:26:23 -050055 sysreg_bit_set NEOVERSE_N1_CPUACTLR_EL1, NEOVERSE_N1_CPUACTLR_EL1_BIT_6
laurenw-arm41c3e262023-06-06 16:53:15 -050056workaround_reset_end neoverse_n1, ERRATUM(1073348)
lauwal01bd555f42019-06-24 11:23:50 -050057
laurenw-arm41c3e262023-06-06 16:53:15 -050058check_erratum_ls neoverse_n1, ERRATUM(1073348), CPU_REV(1, 0)
lauwal01bd555f42019-06-24 11:23:50 -050059
laurenw-arm41c3e262023-06-06 16:53:15 -050060workaround_reset_start neoverse_n1, ERRATUM(1130799), ERRATA_N1_1130799
laurenw-armb45d7d72023-06-07 13:26:23 -050061 sysreg_bit_set NEOVERSE_N1_CPUACTLR2_EL1, NEOVERSE_N1_CPUACTLR2_EL1_BIT_59
laurenw-arm41c3e262023-06-06 16:53:15 -050062workaround_reset_end neoverse_n1, ERRATUM(1130799)
lauwal01363ee3c2019-06-24 11:28:34 -050063
laurenw-arm41c3e262023-06-06 16:53:15 -050064check_erratum_ls neoverse_n1, ERRATUM(1130799), CPU_REV(2, 0)
lauwal01363ee3c2019-06-24 11:28:34 -050065
laurenw-arm41c3e262023-06-06 16:53:15 -050066workaround_reset_start neoverse_n1, ERRATUM(1165347), ERRATA_N1_1165347
laurenw-armb45d7d72023-06-07 13:26:23 -050067 sysreg_bit_set NEOVERSE_N1_CPUACTLR2_EL1, NEOVERSE_N1_CPUACTLR2_EL1_BIT_0
68 sysreg_bit_set NEOVERSE_N1_CPUACTLR2_EL1, NEOVERSE_N1_CPUACTLR2_EL1_BIT_15
laurenw-arm41c3e262023-06-06 16:53:15 -050069workaround_reset_end neoverse_n1, ERRATUM(1165347)
lauwal01f2adb132019-06-24 11:32:40 -050070
laurenw-arm41c3e262023-06-06 16:53:15 -050071check_erratum_ls neoverse_n1, ERRATUM(1165347), CPU_REV(2, 0)
lauwal01f2adb132019-06-24 11:32:40 -050072
laurenw-arm41c3e262023-06-06 16:53:15 -050073workaround_reset_start neoverse_n1, ERRATUM(1207823), ERRATA_N1_1207823
laurenw-armb45d7d72023-06-07 13:26:23 -050074 sysreg_bit_set NEOVERSE_N1_CPUACTLR2_EL1, NEOVERSE_N1_CPUACTLR2_EL1_BIT_11
laurenw-arm41c3e262023-06-06 16:53:15 -050075workaround_reset_end neoverse_n1, ERRATUM(1207823)
lauwal01e1590442019-06-24 11:35:37 -050076
laurenw-arm41c3e262023-06-06 16:53:15 -050077check_erratum_ls neoverse_n1, ERRATUM(1207823), CPU_REV(2, 0)
lauwal01e1590442019-06-24 11:35:37 -050078
laurenw-arm41c3e262023-06-06 16:53:15 -050079workaround_reset_start neoverse_n1, ERRATUM(1220197), ERRATA_N1_1220197
laurenw-armb45d7d72023-06-07 13:26:23 -050080 sysreg_bit_set NEOVERSE_N1_CPUECTLR_EL1, NEOVERSE_N1_WS_THR_L2_MASK
laurenw-arm41c3e262023-06-06 16:53:15 -050081workaround_reset_end neoverse_n1, ERRATUM(1220197)
lauwal01197f14c2019-06-24 11:38:53 -050082
laurenw-arm41c3e262023-06-06 16:53:15 -050083check_erratum_ls neoverse_n1, ERRATUM(1220197), CPU_REV(2, 0)
lauwal01197f14c2019-06-24 11:38:53 -050084
laurenw-arm41c3e262023-06-06 16:53:15 -050085workaround_reset_start neoverse_n1, ERRATUM(1257314), ERRATA_N1_1257314
laurenw-armb45d7d72023-06-07 13:26:23 -050086 sysreg_bit_set NEOVERSE_N1_CPUACTLR3_EL1, NEOVERSE_N1_CPUACTLR3_EL1_BIT_10
laurenw-arm41c3e262023-06-06 16:53:15 -050087workaround_reset_end neoverse_n1, ERRATUM(1257314)
lauwal0107c2a232019-06-24 11:42:02 -050088
laurenw-arm41c3e262023-06-06 16:53:15 -050089check_erratum_ls neoverse_n1, ERRATUM(1257314), CPU_REV(3, 0)
lauwal0107c2a232019-06-24 11:42:02 -050090
laurenw-arm41c3e262023-06-06 16:53:15 -050091workaround_reset_start neoverse_n1, ERRATUM(1262606), ERRATA_N1_1262606
laurenw-armb45d7d72023-06-07 13:26:23 -050092 sysreg_bit_set NEOVERSE_N1_CPUACTLR_EL1, NEOVERSE_N1_CPUACTLR_EL1_BIT_13
laurenw-arm41c3e262023-06-06 16:53:15 -050093workaround_reset_end neoverse_n1, ERRATUM(1262606)
lauwal0142771af2019-06-24 11:44:58 -050094
laurenw-arm41c3e262023-06-06 16:53:15 -050095check_erratum_ls neoverse_n1, ERRATUM(1262606), CPU_REV(3, 0)
lauwal0142771af2019-06-24 11:44:58 -050096
laurenw-arm41c3e262023-06-06 16:53:15 -050097workaround_reset_start neoverse_n1, ERRATUM(1262888), ERRATA_N1_1262888
laurenw-armb45d7d72023-06-07 13:26:23 -050098 sysreg_bit_set NEOVERSE_N1_CPUECTLR_EL1, NEOVERSE_N1_CPUECTLR_EL1_MM_TLBPF_DIS_BIT
laurenw-arm41c3e262023-06-06 16:53:15 -050099workaround_reset_end neoverse_n1, ERRATUM(1262888)
lauwal0100396bf2019-06-24 11:47:30 -0500100
laurenw-arm41c3e262023-06-06 16:53:15 -0500101check_erratum_ls neoverse_n1, ERRATUM(1262888), CPU_REV(3, 0)
lauwal0100396bf2019-06-24 11:47:30 -0500102
laurenw-arm41c3e262023-06-06 16:53:15 -0500103workaround_reset_start neoverse_n1, ERRATUM(1275112), ERRATA_N1_1275112
laurenw-armb45d7d72023-06-07 13:26:23 -0500104 sysreg_bit_set NEOVERSE_N1_CPUACTLR_EL1, NEOVERSE_N1_CPUACTLR_EL1_BIT_13
laurenw-arm41c3e262023-06-06 16:53:15 -0500105workaround_reset_end neoverse_n1, ERRATUM(1275112)
lauwal01644b6ed2019-06-24 11:49:01 -0500106
laurenw-arm41c3e262023-06-06 16:53:15 -0500107check_erratum_ls neoverse_n1, ERRATUM(1275112), CPU_REV(3, 0)
Andre Przywarab9347402019-05-20 14:57:06 +0100108
laurenw-arm41c3e262023-06-06 16:53:15 -0500109workaround_reset_start neoverse_n1, ERRATUM(1315703), ERRATA_N1_1315703
laurenw-armb45d7d72023-06-07 13:26:23 -0500110 sysreg_bit_set NEOVERSE_N1_CPUACTLR2_EL1, NEOVERSE_N1_CPUACTLR2_EL1_BIT_16
laurenw-arm41c3e262023-06-06 16:53:15 -0500111workaround_reset_end neoverse_n1, ERRATUM(1315703)
Andre Przywarab9347402019-05-20 14:57:06 +0100112
laurenw-arm41c3e262023-06-06 16:53:15 -0500113check_erratum_ls neoverse_n1, ERRATUM(1315703), CPU_REV(3, 0)
laurenw-arm94accd32019-08-20 15:51:24 -0500114
laurenw-arm41c3e262023-06-06 16:53:15 -0500115workaround_reset_start neoverse_n1, ERRATUM(1542419), ERRATA_N1_1542419
laurenw-armcd9a9432019-10-11 15:45:24 -0500116 /* Apply instruction patching sequence */
laurenw-arm94accd32019-08-20 15:51:24 -0500117 ldr x0, =0x0
118 msr CPUPSELR_EL3, x0
119 ldr x0, =0xEE670D35
120 msr CPUPOR_EL3, x0
121 ldr x0, =0xFFFF0FFF
122 msr CPUPMR_EL3, x0
123 ldr x0, =0x08000020007D
124 msr CPUPCR_EL3, x0
125 isb
laurenw-arm41c3e262023-06-06 16:53:15 -0500126workaround_reset_end neoverse_n1, ERRATUM(1542419)
laurenw-arm94accd32019-08-20 15:51:24 -0500127
laurenw-arm41c3e262023-06-06 16:53:15 -0500128check_erratum_range neoverse_n1, ERRATUM(1542419), CPU_REV(3, 0), CPU_REV(4, 0)
laurenw-arm94accd32019-08-20 15:51:24 -0500129
laurenw-arm41c3e262023-06-06 16:53:15 -0500130workaround_reset_start neoverse_n1, ERRATUM(1868343), ERRATA_N1_1868343
laurenw-armb45d7d72023-06-07 13:26:23 -0500131 sysreg_bit_set NEOVERSE_N1_CPUACTLR_EL1, NEOVERSE_N1_CPUACTLR_EL1_BIT_13
laurenw-arm41c3e262023-06-06 16:53:15 -0500132workaround_reset_end neoverse_n1, ERRATUM(1868343)
johpow01e2428fd2020-08-05 12:27:12 -0500133
laurenw-arm41c3e262023-06-06 16:53:15 -0500134check_erratum_ls neoverse_n1, ERRATUM(1868343), CPU_REV(4, 0)
johpow01f1a84f52020-10-07 14:33:15 -0500135
laurenw-arm41c3e262023-06-06 16:53:15 -0500136workaround_reset_start neoverse_n1, ERRATUM(1946160), ERRATA_N1_1946160
johpow01f1a84f52020-10-07 14:33:15 -0500137 mov x0, #3
138 msr S3_6_C15_C8_0, x0
139 ldr x0, =0x10E3900002
140 msr S3_6_C15_C8_2, x0
141 ldr x0, =0x10FFF00083
142 msr S3_6_C15_C8_3, x0
143 ldr x0, =0x2001003FF
144 msr S3_6_C15_C8_1, x0
johpow01f1a84f52020-10-07 14:33:15 -0500145 mov x0, #4
146 msr S3_6_C15_C8_0, x0
147 ldr x0, =0x10E3800082
148 msr S3_6_C15_C8_2, x0
149 ldr x0, =0x10FFF00083
150 msr S3_6_C15_C8_3, x0
151 ldr x0, =0x2001003FF
152 msr S3_6_C15_C8_1, x0
johpow01f1a84f52020-10-07 14:33:15 -0500153 mov x0, #5
154 msr S3_6_C15_C8_0, x0
155 ldr x0, =0x10E3800200
156 msr S3_6_C15_C8_2, x0
157 ldr x0, =0x10FFF003E0
158 msr S3_6_C15_C8_3, x0
159 ldr x0, =0x2001003FF
160 msr S3_6_C15_C8_1, x0
johpow01f1a84f52020-10-07 14:33:15 -0500161 isb
laurenw-arm41c3e262023-06-06 16:53:15 -0500162workaround_reset_end neoverse_n1, ERRATUM(1946160)
johpow01f1a84f52020-10-07 14:33:15 -0500163
laurenw-arm41c3e262023-06-06 16:53:15 -0500164check_erratum_range neoverse_n1, ERRATUM(1946160), CPU_REV(3, 0), CPU_REV(4, 1)
Bipin Ravi9edf2492022-11-02 16:12:01 -0500165
laurenw-arm41c3e262023-06-06 16:53:15 -0500166workaround_runtime_start neoverse_n1, ERRATUM(2743102), ERRATA_N1_2743102
Bipin Ravi9edf2492022-11-02 16:12:01 -0500167 /* dsb before isb of power down sequence */
168 dsb sy
laurenw-arm41c3e262023-06-06 16:53:15 -0500169workaround_runtime_end neoverse_n1, ERRATUM(2743102)
Bipin Ravi9edf2492022-11-02 16:12:01 -0500170
laurenw-arm41c3e262023-06-06 16:53:15 -0500171check_erratum_ls neoverse_n1, ERRATUM(2743102), CPU_REV(4, 1)
Bipin Ravi9edf2492022-11-02 16:12:01 -0500172
laurenw-arm41c3e262023-06-06 16:53:15 -0500173workaround_reset_start neoverse_n1, CVE(2022, 23960), WORKAROUND_CVE_2022_23960
174#if IMAGE_BL31
175 /*
176 * The Neoverse-N1 generic vectors are overridden to apply errata
177 * mitigation on exception entry from lower ELs.
178 */
laurenw-armb45d7d72023-06-07 13:26:23 -0500179 override_vector_table wa_cve_vbar_neoverse_n1
laurenw-arm41c3e262023-06-06 16:53:15 -0500180#endif /* IMAGE_BL31 */
181workaround_reset_end neoverse_n1, CVE(2022, 23960)
182
183check_erratum_chosen neoverse_n1, CVE(2022, 23960), WORKAROUND_CVE_2022_23960
Bipin Ravi86499742022-01-18 01:59:06 -0600184
laurenw-arm521510a2023-06-27 14:41:38 -0500185/* --------------------------------------------------
186 * Disable speculative loads if Neoverse N1 supports
187 * SSBS.
188 *
189 * Shall clobber: x0.
190 * --------------------------------------------------
191 */
192func neoverse_n1_disable_speculative_loads
193 /* Check if the PE implements SSBS */
194 mrs x0, id_aa64pfr1_el1
195 tst x0, #(ID_AA64PFR1_EL1_SSBS_MASK << ID_AA64PFR1_EL1_SSBS_SHIFT)
196 b.eq 1f
197
198 /* Disable speculative loads */
199 msr SSBS, xzr
200
2011:
202 ret
203endfunc neoverse_n1_disable_speculative_loads
204
laurenw-arm41c3e262023-06-06 16:53:15 -0500205cpu_reset_func_start neoverse_n1
Sami Mujawara8722e92019-05-10 14:28:37 +0100206 bl neoverse_n1_disable_speculative_loads
John Tsichritzis1f9ff492019-03-04 16:41:26 +0000207
Louis Mayencourtb58142b2019-04-18 14:34:11 +0100208 /* Forces all cacheable atomic instructions to be near */
laurenw-armb45d7d72023-06-07 13:26:23 -0500209 sysreg_bit_set NEOVERSE_N1_CPUACTLR2_EL1, NEOVERSE_N1_CPUACTLR2_EL1_BIT_2
Louis Mayencourtb58142b2019-04-18 14:34:11 +0100210 isb
211
Andre Przywara0b7f1b02023-03-21 13:53:19 +0000212#if ENABLE_FEAT_AMU
Dimitris Papastamos89736dd2018-02-13 11:28:02 +0000213 /* Make sure accesses from EL0/EL1 and EL2 are not trapped to EL3 */
laurenw-armb45d7d72023-06-07 13:26:23 -0500214 sysreg_bit_set actlr_el3, NEOVERSE_N1_ACTLR_AMEN_BIT
Dimitris Papastamos89736dd2018-02-13 11:28:02 +0000215 /* Make sure accesses from EL0/EL1 are not trapped to EL2 */
laurenw-armb45d7d72023-06-07 13:26:23 -0500216 sysreg_bit_set actlr_el2, NEOVERSE_N1_ACTLR_AMEN_BIT
Dimitris Papastamos89736dd2018-02-13 11:28:02 +0000217 /* Enable group0 counters */
John Tsichritzis56369c12019-02-19 13:49:06 +0000218 mov x0, #NEOVERSE_N1_AMU_GROUP0_MASK
Dimitris Papastamos89736dd2018-02-13 11:28:02 +0000219 msr CPUAMCNTENSET_EL0, x0
Dimitris Papastamos89736dd2018-02-13 11:28:02 +0000220#endif
Louis Mayencourt8b8b13b2019-06-10 16:43:39 +0100221
Javier Almansa Sobrino9faad3c2020-10-23 13:22:07 +0100222#if NEOVERSE_Nx_EXTERNAL_LLC
Manish Pandey3880a362020-01-24 11:54:44 +0000223 /* Some system may have External LLC, core needs to be made aware */
laurenw-armb45d7d72023-06-07 13:26:23 -0500224 sysreg_bit_set NEOVERSE_N1_CPUECTLR_EL1, NEOVERSE_N1_CPUECTLR_EL1_EXTLLC_BIT
Manish Pandey3880a362020-01-24 11:54:44 +0000225#endif
laurenw-arm41c3e262023-06-06 16:53:15 -0500226cpu_reset_func_end neoverse_n1
Isla Mitchellea84d6b2017-08-03 16:04:46 +0100227
228 /* ---------------------------------------------
229 * HW will do the cache maintenance while powering down
230 * ---------------------------------------------
231 */
John Tsichritzis56369c12019-02-19 13:49:06 +0000232func neoverse_n1_core_pwr_dwn
Isla Mitchellea84d6b2017-08-03 16:04:46 +0100233 /* ---------------------------------------------
234 * Enable CPU power down bit in power control register
235 * ---------------------------------------------
236 */
laurenw-armb45d7d72023-06-07 13:26:23 -0500237 sysreg_bit_set NEOVERSE_N1_CPUPWRCTLR_EL1, NEOVERSE_N1_CORE_PWRDN_EN_MASK
238
239 apply_erratum neoverse_n1, ERRATUM(2743102), ERRATA_N1_2743102
240
Isla Mitchellea84d6b2017-08-03 16:04:46 +0100241 isb
242 ret
John Tsichritzis56369c12019-02-19 13:49:06 +0000243endfunc neoverse_n1_core_pwr_dwn
Isla Mitchellea84d6b2017-08-03 16:04:46 +0100244
laurenw-arm41c3e262023-06-06 16:53:15 -0500245errata_report_shim neoverse_n1
laurenw-arm94accd32019-08-20 15:51:24 -0500246
247/*
248 * Handle trap of EL0 IC IVAU instructions to EL3 by executing a TLB
249 * inner-shareable invalidation to an arbitrary address followed by a DSB.
250 *
251 * x1: Exception Syndrome
252 */
253func neoverse_n1_errata_ic_trap_handler
254 cmp x1, #NEOVERSE_N1_EC_IC_TRAP
255 b.ne 1f
256 tlbi vae3is, xzr
257 dsb sy
258
laurenw-armcd9a9432019-10-11 15:45:24 -0500259 # Skip the IC instruction itself
260 mrs x3, elr_el3
261 add x3, x3, #4
262 msr elr_el3, x3
laurenw-arm94accd32019-08-20 15:51:24 -0500263
264 ldp x0, x1, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_X0]
265 ldp x2, x3, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_X2]
266 ldp x4, x5, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_X4]
267 ldr x30, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_LR]
268
laurenw-arm94accd32019-08-20 15:51:24 -0500269 /*
270 * Issue Error Synchronization Barrier to synchronize SErrors before
271 * exiting EL3. We're running with EAs unmasked, so any synchronized
272 * errors would be taken immediately; therefore no need to inspect
273 * DISR_EL1 register.
274 */
275 esb
Anthony Steinhauser0f7e6012020-01-07 15:44:06 -0800276 exception_return
laurenw-arm94accd32019-08-20 15:51:24 -05002771:
278 ret
279endfunc neoverse_n1_errata_ic_trap_handler
Dimitris Papastamos7ca21db2018-03-26 16:46:01 +0100280
Isla Mitchellea84d6b2017-08-03 16:04:46 +0100281 /* ---------------------------------------------
John Tsichritzis56369c12019-02-19 13:49:06 +0000282 * This function provides neoverse_n1 specific
Isla Mitchellea84d6b2017-08-03 16:04:46 +0100283 * register information for crash reporting.
284 * It needs to return with x6 pointing to
285 * a list of register names in ascii and
286 * x8 - x15 having values of registers to be
287 * reported.
288 * ---------------------------------------------
289 */
John Tsichritzis56369c12019-02-19 13:49:06 +0000290.section .rodata.neoverse_n1_regs, "aS"
291neoverse_n1_regs: /* The ascii list of register names to be reported */
Isla Mitchellea84d6b2017-08-03 16:04:46 +0100292 .asciz "cpuectlr_el1", ""
293
John Tsichritzis56369c12019-02-19 13:49:06 +0000294func neoverse_n1_cpu_reg_dump
295 adr x6, neoverse_n1_regs
296 mrs x8, NEOVERSE_N1_CPUECTLR_EL1
Isla Mitchellea84d6b2017-08-03 16:04:46 +0100297 ret
John Tsichritzis56369c12019-02-19 13:49:06 +0000298endfunc neoverse_n1_cpu_reg_dump
Isla Mitchellea84d6b2017-08-03 16:04:46 +0100299
laurenw-arm94accd32019-08-20 15:51:24 -0500300declare_cpu_ops_eh neoverse_n1, NEOVERSE_N1_MIDR, \
John Tsichritzis56369c12019-02-19 13:49:06 +0000301 neoverse_n1_reset_func, \
laurenw-arm94accd32019-08-20 15:51:24 -0500302 neoverse_n1_errata_ic_trap_handler, \
John Tsichritzis56369c12019-02-19 13:49:06 +0000303 neoverse_n1_core_pwr_dwn