xref: /arm-trusted-firmware/lib/cpus/aarch64/neoverse_n2.S (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu/*
2*91f16700Schasinglulu * Copyright (c) 2020-2023, Arm Limited. All rights reserved.
3*91f16700Schasinglulu *
4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause
5*91f16700Schasinglulu */
6*91f16700Schasinglulu
7*91f16700Schasinglulu#include <arch.h>
8*91f16700Schasinglulu#include <asm_macros.S>
9*91f16700Schasinglulu#include <cpu_macros.S>
10*91f16700Schasinglulu#include <neoverse_n2.h>
11*91f16700Schasinglulu#include "wa_cve_2022_23960_bhb_vector.S"
12*91f16700Schasinglulu
13*91f16700Schasinglulu/* Hardware handled coherency */
14*91f16700Schasinglulu#if HW_ASSISTED_COHERENCY == 0
15*91f16700Schasinglulu#error "Neoverse N2 must be compiled with HW_ASSISTED_COHERENCY enabled"
16*91f16700Schasinglulu#endif
17*91f16700Schasinglulu
18*91f16700Schasinglulu/* 64-bit only core */
19*91f16700Schasinglulu#if CTX_INCLUDE_AARCH32_REGS == 1
20*91f16700Schasinglulu#error "Neoverse-N2 supports only AArch64. Compile with CTX_INCLUDE_AARCH32_REGS=0"
21*91f16700Schasinglulu#endif
22*91f16700Schasinglulu
23*91f16700Schasinglulu#if WORKAROUND_CVE_2022_23960
24*91f16700Schasinglulu	wa_cve_2022_23960_bhb_vector_table NEOVERSE_N2_BHB_LOOP_COUNT, neoverse_n2
25*91f16700Schasinglulu#endif /* WORKAROUND_CVE_2022_23960 */
26*91f16700Schasinglulu
27*91f16700Schasinglulu/*
28*91f16700Schasinglulu * ERRATA_DSU_2313941:
29*91f16700Schasinglulu * The errata is defined in dsu_helpers.S and applies to Neoverse N2.
30*91f16700Schasinglulu * Henceforth creating symbolic names to the already existing errata
31*91f16700Schasinglulu * workaround functions to get them registered under the Errata Framework.
32*91f16700Schasinglulu */
33*91f16700Schasinglulu.equ check_erratum_neoverse_n2_2313941, check_errata_dsu_2313941
34*91f16700Schasinglulu.equ erratum_neoverse_n2_2313941_wa, errata_dsu_2313941_wa
35*91f16700Schasingluluadd_erratum_entry neoverse_n2, ERRATUM(2313941), ERRATA_DSU_2313941, APPLY_AT_RESET
36*91f16700Schasinglulu
37*91f16700Schasingluluworkaround_reset_start neoverse_n2, ERRATUM(2002655), ERRATA_N2_2002655
38*91f16700Schasinglulu	/* Apply instruction patching sequence */
39*91f16700Schasinglulu	ldr x0,=0x6
40*91f16700Schasinglulu	msr S3_6_c15_c8_0,x0
41*91f16700Schasinglulu	ldr x0,=0xF3A08002
42*91f16700Schasinglulu	msr S3_6_c15_c8_2,x0
43*91f16700Schasinglulu	ldr x0,=0xFFF0F7FE
44*91f16700Schasinglulu	msr S3_6_c15_c8_3,x0
45*91f16700Schasinglulu	ldr x0,=0x40000001003ff
46*91f16700Schasinglulu	msr S3_6_c15_c8_1,x0
47*91f16700Schasinglulu	ldr x0,=0x7
48*91f16700Schasinglulu	msr S3_6_c15_c8_0,x0
49*91f16700Schasinglulu	ldr x0,=0xBF200000
50*91f16700Schasinglulu	msr S3_6_c15_c8_2,x0
51*91f16700Schasinglulu	ldr x0,=0xFFEF0000
52*91f16700Schasinglulu	msr S3_6_c15_c8_3,x0
53*91f16700Schasinglulu	ldr x0,=0x40000001003f3
54*91f16700Schasinglulu	msr S3_6_c15_c8_1,x0
55*91f16700Schasingluluworkaround_reset_end neoverse_n2, ERRATUM(2002655)
56*91f16700Schasinglulu
57*91f16700Schasinglulucheck_erratum_ls neoverse_n2, ERRATUM(2002655), CPU_REV(0, 0)
58*91f16700Schasinglulu
59*91f16700Schasingluluworkaround_reset_start neoverse_n2, ERRATUM(2025414), ERRATA_N2_2025414
60*91f16700Schasinglulu	sysreg_bit_set NEOVERSE_N2_CPUECTLR_EL1, NEOVERSE_N2_CPUECTLR_EL1_PFSTIDIS_BIT
61*91f16700Schasingluluworkaround_reset_end neoverse_n2, ERRATUM(2025414)
62*91f16700Schasinglulu
63*91f16700Schasinglulucheck_erratum_ls neoverse_n2, ERRATUM(2025414), CPU_REV(0, 0)
64*91f16700Schasinglulu
65*91f16700Schasingluluworkaround_reset_start neoverse_n2, ERRATUM(2067956), ERRATA_N2_2067956
66*91f16700Schasinglulu	sysreg_bit_set NEOVERSE_N2_CPUACTLR_EL1, NEOVERSE_N2_CPUACTLR_EL1_BIT_46
67*91f16700Schasingluluworkaround_reset_end neoverse_n2, ERRATUM(2067956)
68*91f16700Schasinglulu
69*91f16700Schasinglulucheck_erratum_ls neoverse_n2, ERRATUM(2067956), CPU_REV(0, 0)
70*91f16700Schasinglulu
71*91f16700Schasingluluworkaround_runtime_start neoverse_n2, ERRATUM(2009478), ERRATA_N2_2009478
72*91f16700Schasinglulu	/* Stash ERRSELR_EL1 in x2 */
73*91f16700Schasinglulu	mrs     x2, ERRSELR_EL1
74*91f16700Schasinglulu
75*91f16700Schasinglulu	/* Select error record 0 and clear ED bit */
76*91f16700Schasinglulu	msr     ERRSELR_EL1, xzr
77*91f16700Schasinglulu	mrs     x1, ERXCTLR_EL1
78*91f16700Schasinglulu	bfi     x1, xzr, #ERXCTLR_ED_SHIFT, #1
79*91f16700Schasinglulu	msr     ERXCTLR_EL1, x1
80*91f16700Schasinglulu
81*91f16700Schasinglulu	/* Restore ERRSELR_EL1 from x2 */
82*91f16700Schasinglulu	msr     ERRSELR_EL1, x2
83*91f16700Schasingluluworkaround_runtime_end neoverse_n2, ERRATUM(2009478), NO_ISB
84*91f16700Schasinglulu
85*91f16700Schasinglulucheck_erratum_ls neoverse_n2, ERRATUM(2009478), CPU_REV(0, 0)
86*91f16700Schasinglulu
87*91f16700Schasingluluworkaround_reset_start neoverse_n2, ERRATUM(2138953), ERRATA_N2_2138953
88*91f16700Schasinglulu	/* Apply instruction patching sequence */
89*91f16700Schasinglulu	mrs	x1, NEOVERSE_N2_CPUECTLR2_EL1
90*91f16700Schasinglulu	mov	x0, #NEOVERSE_N2_CPUECTLR2_EL1_PF_MODE_CNSRV
91*91f16700Schasinglulu	bfi	x1, x0, #CPUECTLR2_EL1_PF_MODE_LSB, #CPUECTLR2_EL1_PF_MODE_WIDTH
92*91f16700Schasinglulu	msr	NEOVERSE_N2_CPUECTLR2_EL1, x1
93*91f16700Schasingluluworkaround_reset_end neoverse_n2, ERRATUM(2138953)
94*91f16700Schasinglulu
95*91f16700Schasinglulucheck_erratum_ls neoverse_n2, ERRATUM(2138953), CPU_REV(0, 3)
96*91f16700Schasinglulu
97*91f16700Schasingluluworkaround_reset_start neoverse_n2, ERRATUM(2138956), ERRATA_N2_2138956
98*91f16700Schasinglulu	/* Apply instruction patching sequence */
99*91f16700Schasinglulu	ldr	x0,=0x3
100*91f16700Schasinglulu	msr	S3_6_c15_c8_0,x0
101*91f16700Schasinglulu	ldr	x0,=0xF3A08002
102*91f16700Schasinglulu	msr	S3_6_c15_c8_2,x0
103*91f16700Schasinglulu	ldr	x0,=0xFFF0F7FE
104*91f16700Schasinglulu	msr	S3_6_c15_c8_3,x0
105*91f16700Schasinglulu	ldr	x0,=0x10002001003FF
106*91f16700Schasinglulu	msr	S3_6_c15_c8_1,x0
107*91f16700Schasinglulu	ldr	x0,=0x4
108*91f16700Schasinglulu	msr	S3_6_c15_c8_0,x0
109*91f16700Schasinglulu	ldr	x0,=0xBF200000
110*91f16700Schasinglulu	msr	S3_6_c15_c8_2,x0
111*91f16700Schasinglulu	ldr	x0,=0xFFEF0000
112*91f16700Schasinglulu	msr	S3_6_c15_c8_3,x0
113*91f16700Schasinglulu	ldr	x0,=0x10002001003F3
114*91f16700Schasinglulu	msr	S3_6_c15_c8_1,x0
115*91f16700Schasingluluworkaround_reset_end neoverse_n2, ERRATUM(2138956)
116*91f16700Schasinglulu
117*91f16700Schasinglulucheck_erratum_ls neoverse_n2, ERRATUM(2138956), CPU_REV(0, 0)
118*91f16700Schasinglulu
119*91f16700Schasinglulu
120*91f16700Schasingluluworkaround_reset_start neoverse_n2, ERRATUM(2138958), ERRATA_N2_2138958
121*91f16700Schasinglulu	/* Apply instruction patching sequence */
122*91f16700Schasinglulu	sysreg_bit_set NEOVERSE_N2_CPUACTLR5_EL1, NEOVERSE_N2_CPUACTLR5_EL1_BIT_13
123*91f16700Schasingluluworkaround_reset_end neoverse_n2, ERRATUM(2138958)
124*91f16700Schasinglulu
125*91f16700Schasinglulucheck_erratum_ls neoverse_n2, ERRATUM(2138958), CPU_REV(0, 0)
126*91f16700Schasinglulu
127*91f16700Schasingluluworkaround_reset_start neoverse_n2, ERRATUM(2189731), ERRATA_N2_2189731
128*91f16700Schasinglulu	sysreg_bit_set NEOVERSE_N2_CPUACTLR5_EL1, NEOVERSE_N2_CPUACTLR5_EL1_BIT_44
129*91f16700Schasingluluworkaround_reset_end neoverse_n2, ERRATUM(2189731)
130*91f16700Schasinglulu
131*91f16700Schasinglulucheck_erratum_ls neoverse_n2, ERRATUM(2189731), CPU_REV(0, 0)
132*91f16700Schasinglulu
133*91f16700Schasingluluworkaround_reset_start neoverse_n2, ERRATUM(2242400), ERRATA_N2_2242400
134*91f16700Schasinglulu	/* Apply instruction patching sequence */
135*91f16700Schasinglulu	sysreg_bit_set NEOVERSE_N2_CPUACTLR5_EL1, NEOVERSE_N2_CPUACTLR5_EL1_BIT_17
136*91f16700Schasinglulu	ldr	x0, =0x2
137*91f16700Schasinglulu	msr	S3_6_c15_c8_0, x0
138*91f16700Schasinglulu	ldr	x0, =0x10F600E000
139*91f16700Schasinglulu	msr	S3_6_c15_c8_2, x0
140*91f16700Schasinglulu	ldr	x0, =0x10FF80E000
141*91f16700Schasinglulu	msr	S3_6_c15_c8_3, x0
142*91f16700Schasinglulu	ldr	x0, =0x80000000003FF
143*91f16700Schasinglulu	msr	S3_6_c15_c8_1, x0
144*91f16700Schasingluluworkaround_reset_end neoverse_n2, ERRATUM(2242400)
145*91f16700Schasinglulu
146*91f16700Schasinglulucheck_erratum_ls neoverse_n2, ERRATUM(2242400), CPU_REV(0, 0)
147*91f16700Schasinglulu
148*91f16700Schasingluluworkaround_reset_start neoverse_n2, ERRATUM(2242415), ERRATA_N2_2242415
149*91f16700Schasinglulu	sysreg_bit_set NEOVERSE_N2_CPUACTLR_EL1, NEOVERSE_N2_CPUACTLR_EL1_BIT_22
150*91f16700Schasingluluworkaround_reset_end neoverse_n2, ERRATUM(2242415)
151*91f16700Schasinglulu
152*91f16700Schasinglulucheck_erratum_ls neoverse_n2, ERRATUM(2242415), CPU_REV(0, 0)
153*91f16700Schasinglulu
154*91f16700Schasingluluworkaround_reset_start neoverse_n2, ERRATUM(2280757), ERRATA_N2_2280757
155*91f16700Schasinglulu	/* Apply instruction patching sequence */
156*91f16700Schasinglulu	sysreg_bit_set NEOVERSE_N2_CPUACTLR_EL1, NEOVERSE_N2_CPUACTLR_EL1_BIT_22
157*91f16700Schasingluluworkaround_reset_end neoverse_n2, ERRATUM(2280757)
158*91f16700Schasinglulu
159*91f16700Schasinglulucheck_erratum_ls neoverse_n2, ERRATUM(2280757), CPU_REV(0, 0)
160*91f16700Schasinglulu
161*91f16700Schasingluluworkaround_runtime_start neoverse_n2, ERRATUM(2326639), ERRATA_N2_2326639
162*91f16700Schasinglulu	/* Set bit 36 in ACTLR2_EL1 */
163*91f16700Schasinglulu	sysreg_bit_set NEOVERSE_N2_CPUACTLR2_EL1, NEOVERSE_N2_CPUACTLR2_EL1_BIT_36
164*91f16700Schasingluluworkaround_runtime_end neoverse_n2, ERRATUM(2326639)
165*91f16700Schasinglulu
166*91f16700Schasinglulucheck_erratum_ls neoverse_n2, ERRATUM(2326639), CPU_REV(0, 0)
167*91f16700Schasinglulu
168*91f16700Schasingluluworkaround_runtime_start neoverse_n2, ERRATUM(2340933), ERRATA_N2_2340933
169*91f16700Schasinglulu	/* Set bit 61 in CPUACTLR5_EL1 */
170*91f16700Schasinglulu	sysreg_bit_set NEOVERSE_N2_CPUACTLR5_EL1, BIT(61)
171*91f16700Schasingluluworkaround_runtime_end neoverse_n2, ERRATUM(2340933)
172*91f16700Schasinglulu
173*91f16700Schasinglulucheck_erratum_ls neoverse_n2, ERRATUM(2340933), CPU_REV(0, 0)
174*91f16700Schasinglulu
175*91f16700Schasingluluworkaround_runtime_start neoverse_n2, ERRATUM(2346952), ERRATA_N2_2346952
176*91f16700Schasinglulu	/* Set TXREQ to STATIC and full L2 TQ size */
177*91f16700Schasinglulu	mrs	x1, NEOVERSE_N2_CPUECTLR2_EL1
178*91f16700Schasinglulu	mov	x0, #CPUECTLR2_EL1_TXREQ_STATIC_FULL
179*91f16700Schasinglulu	bfi	x1, x0, #CPUECTLR2_EL1_TXREQ_LSB, #CPUECTLR2_EL1_TXREQ_WIDTH
180*91f16700Schasinglulu	msr	NEOVERSE_N2_CPUECTLR2_EL1, x1
181*91f16700Schasingluluworkaround_runtime_end neoverse_n2, ERRATUM(2346952)
182*91f16700Schasinglulu
183*91f16700Schasinglulucheck_erratum_ls neoverse_n2, ERRATUM(2346952), CPU_REV(0, 2)
184*91f16700Schasinglulu
185*91f16700Schasingluluworkaround_reset_start neoverse_n2, ERRATUM(2376738), ERRATA_N2_2376738
186*91f16700Schasinglulu	/* Set CPUACTLR2_EL1[0] to 1 to force PLDW/PFRM
187*91f16700Schasinglulu	 * ST to behave like PLD/PFRM LD and not cause
188*91f16700Schasinglulu	 * invalidations to other PE caches.
189*91f16700Schasinglulu	 */
190*91f16700Schasinglulu	sysreg_bit_set NEOVERSE_N2_CPUACTLR2_EL1, NEOVERSE_N2_CPUACTLR2_EL1_BIT_0
191*91f16700Schasingluluworkaround_reset_end neoverse_n2, ERRATUM(2376738)
192*91f16700Schasinglulu
193*91f16700Schasinglulucheck_erratum_ls neoverse_n2, ERRATUM(2376738), CPU_REV(0, 3)
194*91f16700Schasinglulu
195*91f16700Schasingluluworkaround_reset_start neoverse_n2, ERRATUM(2388450), ERRATA_N2_2388450
196*91f16700Schasinglulu	/*Set bit 40 in ACTLR2_EL1 */
197*91f16700Schasinglulu	sysreg_bit_set NEOVERSE_N2_CPUACTLR2_EL1, NEOVERSE_N2_CPUACTLR2_EL1_BIT_40
198*91f16700Schasingluluworkaround_reset_end neoverse_n2, ERRATUM(2388450)
199*91f16700Schasinglulu
200*91f16700Schasinglulucheck_erratum_ls neoverse_n2, ERRATUM(2388450), CPU_REV(0, 0)
201*91f16700Schasinglulu
202*91f16700Schasingluluworkaround_reset_start neoverse_n2, ERRATUM(2743014), ERRATA_N2_2743014
203*91f16700Schasinglulu	/* Set CPUACTLR5_EL1[56:55] to 2'b01 */
204*91f16700Schasinglulu	sysreg_bit_set NEOVERSE_N2_CPUACTLR5_EL1, NEOVERSE_N2_CPUACTLR5_EL1_BIT_55
205*91f16700Schasinglulu	sysreg_bit_clear NEOVERSE_N2_CPUACTLR5_EL1, NEOVERSE_N2_CPUACTLR5_EL1_BIT_56
206*91f16700Schasingluluworkaround_reset_end neoverse_n2, ERRATUM(2743014)
207*91f16700Schasinglulu
208*91f16700Schasinglulucheck_erratum_ls neoverse_n2, ERRATUM(2743014), CPU_REV(0, 2)
209*91f16700Schasinglulu
210*91f16700Schasingluluworkaround_runtime_start neoverse_n2, ERRATUM(2743089), ERRATA_N2_2743089
211*91f16700Schasinglulu	/* dsb before isb of power down sequence */
212*91f16700Schasinglulu	dsb	sy
213*91f16700Schasingluluworkaround_runtime_end neoverse_n2, ERRATUM(2743089)
214*91f16700Schasinglulu
215*91f16700Schasinglulucheck_erratum_ls neoverse_n2, ERRATUM(2743089), CPU_REV(0, 2)
216*91f16700Schasinglulu
217*91f16700Schasingluluworkaround_reset_start neoverse_n2, ERRATUM(2779511), ERRATA_N2_2779511
218*91f16700Schasinglulu	/* Set bit 47 in ACTLR3_EL1 */
219*91f16700Schasinglulu	sysreg_bit_set NEOVERSE_N2_CPUACTLR3_EL1, NEOVERSE_N2_CPUACTLR3_EL1_BIT_47
220*91f16700Schasingluluworkaround_reset_end neoverse_n2, ERRATUM(2779511)
221*91f16700Schasinglulu
222*91f16700Schasinglulucheck_erratum_ls neoverse_n2, ERRATUM(2779511), CPU_REV(0, 2)
223*91f16700Schasinglulu
224*91f16700Schasingluluworkaround_reset_start neoverse_n2, CVE(2022,23960), WORKAROUND_CVE_2022_23960
225*91f16700Schasinglulu#if IMAGE_BL31
226*91f16700Schasinglulu	/*
227*91f16700Schasinglulu	 * The Neoverse-N2 generic vectors are overridden to apply errata
228*91f16700Schasinglulu         * mitigation on exception entry from lower ELs.
229*91f16700Schasinglulu	 */
230*91f16700Schasinglulu	override_vector_table wa_cve_vbar_neoverse_n2
231*91f16700Schasinglulu#endif /* IMAGE_BL31 */
232*91f16700Schasingluluworkaround_reset_end neoverse_n2, CVE(2022,23960)
233*91f16700Schasinglulu
234*91f16700Schasinglulucheck_erratum_chosen neoverse_n2, CVE(2022, 23960), WORKAROUND_CVE_2022_23960
235*91f16700Schasinglulu
236*91f16700Schasinglulu	/* -------------------------------------------
237*91f16700Schasinglulu	 * The CPU Ops reset function for Neoverse N2.
238*91f16700Schasinglulu	 * -------------------------------------------
239*91f16700Schasinglulu	 */
240*91f16700Schasinglulucpu_reset_func_start neoverse_n2
241*91f16700Schasinglulu
242*91f16700Schasinglulu	/* Check if the PE implements SSBS */
243*91f16700Schasinglulu	mrs	x0, id_aa64pfr1_el1
244*91f16700Schasinglulu	tst	x0, #(ID_AA64PFR1_EL1_SSBS_MASK << ID_AA64PFR1_EL1_SSBS_SHIFT)
245*91f16700Schasinglulu	b.eq	1f
246*91f16700Schasinglulu
247*91f16700Schasinglulu	/* Disable speculative loads */
248*91f16700Schasinglulu	msr	SSBS, xzr
249*91f16700Schasinglulu1:
250*91f16700Schasinglulu	/* Force all cacheable atomic instructions to be near */
251*91f16700Schasinglulu	sysreg_bit_set NEOVERSE_N2_CPUACTLR2_EL1, NEOVERSE_N2_CPUACTLR2_EL1_BIT_2
252*91f16700Schasinglulu
253*91f16700Schasinglulu#if ENABLE_FEAT_AMU
254*91f16700Schasinglulu	/* Make sure accesses from EL0/EL1 and EL2 are not trapped to EL3 */
255*91f16700Schasinglulu	sysreg_bit_set cptr_el3, TAM_BIT
256*91f16700Schasinglulu	/* Make sure accesses from EL0/EL1 are not trapped to EL2 */
257*91f16700Schasinglulu	sysreg_bit_set cptr_el2, TAM_BIT
258*91f16700Schasinglulu	/* No need to enable the counters as this would be done at el3 exit */
259*91f16700Schasinglulu#endif
260*91f16700Schasinglulu
261*91f16700Schasinglulu#if NEOVERSE_Nx_EXTERNAL_LLC
262*91f16700Schasinglulu	/* Some systems may have External LLC, core needs to be made aware */
263*91f16700Schasinglulu	sysreg_bit_set NEOVERSE_N2_CPUECTLR_EL1, NEOVERSE_N2_CPUECTLR_EL1_EXTLLC_BIT
264*91f16700Schasinglulu#endif
265*91f16700Schasinglulucpu_reset_func_end neoverse_n2
266*91f16700Schasinglulu
267*91f16700Schasinglulufunc neoverse_n2_core_pwr_dwn
268*91f16700Schasinglulu
269*91f16700Schasinglulu	apply_erratum neoverse_n2, ERRATUM(2009478), ERRATA_N2_2009478
270*91f16700Schasinglulu	apply_erratum neoverse_n2, ERRATUM(2326639), ERRATA_N2_2326639, NO_GET_CPU_REV
271*91f16700Schasinglulu
272*91f16700Schasinglulu	/* ---------------------------------------------------
273*91f16700Schasinglulu	 * Enable CPU power down bit in power control register
274*91f16700Schasinglulu	 * No need to do cache maintenance here.
275*91f16700Schasinglulu	 * ---------------------------------------------------
276*91f16700Schasinglulu	 */
277*91f16700Schasinglulu	sysreg_bit_set NEOVERSE_N2_CPUPWRCTLR_EL1, NEOVERSE_N2_CORE_PWRDN_EN_BIT
278*91f16700Schasinglulu
279*91f16700Schasinglulu	apply_erratum neoverse_n2, ERRATUM(2743089), ERRATA_N2_2743089
280*91f16700Schasinglulu
281*91f16700Schasinglulu	isb
282*91f16700Schasinglulu	ret
283*91f16700Schasingluluendfunc neoverse_n2_core_pwr_dwn
284*91f16700Schasinglulu
285*91f16700Schasingluluerrata_report_shim neoverse_n2
286*91f16700Schasinglulu
287*91f16700Schasinglulu	/* ---------------------------------------------
288*91f16700Schasinglulu	 * This function provides Neoverse N2 specific
289*91f16700Schasinglulu	 * register information for crash reporting.
290*91f16700Schasinglulu	 * It needs to return with x6 pointing to
291*91f16700Schasinglulu	 * a list of register names in ASCII and
292*91f16700Schasinglulu	 * x8 - x15 having values of registers to be
293*91f16700Schasinglulu	 * reported.
294*91f16700Schasinglulu	 * ---------------------------------------------
295*91f16700Schasinglulu	 */
296*91f16700Schasinglulu.section .rodata.neoverse_n2_regs, "aS"
297*91f16700Schasingluluneoverse_n2_regs:  /* The ASCII list of register names to be reported */
298*91f16700Schasinglulu	.asciz	"cpupwrctlr_el1", ""
299*91f16700Schasinglulu
300*91f16700Schasinglulufunc neoverse_n2_cpu_reg_dump
301*91f16700Schasinglulu	adr	x6, neoverse_n2_regs
302*91f16700Schasinglulu	mrs	x8, NEOVERSE_N2_CPUPWRCTLR_EL1
303*91f16700Schasinglulu	ret
304*91f16700Schasingluluendfunc neoverse_n2_cpu_reg_dump
305*91f16700Schasinglulu
306*91f16700Schasingluludeclare_cpu_ops neoverse_n2, NEOVERSE_N2_MIDR, \
307*91f16700Schasinglulu	neoverse_n2_reset_func, \
308*91f16700Schasinglulu	neoverse_n2_core_pwr_dwn
309