xref: /rk3399_ARM-atf/lib/cpus/aarch64/neoverse_n1.S (revision 8ce40503ad00fe0dd35de6e51551da2b4f08a848)
1b04ea14bSJohn Tsichritzis/*
21fe4a9d1SBipin Ravi * Copyright (c) 2017-2022, Arm Limited and Contributors. All rights reserved.
3b04ea14bSJohn Tsichritzis *
4b04ea14bSJohn Tsichritzis * SPDX-License-Identifier: BSD-3-Clause
5b04ea14bSJohn Tsichritzis */
6b04ea14bSJohn Tsichritzis
7b04ea14bSJohn Tsichritzis#include <arch.h>
8b04ea14bSJohn Tsichritzis#include <asm_macros.S>
9b04ea14bSJohn Tsichritzis#include <cpuamu.h>
10b04ea14bSJohn Tsichritzis#include <cpu_macros.S>
1125bbbd2dSJavier Almansa Sobrino#include <neoverse_n1.h>
121fe4a9d1SBipin Ravi#include "wa_cve_2022_23960_bhb_vector.S"
13b04ea14bSJohn Tsichritzis
14076b5f02SJohn Tsichritzis/* Hardware handled coherency */
15076b5f02SJohn Tsichritzis#if HW_ASSISTED_COHERENCY == 0
16076b5f02SJohn Tsichritzis#error "Neoverse N1 must be compiled with HW_ASSISTED_COHERENCY enabled"
17076b5f02SJohn Tsichritzis#endif
18076b5f02SJohn Tsichritzis
19629d04f5SJohn Tsichritzis/* 64-bit only core */
20629d04f5SJohn Tsichritzis#if CTX_INCLUDE_AARCH32_REGS == 1
21629d04f5SJohn Tsichritzis#error "Neoverse-N1 supports only AArch64. Compile with CTX_INCLUDE_AARCH32_REGS=0"
22629d04f5SJohn Tsichritzis#endif
23629d04f5SJohn Tsichritzis
2480942622Slaurenw-arm	.global neoverse_n1_errata_ic_trap_handler
2580942622Slaurenw-arm
261fe4a9d1SBipin Ravi#if WORKAROUND_CVE_2022_23960
271fe4a9d1SBipin Ravi	wa_cve_2022_23960_bhb_vector_table NEOVERSE_N1_BHB_LOOP_COUNT, neoverse_n1
281fe4a9d1SBipin Ravi#endif /* WORKAROUND_CVE_2022_23960 */
291fe4a9d1SBipin Ravi
30b04ea14bSJohn Tsichritzis/* --------------------------------------------------
315f5d0763SAndre Przywara * Errata Workaround for Neoverse N1 Erratum 1043202.
32da6d75a0SJohn Tsichritzis * This applies to revision r0p0 and r1p0 of Neoverse N1.
33b04ea14bSJohn Tsichritzis * Inputs:
34b04ea14bSJohn Tsichritzis * x0: variant[4:7] and revision[0:3] of current cpu.
35b04ea14bSJohn Tsichritzis * Shall clobber: x0-x17
36b04ea14bSJohn Tsichritzis * --------------------------------------------------
37b04ea14bSJohn Tsichritzis */
38da6d75a0SJohn Tsichritzisfunc errata_n1_1043202_wa
39b04ea14bSJohn Tsichritzis	/* Compare x0 against revision r1p0 */
40b04ea14bSJohn Tsichritzis	mov	x17, x30
41b04ea14bSJohn Tsichritzis	bl	check_errata_1043202
42b04ea14bSJohn Tsichritzis	cbz	x0, 1f
43b04ea14bSJohn Tsichritzis
44b04ea14bSJohn Tsichritzis	/* Apply instruction patching sequence */
45b04ea14bSJohn Tsichritzis	ldr	x0, =0x0
46b04ea14bSJohn Tsichritzis	msr	CPUPSELR_EL3, x0
47b04ea14bSJohn Tsichritzis	ldr	x0, =0xF3BF8F2F
48b04ea14bSJohn Tsichritzis	msr	CPUPOR_EL3, x0
49b04ea14bSJohn Tsichritzis	ldr	x0, =0xFFFFFFFF
50b04ea14bSJohn Tsichritzis	msr	CPUPMR_EL3, x0
51b04ea14bSJohn Tsichritzis	ldr	x0, =0x800200071
52b04ea14bSJohn Tsichritzis	msr	CPUPCR_EL3, x0
53a33ec1e7Slaurenw-arm	isb
54b04ea14bSJohn Tsichritzis1:
55b04ea14bSJohn Tsichritzis	ret	x17
56da6d75a0SJohn Tsichritzisendfunc errata_n1_1043202_wa
57b04ea14bSJohn Tsichritzis
58b04ea14bSJohn Tsichritzisfunc check_errata_1043202
59b04ea14bSJohn Tsichritzis	/* Applies to r0p0 and r1p0 */
60b04ea14bSJohn Tsichritzis	mov	x1, #0x10
61b04ea14bSJohn Tsichritzis	b	cpu_rev_var_ls
62b04ea14bSJohn Tsichritzisendfunc check_errata_1043202
63b04ea14bSJohn Tsichritzis
64eca6e453SSami Mujawar/* --------------------------------------------------
65eca6e453SSami Mujawar * Disable speculative loads if Neoverse N1 supports
66eca6e453SSami Mujawar * SSBS.
67eca6e453SSami Mujawar *
68eca6e453SSami Mujawar * Shall clobber: x0.
69eca6e453SSami Mujawar * --------------------------------------------------
70eca6e453SSami Mujawar */
71eca6e453SSami Mujawarfunc neoverse_n1_disable_speculative_loads
72eca6e453SSami Mujawar	/* Check if the PE implements SSBS */
73eca6e453SSami Mujawar	mrs	x0, id_aa64pfr1_el1
74eca6e453SSami Mujawar	tst	x0, #(ID_AA64PFR1_EL1_SSBS_MASK << ID_AA64PFR1_EL1_SSBS_SHIFT)
75eca6e453SSami Mujawar	b.eq	1f
76eca6e453SSami Mujawar
77eca6e453SSami Mujawar	/* Disable speculative loads */
78eca6e453SSami Mujawar	msr	SSBS, xzr
79eca6e453SSami Mujawar
80eca6e453SSami Mujawar1:
81eca6e453SSami Mujawar	ret
82eca6e453SSami Mujawarendfunc neoverse_n1_disable_speculative_loads
83eca6e453SSami Mujawar
845f5d0763SAndre Przywara/* --------------------------------------------------
85a601afe1Slauwal01 * Errata Workaround for Neoverse N1 Errata #1073348
86a601afe1Slauwal01 * This applies to revision r0p0 and r1p0 of Neoverse N1.
87a601afe1Slauwal01 * Inputs:
88a601afe1Slauwal01 * x0: variant[4:7] and revision[0:3] of current cpu.
89a601afe1Slauwal01 * Shall clobber: x0-x17
90a601afe1Slauwal01 * --------------------------------------------------
91a601afe1Slauwal01 */
92a601afe1Slauwal01func errata_n1_1073348_wa
93a601afe1Slauwal01	/* Compare x0 against revision r1p0 */
94a601afe1Slauwal01	mov	x17, x30
95a601afe1Slauwal01	bl	check_errata_1073348
96a601afe1Slauwal01	cbz	x0, 1f
97a601afe1Slauwal01	mrs	x1, NEOVERSE_N1_CPUACTLR_EL1
98a601afe1Slauwal01	orr	x1, x1, NEOVERSE_N1_CPUACTLR_EL1_BIT_6
99a601afe1Slauwal01	msr	NEOVERSE_N1_CPUACTLR_EL1, x1
100a601afe1Slauwal011:
101a601afe1Slauwal01	ret	x17
102a601afe1Slauwal01endfunc errata_n1_1073348_wa
103a601afe1Slauwal01
104a601afe1Slauwal01func check_errata_1073348
105a601afe1Slauwal01	/* Applies to r0p0 and r1p0 */
106a601afe1Slauwal01	mov	x1, #0x10
107a601afe1Slauwal01	b	cpu_rev_var_ls
108a601afe1Slauwal01endfunc check_errata_1073348
109a601afe1Slauwal01
110a601afe1Slauwal01/* --------------------------------------------------
111e34606f2Slauwal01 * Errata Workaround for Neoverse N1 Errata #1130799
112e34606f2Slauwal01 * This applies to revision <=r2p0 of Neoverse N1.
113e34606f2Slauwal01 * Inputs:
114e34606f2Slauwal01 * x0: variant[4:7] and revision[0:3] of current cpu.
115e34606f2Slauwal01 * Shall clobber: x0-x17
116e34606f2Slauwal01 * --------------------------------------------------
117e34606f2Slauwal01 */
118e34606f2Slauwal01func errata_n1_1130799_wa
119e34606f2Slauwal01	/* Compare x0 against revision r2p0 */
120e34606f2Slauwal01	mov	x17, x30
121e34606f2Slauwal01	bl	check_errata_1130799
122e34606f2Slauwal01	cbz	x0, 1f
123e34606f2Slauwal01	mrs	x1, NEOVERSE_N1_CPUACTLR2_EL1
124e34606f2Slauwal01	orr	x1, x1, NEOVERSE_N1_CPUACTLR2_EL1_BIT_59
125e34606f2Slauwal01	msr	NEOVERSE_N1_CPUACTLR2_EL1, x1
126e34606f2Slauwal011:
127e34606f2Slauwal01	ret	x17
128e34606f2Slauwal01endfunc errata_n1_1130799_wa
129e34606f2Slauwal01
130e34606f2Slauwal01func check_errata_1130799
131e34606f2Slauwal01	/* Applies to <=r2p0 */
132e34606f2Slauwal01	mov	x1, #0x20
133e34606f2Slauwal01	b	cpu_rev_var_ls
134e34606f2Slauwal01endfunc check_errata_1130799
135e34606f2Slauwal01
136e34606f2Slauwal01/* --------------------------------------------------
1372017ab24Slauwal01 * Errata Workaround for Neoverse N1 Errata #1165347
1382017ab24Slauwal01 * This applies to revision <=r2p0 of Neoverse N1.
1392017ab24Slauwal01 * Inputs:
1402017ab24Slauwal01 * x0: variant[4:7] and revision[0:3] of current cpu.
1412017ab24Slauwal01 * Shall clobber: x0-x17
1422017ab24Slauwal01 * --------------------------------------------------
1432017ab24Slauwal01 */
1442017ab24Slauwal01func errata_n1_1165347_wa
1452017ab24Slauwal01	/* Compare x0 against revision r2p0 */
1462017ab24Slauwal01	mov	x17, x30
1472017ab24Slauwal01	bl	check_errata_1165347
1482017ab24Slauwal01	cbz	x0, 1f
1492017ab24Slauwal01	mrs	x1, NEOVERSE_N1_CPUACTLR2_EL1
1502017ab24Slauwal01	orr	x1, x1, NEOVERSE_N1_CPUACTLR2_EL1_BIT_0
1512017ab24Slauwal01	orr	x1, x1, NEOVERSE_N1_CPUACTLR2_EL1_BIT_15
1522017ab24Slauwal01	msr	NEOVERSE_N1_CPUACTLR2_EL1, x1
1532017ab24Slauwal011:
1542017ab24Slauwal01	ret	x17
1552017ab24Slauwal01endfunc errata_n1_1165347_wa
1562017ab24Slauwal01
1572017ab24Slauwal01func check_errata_1165347
1582017ab24Slauwal01	/* Applies to <=r2p0 */
1592017ab24Slauwal01	mov	x1, #0x20
1602017ab24Slauwal01	b	cpu_rev_var_ls
1612017ab24Slauwal01endfunc check_errata_1165347
1622017ab24Slauwal01
1632017ab24Slauwal01/* --------------------------------------------------
164ef5fa7d4Slauwal01 * Errata Workaround for Neoverse N1 Errata #1207823
165ef5fa7d4Slauwal01 * This applies to revision <=r2p0 of Neoverse N1.
166ef5fa7d4Slauwal01 * Inputs:
167ef5fa7d4Slauwal01 * x0: variant[4:7] and revision[0:3] of current cpu.
168ef5fa7d4Slauwal01 * Shall clobber: x0-x17
169ef5fa7d4Slauwal01 * --------------------------------------------------
170ef5fa7d4Slauwal01 */
171ef5fa7d4Slauwal01func errata_n1_1207823_wa
172ef5fa7d4Slauwal01	/* Compare x0 against revision r2p0 */
173ef5fa7d4Slauwal01	mov	x17, x30
174ef5fa7d4Slauwal01	bl	check_errata_1207823
175ef5fa7d4Slauwal01	cbz	x0, 1f
176ef5fa7d4Slauwal01	mrs	x1, NEOVERSE_N1_CPUACTLR2_EL1
177ef5fa7d4Slauwal01	orr	x1, x1, NEOVERSE_N1_CPUACTLR2_EL1_BIT_11
178ef5fa7d4Slauwal01	msr	NEOVERSE_N1_CPUACTLR2_EL1, x1
179ef5fa7d4Slauwal011:
180ef5fa7d4Slauwal01	ret	x17
181ef5fa7d4Slauwal01endfunc errata_n1_1207823_wa
182ef5fa7d4Slauwal01
183ef5fa7d4Slauwal01func check_errata_1207823
184ef5fa7d4Slauwal01	/* Applies to <=r2p0 */
185ef5fa7d4Slauwal01	mov	x1, #0x20
186ef5fa7d4Slauwal01	b	cpu_rev_var_ls
187ef5fa7d4Slauwal01endfunc check_errata_1207823
188ef5fa7d4Slauwal01
189ef5fa7d4Slauwal01/* --------------------------------------------------
1909eceb020Slauwal01 * Errata Workaround for Neoverse N1 Errata #1220197
1919eceb020Slauwal01 * This applies to revision <=r2p0 of Neoverse N1.
1929eceb020Slauwal01 * Inputs:
1939eceb020Slauwal01 * x0: variant[4:7] and revision[0:3] of current cpu.
1949eceb020Slauwal01 * Shall clobber: x0-x17
1959eceb020Slauwal01 * --------------------------------------------------
1969eceb020Slauwal01 */
1979eceb020Slauwal01func errata_n1_1220197_wa
1989eceb020Slauwal01	/* Compare x0 against revision r2p0 */
1999eceb020Slauwal01	mov	x17, x30
2009eceb020Slauwal01	bl	check_errata_1220197
2019eceb020Slauwal01	cbz	x0, 1f
2029eceb020Slauwal01	mrs	x1, NEOVERSE_N1_CPUECTLR_EL1
2039eceb020Slauwal01	orr	x1, x1, NEOVERSE_N1_WS_THR_L2_MASK
2049eceb020Slauwal01	msr	NEOVERSE_N1_CPUECTLR_EL1, x1
2059eceb020Slauwal011:
2069eceb020Slauwal01	ret	x17
2079eceb020Slauwal01endfunc errata_n1_1220197_wa
2089eceb020Slauwal01
2099eceb020Slauwal01func check_errata_1220197
2109eceb020Slauwal01	/* Applies to <=r2p0 */
2119eceb020Slauwal01	mov	x1, #0x20
2129eceb020Slauwal01	b	cpu_rev_var_ls
2139eceb020Slauwal01endfunc check_errata_1220197
2149eceb020Slauwal01
2159eceb020Slauwal01/* --------------------------------------------------
216335b3c79Slauwal01 * Errata Workaround for Neoverse N1 Errata #1257314
217335b3c79Slauwal01 * This applies to revision <=r3p0 of Neoverse N1.
218335b3c79Slauwal01 * Inputs:
219335b3c79Slauwal01 * x0: variant[4:7] and revision[0:3] of current cpu.
220335b3c79Slauwal01 * Shall clobber: x0-x17
221335b3c79Slauwal01 * --------------------------------------------------
222335b3c79Slauwal01 */
223335b3c79Slauwal01func errata_n1_1257314_wa
224335b3c79Slauwal01	/* Compare x0 against revision r3p0 */
225335b3c79Slauwal01	mov	x17, x30
226335b3c79Slauwal01	bl	check_errata_1257314
227335b3c79Slauwal01	cbz	x0, 1f
228335b3c79Slauwal01	mrs	x1, NEOVERSE_N1_CPUACTLR3_EL1
229335b3c79Slauwal01	orr	x1, x1, NEOVERSE_N1_CPUACTLR3_EL1_BIT_10
230335b3c79Slauwal01	msr	NEOVERSE_N1_CPUACTLR3_EL1, x1
231335b3c79Slauwal011:
232335b3c79Slauwal01	ret	x17
233335b3c79Slauwal01endfunc errata_n1_1257314_wa
234335b3c79Slauwal01
235335b3c79Slauwal01func check_errata_1257314
236335b3c79Slauwal01	/* Applies to <=r3p0 */
237335b3c79Slauwal01	mov	x1, #0x30
238335b3c79Slauwal01	b	cpu_rev_var_ls
239335b3c79Slauwal01endfunc check_errata_1257314
240335b3c79Slauwal01
241335b3c79Slauwal01/* --------------------------------------------------
242411f4959Slauwal01 * Errata Workaround for Neoverse N1 Errata #1262606
243411f4959Slauwal01 * This applies to revision <=r3p0 of Neoverse N1.
244411f4959Slauwal01 * Inputs:
245411f4959Slauwal01 * x0: variant[4:7] and revision[0:3] of current cpu.
246411f4959Slauwal01 * Shall clobber: x0-x17
247411f4959Slauwal01 * --------------------------------------------------
248411f4959Slauwal01 */
249411f4959Slauwal01func errata_n1_1262606_wa
250411f4959Slauwal01	/* Compare x0 against revision r3p0 */
251411f4959Slauwal01	mov	x17, x30
252411f4959Slauwal01	bl	check_errata_1262606
253411f4959Slauwal01	cbz	x0, 1f
254411f4959Slauwal01	mrs	x1, NEOVERSE_N1_CPUACTLR_EL1
255411f4959Slauwal01	orr	x1, x1, NEOVERSE_N1_CPUACTLR_EL1_BIT_13
256411f4959Slauwal01	msr	NEOVERSE_N1_CPUACTLR_EL1, x1
257411f4959Slauwal011:
258411f4959Slauwal01	ret	x17
259411f4959Slauwal01endfunc errata_n1_1262606_wa
260411f4959Slauwal01
261411f4959Slauwal01func check_errata_1262606
262411f4959Slauwal01	/* Applies to <=r3p0 */
263411f4959Slauwal01	mov	x1, #0x30
264411f4959Slauwal01	b	cpu_rev_var_ls
265411f4959Slauwal01endfunc check_errata_1262606
266411f4959Slauwal01
267411f4959Slauwal01/* --------------------------------------------------
26811c48370Slauwal01 * Errata Workaround for Neoverse N1 Errata #1262888
26911c48370Slauwal01 * This applies to revision <=r3p0 of Neoverse N1.
27011c48370Slauwal01 * Inputs:
27111c48370Slauwal01 * x0: variant[4:7] and revision[0:3] of current cpu.
27211c48370Slauwal01 * Shall clobber: x0-x17
27311c48370Slauwal01 * --------------------------------------------------
27411c48370Slauwal01 */
27511c48370Slauwal01func errata_n1_1262888_wa
27611c48370Slauwal01	/* Compare x0 against revision r3p0 */
27711c48370Slauwal01	mov	x17, x30
27811c48370Slauwal01	bl	check_errata_1262888
27911c48370Slauwal01	cbz	x0, 1f
28011c48370Slauwal01	mrs	x1, NEOVERSE_N1_CPUECTLR_EL1
28111c48370Slauwal01	orr	x1, x1, NEOVERSE_N1_CPUECTLR_EL1_MM_TLBPF_DIS_BIT
28211c48370Slauwal01	msr	NEOVERSE_N1_CPUECTLR_EL1, x1
28311c48370Slauwal011:
28411c48370Slauwal01	ret	x17
28511c48370Slauwal01endfunc errata_n1_1262888_wa
28611c48370Slauwal01
28711c48370Slauwal01func check_errata_1262888
28811c48370Slauwal01	/* Applies to <=r3p0 */
28911c48370Slauwal01	mov	x1, #0x30
29011c48370Slauwal01	b	cpu_rev_var_ls
29111c48370Slauwal01endfunc check_errata_1262888
29211c48370Slauwal01
29311c48370Slauwal01/* --------------------------------------------------
2944d8801feSlauwal01 * Errata Workaround for Neoverse N1 Errata #1275112
2954d8801feSlauwal01 * This applies to revision <=r3p0 of Neoverse N1.
2964d8801feSlauwal01 * Inputs:
2974d8801feSlauwal01 * x0: variant[4:7] and revision[0:3] of current cpu.
2984d8801feSlauwal01 * Shall clobber: x0-x17
2994d8801feSlauwal01 * --------------------------------------------------
3004d8801feSlauwal01 */
3014d8801feSlauwal01func errata_n1_1275112_wa
3024d8801feSlauwal01	/* Compare x0 against revision r3p0 */
3034d8801feSlauwal01	mov	x17, x30
3044d8801feSlauwal01	bl	check_errata_1275112
3054d8801feSlauwal01	cbz	x0, 1f
3064d8801feSlauwal01	mrs	x1, NEOVERSE_N1_CPUACTLR_EL1
3074d8801feSlauwal01	orr	x1, x1, NEOVERSE_N1_CPUACTLR_EL1_BIT_13
3084d8801feSlauwal01	msr	NEOVERSE_N1_CPUACTLR_EL1, x1
3094d8801feSlauwal011:
3104d8801feSlauwal01	ret	x17
3114d8801feSlauwal01endfunc errata_n1_1275112_wa
3124d8801feSlauwal01
3134d8801feSlauwal01func check_errata_1275112
3144d8801feSlauwal01	/* Applies to <=r3p0 */
3154d8801feSlauwal01	mov	x1, #0x30
3164d8801feSlauwal01	b	cpu_rev_var_ls
3174d8801feSlauwal01endfunc check_errata_1275112
3184d8801feSlauwal01
3194d8801feSlauwal01/* --------------------------------------------------
3205f5d0763SAndre Przywara * Errata Workaround for Neoverse N1 Erratum 1315703.
3215f5d0763SAndre Przywara * This applies to revision <= r3p0 of Neoverse N1.
3225f5d0763SAndre Przywara * Inputs:
3235f5d0763SAndre Przywara * x0: variant[4:7] and revision[0:3] of current cpu.
3245f5d0763SAndre Przywara * Shall clobber: x0-x17
3255f5d0763SAndre Przywara * --------------------------------------------------
3265f5d0763SAndre Przywara */
3275f5d0763SAndre Przywarafunc errata_n1_1315703_wa
3285f5d0763SAndre Przywara	/* Compare x0 against revision r3p1 */
3295f5d0763SAndre Przywara	mov	x17, x30
3305f5d0763SAndre Przywara	bl	check_errata_1315703
3315f5d0763SAndre Przywara	cbz	x0, 1f
3325f5d0763SAndre Przywara
3335f5d0763SAndre Przywara	mrs	x0, NEOVERSE_N1_CPUACTLR2_EL1
3345f5d0763SAndre Przywara	orr	x0, x0, #NEOVERSE_N1_CPUACTLR2_EL1_BIT_16
3355f5d0763SAndre Przywara	msr	NEOVERSE_N1_CPUACTLR2_EL1, x0
3365f5d0763SAndre Przywara
3375f5d0763SAndre Przywara1:
3385f5d0763SAndre Przywara	ret	x17
3395f5d0763SAndre Przywaraendfunc errata_n1_1315703_wa
3405f5d0763SAndre Przywara
3415f5d0763SAndre Przywarafunc check_errata_1315703
3425f5d0763SAndre Przywara	/* Applies to everything <= r3p0. */
3435f5d0763SAndre Przywara	mov	x1, #0x30
3445f5d0763SAndre Przywara	b	cpu_rev_var_ls
3455f5d0763SAndre Przywaraendfunc check_errata_1315703
3465f5d0763SAndre Przywara
34780942622Slaurenw-arm/* --------------------------------------------------
34880942622Slaurenw-arm * Errata Workaround for Neoverse N1 Erratum 1542419.
34980942622Slaurenw-arm * This applies to revisions r3p0 - r4p0 of Neoverse N1
35080942622Slaurenw-arm * Inputs:
35180942622Slaurenw-arm * x0: variant[4:7] and revision[0:3] of current cpu.
35280942622Slaurenw-arm * Shall clobber: x0-x17
35380942622Slaurenw-arm * --------------------------------------------------
35480942622Slaurenw-arm */
35580942622Slaurenw-armfunc errata_n1_1542419_wa
35680942622Slaurenw-arm	/* Compare x0 against revision r3p0 and r4p0 */
35780942622Slaurenw-arm	mov	x17, x30
35880942622Slaurenw-arm	bl	check_errata_1542419
35980942622Slaurenw-arm	cbz	x0, 1f
36080942622Slaurenw-arm
36180942622Slaurenw-arm	/* Apply instruction patching sequence */
36280942622Slaurenw-arm	ldr	x0, =0x0
36380942622Slaurenw-arm	msr	CPUPSELR_EL3, x0
36480942622Slaurenw-arm	ldr	x0, =0xEE670D35
36580942622Slaurenw-arm	msr	CPUPOR_EL3, x0
36680942622Slaurenw-arm	ldr	x0, =0xFFFF0FFF
36780942622Slaurenw-arm	msr	CPUPMR_EL3, x0
36880942622Slaurenw-arm	ldr	x0, =0x08000020007D
36980942622Slaurenw-arm	msr	CPUPCR_EL3, x0
37080942622Slaurenw-arm	isb
37180942622Slaurenw-arm1:
37280942622Slaurenw-arm	ret	x17
37380942622Slaurenw-armendfunc errata_n1_1542419_wa
37480942622Slaurenw-arm
37580942622Slaurenw-armfunc check_errata_1542419
37680942622Slaurenw-arm	/* Applies to everything r3p0 - r4p0. */
37780942622Slaurenw-arm	mov	x1, #0x30
37880942622Slaurenw-arm	mov	x2, #0x40
37980942622Slaurenw-arm	b	cpu_rev_var_range
38080942622Slaurenw-armendfunc check_errata_1542419
38180942622Slaurenw-arm
38261f0ffc4Sjohpow01	/* --------------------------------------------------
38361f0ffc4Sjohpow01	 * Errata Workaround for Neoverse N1 Errata #1868343.
38461f0ffc4Sjohpow01	 * This applies to revision <= r4p0 of Neoverse N1.
38561f0ffc4Sjohpow01	 * This workaround is the same as the workaround for
38661f0ffc4Sjohpow01	 * errata 1262606 and 1275112 but applies to a wider
38761f0ffc4Sjohpow01	 * revision range.
38861f0ffc4Sjohpow01	 * Inputs:
38961f0ffc4Sjohpow01	 * x0: variant[4:7] and revision[0:3] of current cpu.
39061f0ffc4Sjohpow01	 * Shall clobber: x0-x17
39161f0ffc4Sjohpow01	 * --------------------------------------------------
39261f0ffc4Sjohpow01	 */
39361f0ffc4Sjohpow01func errata_n1_1868343_wa
39461f0ffc4Sjohpow01	/*
39561f0ffc4Sjohpow01	 * Compare x0 against revision r4p0
39661f0ffc4Sjohpow01	 */
39761f0ffc4Sjohpow01	mov	x17, x30
39861f0ffc4Sjohpow01	bl	check_errata_1868343
39961f0ffc4Sjohpow01	cbz	x0, 1f
40061f0ffc4Sjohpow01	mrs	x1, NEOVERSE_N1_CPUACTLR_EL1
40161f0ffc4Sjohpow01	orr	x1, x1, NEOVERSE_N1_CPUACTLR_EL1_BIT_13
40261f0ffc4Sjohpow01	msr	NEOVERSE_N1_CPUACTLR_EL1, x1
40361f0ffc4Sjohpow01	isb
40461f0ffc4Sjohpow011:
40561f0ffc4Sjohpow01	ret	x17
40661f0ffc4Sjohpow01endfunc errata_n1_1868343_wa
40761f0ffc4Sjohpow01
40861f0ffc4Sjohpow01func check_errata_1868343
40961f0ffc4Sjohpow01	/* Applies to everything <= r4p0 */
41061f0ffc4Sjohpow01	mov	x1, #0x40
41161f0ffc4Sjohpow01	b	cpu_rev_var_ls
41261f0ffc4Sjohpow01endfunc check_errata_1868343
41361f0ffc4Sjohpow01
414263ee781Sjohpow01	/* --------------------------------------------------
415263ee781Sjohpow01	 * Errata Workaround for Neoverse N1 Errata #1946160.
416263ee781Sjohpow01	 * This applies to revisions r3p0, r3p1, r4p0, and
417263ee781Sjohpow01	 * r4p1 of Neoverse N1. It also exists in r0p0, r1p0,
418263ee781Sjohpow01	 * and r2p0 but there is no fix in these revisions.
419263ee781Sjohpow01	 * Inputs:
420263ee781Sjohpow01	 * x0: variant[4:7] and revision[0:3] of current cpu.
421263ee781Sjohpow01	 * Shall clobber: x0-x17
422263ee781Sjohpow01	 * --------------------------------------------------
423263ee781Sjohpow01	 */
424263ee781Sjohpow01func errata_n1_1946160_wa
425263ee781Sjohpow01	/*
426263ee781Sjohpow01	 * Compare x0 against r3p0 - r4p1
427263ee781Sjohpow01	 */
428263ee781Sjohpow01	mov	x17, x30
429263ee781Sjohpow01	bl	check_errata_1946160
430263ee781Sjohpow01	cbz	x0, 1f
431263ee781Sjohpow01
432263ee781Sjohpow01	mov	x0, #3
433263ee781Sjohpow01	msr	S3_6_C15_C8_0, x0
434263ee781Sjohpow01	ldr	x0, =0x10E3900002
435263ee781Sjohpow01	msr	S3_6_C15_C8_2, x0
436263ee781Sjohpow01	ldr	x0, =0x10FFF00083
437263ee781Sjohpow01	msr	S3_6_C15_C8_3, x0
438263ee781Sjohpow01	ldr	x0, =0x2001003FF
439263ee781Sjohpow01	msr	S3_6_C15_C8_1, x0
440263ee781Sjohpow01
441263ee781Sjohpow01	mov	x0, #4
442263ee781Sjohpow01	msr	S3_6_C15_C8_0, x0
443263ee781Sjohpow01	ldr	x0, =0x10E3800082
444263ee781Sjohpow01	msr	S3_6_C15_C8_2, x0
445263ee781Sjohpow01	ldr	x0, =0x10FFF00083
446263ee781Sjohpow01	msr	S3_6_C15_C8_3, x0
447263ee781Sjohpow01	ldr	x0, =0x2001003FF
448263ee781Sjohpow01	msr	S3_6_C15_C8_1, x0
449263ee781Sjohpow01
450263ee781Sjohpow01	mov	x0, #5
451263ee781Sjohpow01	msr	S3_6_C15_C8_0, x0
452263ee781Sjohpow01	ldr	x0, =0x10E3800200
453263ee781Sjohpow01	msr	S3_6_C15_C8_2, x0
454263ee781Sjohpow01	ldr	x0, =0x10FFF003E0
455263ee781Sjohpow01	msr	S3_6_C15_C8_3, x0
456263ee781Sjohpow01	ldr	x0, =0x2001003FF
457263ee781Sjohpow01	msr	S3_6_C15_C8_1, x0
458263ee781Sjohpow01
459263ee781Sjohpow01	isb
460263ee781Sjohpow011:
461263ee781Sjohpow01	ret	x17
462263ee781Sjohpow01endfunc errata_n1_1946160_wa
463263ee781Sjohpow01
464263ee781Sjohpow01func check_errata_1946160
465263ee781Sjohpow01	/* Applies to r3p0 - r4p1. */
466263ee781Sjohpow01	mov	x1, #0x30
467263ee781Sjohpow01	mov	x2, #0x41
468263ee781Sjohpow01	b	cpu_rev_var_range
469263ee781Sjohpow01endfunc check_errata_1946160
470263ee781Sjohpow01
471*8ce40503SBipin Ravi	/* ----------------------------------------------------
472*8ce40503SBipin Ravi	 * Errata Workaround for Neoverse N1 Errata #2743102
473*8ce40503SBipin Ravi	 * This applies to revisions <= r4p1 and is still open.
474*8ce40503SBipin Ravi	 * x0: variant[4:7] and revision[0:3] of current cpu.
475*8ce40503SBipin Ravi	 * Shall clobber: x0-x17
476*8ce40503SBipin Ravi	 * ----------------------------------------------------
477*8ce40503SBipin Ravi	 */
478*8ce40503SBipin Ravifunc errata_n1_2743102_wa
479*8ce40503SBipin Ravi	mov	x17, x30
480*8ce40503SBipin Ravi	bl	check_errata_2743102
481*8ce40503SBipin Ravi	cbz	x0, 1f
482*8ce40503SBipin Ravi
483*8ce40503SBipin Ravi	/* dsb before isb of power down sequence */
484*8ce40503SBipin Ravi	dsb	sy
485*8ce40503SBipin Ravi1:
486*8ce40503SBipin Ravi	ret	x17
487*8ce40503SBipin Raviendfunc errata_n1_2743102_wa
488*8ce40503SBipin Ravi
489*8ce40503SBipin Ravifunc check_errata_2743102
490*8ce40503SBipin Ravi	/* Applies to all revisions <= r4p1 */
491*8ce40503SBipin Ravi	mov	x1, #0x41
492*8ce40503SBipin Ravi	b	cpu_rev_var_ls
493*8ce40503SBipin Raviendfunc check_errata_2743102
494*8ce40503SBipin Ravi
4951fe4a9d1SBipin Ravifunc check_errata_cve_2022_23960
4961fe4a9d1SBipin Ravi#if WORKAROUND_CVE_2022_23960
4971fe4a9d1SBipin Ravi	mov	x0, #ERRATA_APPLIES
4981fe4a9d1SBipin Ravi#else
4991fe4a9d1SBipin Ravi	mov	x0, #ERRATA_MISSING
5001fe4a9d1SBipin Ravi#endif
5011fe4a9d1SBipin Ravi	ret
5021fe4a9d1SBipin Raviendfunc check_errata_cve_2022_23960
5031fe4a9d1SBipin Ravi
504da6d75a0SJohn Tsichritzisfunc neoverse_n1_reset_func
505b04ea14bSJohn Tsichritzis	mov	x19, x30
5068074448fSJohn Tsichritzis
507eca6e453SSami Mujawar	bl neoverse_n1_disable_speculative_loads
5088074448fSJohn Tsichritzis
509632ab3ebSLouis Mayencourt	/* Forces all cacheable atomic instructions to be near */
510632ab3ebSLouis Mayencourt	mrs	x0, NEOVERSE_N1_CPUACTLR2_EL1
511632ab3ebSLouis Mayencourt	orr	x0, x0, #NEOVERSE_N1_CPUACTLR2_EL1_BIT_2
512632ab3ebSLouis Mayencourt	msr	NEOVERSE_N1_CPUACTLR2_EL1, x0
513632ab3ebSLouis Mayencourt	isb
514632ab3ebSLouis Mayencourt
515b04ea14bSJohn Tsichritzis	bl	cpu_get_rev_var
516b04ea14bSJohn Tsichritzis	mov	x18, x0
517b04ea14bSJohn Tsichritzis
518da6d75a0SJohn Tsichritzis#if ERRATA_N1_1043202
519b04ea14bSJohn Tsichritzis	mov	x0, x18
520da6d75a0SJohn Tsichritzis	bl	errata_n1_1043202_wa
521b04ea14bSJohn Tsichritzis#endif
522b04ea14bSJohn Tsichritzis
523a601afe1Slauwal01#if ERRATA_N1_1073348
524a601afe1Slauwal01	mov	x0, x18
525a601afe1Slauwal01	bl	errata_n1_1073348_wa
526a601afe1Slauwal01#endif
527a601afe1Slauwal01
528e34606f2Slauwal01#if ERRATA_N1_1130799
529e34606f2Slauwal01	mov	x0, x18
530e34606f2Slauwal01	bl	errata_n1_1130799_wa
531e34606f2Slauwal01#endif
532e34606f2Slauwal01
5332017ab24Slauwal01#if ERRATA_N1_1165347
5342017ab24Slauwal01	mov	x0, x18
5352017ab24Slauwal01	bl	errata_n1_1165347_wa
5362017ab24Slauwal01#endif
5372017ab24Slauwal01
538ef5fa7d4Slauwal01#if ERRATA_N1_1207823
539ef5fa7d4Slauwal01	mov	x0, x18
540ef5fa7d4Slauwal01	bl	errata_n1_1207823_wa
541ef5fa7d4Slauwal01#endif
542ef5fa7d4Slauwal01
5439eceb020Slauwal01#if ERRATA_N1_1220197
5449eceb020Slauwal01	mov	x0, x18
5459eceb020Slauwal01	bl	errata_n1_1220197_wa
5469eceb020Slauwal01#endif
5479eceb020Slauwal01
548335b3c79Slauwal01#if ERRATA_N1_1257314
549335b3c79Slauwal01	mov	x0, x18
550335b3c79Slauwal01	bl	errata_n1_1257314_wa
551335b3c79Slauwal01#endif
552335b3c79Slauwal01
553411f4959Slauwal01#if ERRATA_N1_1262606
554411f4959Slauwal01	mov	x0, x18
555411f4959Slauwal01	bl	errata_n1_1262606_wa
556411f4959Slauwal01#endif
557411f4959Slauwal01
55811c48370Slauwal01#if ERRATA_N1_1262888
55911c48370Slauwal01	mov	x0, x18
56011c48370Slauwal01	bl	errata_n1_1262888_wa
56111c48370Slauwal01#endif
56211c48370Slauwal01
5634d8801feSlauwal01#if ERRATA_N1_1275112
5644d8801feSlauwal01	mov	x0, x18
5654d8801feSlauwal01	bl	errata_n1_1275112_wa
5664d8801feSlauwal01#endif
5674d8801feSlauwal01
5685f5d0763SAndre Przywara#if ERRATA_N1_1315703
5695f5d0763SAndre Przywara	mov	x0, x18
5705f5d0763SAndre Przywara	bl	errata_n1_1315703_wa
5715f5d0763SAndre Przywara#endif
5725f5d0763SAndre Przywara
57380942622Slaurenw-arm#if ERRATA_N1_1542419
57480942622Slaurenw-arm	mov	x0, x18
57580942622Slaurenw-arm	bl	errata_n1_1542419_wa
57680942622Slaurenw-arm#endif
57780942622Slaurenw-arm
57861f0ffc4Sjohpow01#if ERRATA_N1_1868343
57961f0ffc4Sjohpow01	mov	x0, x18
58061f0ffc4Sjohpow01	bl	errata_n1_1868343_wa
58161f0ffc4Sjohpow01#endif
58261f0ffc4Sjohpow01
583263ee781Sjohpow01#if ERRATA_N1_1946160
584263ee781Sjohpow01	mov	x0, x18
585263ee781Sjohpow01	bl	errata_n1_1946160_wa
586263ee781Sjohpow01#endif
587263ee781Sjohpow01
588b04ea14bSJohn Tsichritzis#if ENABLE_AMU
589b04ea14bSJohn Tsichritzis	/* Make sure accesses from EL0/EL1 and EL2 are not trapped to EL3 */
590b04ea14bSJohn Tsichritzis	mrs	x0, actlr_el3
591da6d75a0SJohn Tsichritzis	orr	x0, x0, #NEOVERSE_N1_ACTLR_AMEN_BIT
592b04ea14bSJohn Tsichritzis	msr	actlr_el3, x0
593b04ea14bSJohn Tsichritzis
594b04ea14bSJohn Tsichritzis	/* Make sure accesses from EL0/EL1 are not trapped to EL2 */
595b04ea14bSJohn Tsichritzis	mrs	x0, actlr_el2
596da6d75a0SJohn Tsichritzis	orr	x0, x0, #NEOVERSE_N1_ACTLR_AMEN_BIT
597b04ea14bSJohn Tsichritzis	msr	actlr_el2, x0
598b04ea14bSJohn Tsichritzis
599b04ea14bSJohn Tsichritzis	/* Enable group0 counters */
600da6d75a0SJohn Tsichritzis	mov	x0, #NEOVERSE_N1_AMU_GROUP0_MASK
601b04ea14bSJohn Tsichritzis	msr	CPUAMCNTENSET_EL0, x0
602b04ea14bSJohn Tsichritzis#endif
603bb2f077aSLouis Mayencourt
60425bbbd2dSJavier Almansa Sobrino#if NEOVERSE_Nx_EXTERNAL_LLC
605f2d6b4eeSManish Pandey	/* Some system may have External LLC, core needs to be made aware */
606f2d6b4eeSManish Pandey	mrs     x0, NEOVERSE_N1_CPUECTLR_EL1
607f2d6b4eeSManish Pandey	orr     x0, x0, NEOVERSE_N1_CPUECTLR_EL1_EXTLLC_BIT
608f2d6b4eeSManish Pandey	msr     NEOVERSE_N1_CPUECTLR_EL1, x0
609f2d6b4eeSManish Pandey#endif
610f2d6b4eeSManish Pandey
611bb2f077aSLouis Mayencourt#if ERRATA_DSU_936184
612bb2f077aSLouis Mayencourt	bl	errata_dsu_936184_wa
613bb2f077aSLouis Mayencourt#endif
614bb2f077aSLouis Mayencourt
6151fe4a9d1SBipin Ravi#if IMAGE_BL31 && WORKAROUND_CVE_2022_23960
6161fe4a9d1SBipin Ravi	/*
6171fe4a9d1SBipin Ravi	 * The Neoverse-N1 generic vectors are overridden to apply errata
6181fe4a9d1SBipin Ravi         * mitigation on exception entry from lower ELs.
6191fe4a9d1SBipin Ravi	 */
6201fe4a9d1SBipin Ravi	adr	x0, wa_cve_vbar_neoverse_n1
6211fe4a9d1SBipin Ravi	msr	vbar_el3, x0
6221fe4a9d1SBipin Ravi#endif /* IMAGE_BL31 && WORKAROUND_CVE_2022_23960 */
6231fe4a9d1SBipin Ravi
6247d6f7518Slauwal01	isb
625b04ea14bSJohn Tsichritzis	ret	x19
626da6d75a0SJohn Tsichritzisendfunc neoverse_n1_reset_func
627b04ea14bSJohn Tsichritzis
628b04ea14bSJohn Tsichritzis	/* ---------------------------------------------
629b04ea14bSJohn Tsichritzis	 * HW will do the cache maintenance while powering down
630b04ea14bSJohn Tsichritzis	 * ---------------------------------------------
631b04ea14bSJohn Tsichritzis	 */
632da6d75a0SJohn Tsichritzisfunc neoverse_n1_core_pwr_dwn
633b04ea14bSJohn Tsichritzis	/* ---------------------------------------------
634b04ea14bSJohn Tsichritzis	 * Enable CPU power down bit in power control register
635b04ea14bSJohn Tsichritzis	 * ---------------------------------------------
636b04ea14bSJohn Tsichritzis	 */
637da6d75a0SJohn Tsichritzis	mrs	x0, NEOVERSE_N1_CPUPWRCTLR_EL1
638da6d75a0SJohn Tsichritzis	orr	x0, x0, #NEOVERSE_N1_CORE_PWRDN_EN_MASK
639da6d75a0SJohn Tsichritzis	msr	NEOVERSE_N1_CPUPWRCTLR_EL1, x0
640*8ce40503SBipin Ravi#if ERRATA_N1_2743102
641*8ce40503SBipin Ravi	mov	x15, x30
642*8ce40503SBipin Ravi	bl	cpu_get_rev_var
643*8ce40503SBipin Ravi	bl	errata_n1_2743102_wa
644*8ce40503SBipin Ravi	mov	x30, x15
645*8ce40503SBipin Ravi#endif /* ERRATA_N1_2743102 */
646b04ea14bSJohn Tsichritzis	isb
647b04ea14bSJohn Tsichritzis	ret
648da6d75a0SJohn Tsichritzisendfunc neoverse_n1_core_pwr_dwn
649b04ea14bSJohn Tsichritzis
650b04ea14bSJohn Tsichritzis#if REPORT_ERRATA
651b04ea14bSJohn Tsichritzis/*
652da6d75a0SJohn Tsichritzis * Errata printing function for Neoverse N1. Must follow AAPCS.
653b04ea14bSJohn Tsichritzis */
654da6d75a0SJohn Tsichritzisfunc neoverse_n1_errata_report
655b04ea14bSJohn Tsichritzis	stp	x8, x30, [sp, #-16]!
656b04ea14bSJohn Tsichritzis
657b04ea14bSJohn Tsichritzis	bl	cpu_get_rev_var
658b04ea14bSJohn Tsichritzis	mov	x8, x0
659b04ea14bSJohn Tsichritzis
660b04ea14bSJohn Tsichritzis	/*
661b04ea14bSJohn Tsichritzis	 * Report all errata. The revision-variant information is passed to
662b04ea14bSJohn Tsichritzis	 * checking functions of each errata.
663b04ea14bSJohn Tsichritzis	 */
664da6d75a0SJohn Tsichritzis	report_errata ERRATA_N1_1043202, neoverse_n1, 1043202
665a601afe1Slauwal01	report_errata ERRATA_N1_1073348, neoverse_n1, 1073348
666e34606f2Slauwal01	report_errata ERRATA_N1_1130799, neoverse_n1, 1130799
6672017ab24Slauwal01	report_errata ERRATA_N1_1165347, neoverse_n1, 1165347
668ef5fa7d4Slauwal01	report_errata ERRATA_N1_1207823, neoverse_n1, 1207823
6699eceb020Slauwal01	report_errata ERRATA_N1_1220197, neoverse_n1, 1220197
670335b3c79Slauwal01	report_errata ERRATA_N1_1257314, neoverse_n1, 1257314
671411f4959Slauwal01	report_errata ERRATA_N1_1262606, neoverse_n1, 1262606
67211c48370Slauwal01	report_errata ERRATA_N1_1262888, neoverse_n1, 1262888
6734d8801feSlauwal01	report_errata ERRATA_N1_1275112, neoverse_n1, 1275112
6745f5d0763SAndre Przywara	report_errata ERRATA_N1_1315703, neoverse_n1, 1315703
67580942622Slaurenw-arm	report_errata ERRATA_N1_1542419, neoverse_n1, 1542419
67661f0ffc4Sjohpow01	report_errata ERRATA_N1_1868343, neoverse_n1, 1868343
677263ee781Sjohpow01	report_errata ERRATA_N1_1946160, neoverse_n1, 1946160
678*8ce40503SBipin Ravi	report_errata ERRATA_N1_2743102, neoverse_n1, 2743102
679bb2f077aSLouis Mayencourt	report_errata ERRATA_DSU_936184, neoverse_n1, dsu_936184
6801fe4a9d1SBipin Ravi	report_errata WORKAROUND_CVE_2022_23960, neoverse_n1, cve_2022_23960
681b04ea14bSJohn Tsichritzis
682b04ea14bSJohn Tsichritzis	ldp	x8, x30, [sp], #16
683b04ea14bSJohn Tsichritzis	ret
684da6d75a0SJohn Tsichritzisendfunc neoverse_n1_errata_report
685b04ea14bSJohn Tsichritzis#endif
686b04ea14bSJohn Tsichritzis
68780942622Slaurenw-arm/*
68880942622Slaurenw-arm * Handle trap of EL0 IC IVAU instructions to EL3 by executing a TLB
68980942622Slaurenw-arm * inner-shareable invalidation to an arbitrary address followed by a DSB.
69080942622Slaurenw-arm *
69180942622Slaurenw-arm * x1: Exception Syndrome
69280942622Slaurenw-arm */
69380942622Slaurenw-armfunc neoverse_n1_errata_ic_trap_handler
69480942622Slaurenw-arm	cmp	x1, #NEOVERSE_N1_EC_IC_TRAP
69580942622Slaurenw-arm	b.ne	1f
69680942622Slaurenw-arm	tlbi	vae3is, xzr
69780942622Slaurenw-arm	dsb	sy
69880942622Slaurenw-arm
69980942622Slaurenw-arm	# Skip the IC instruction itself
70080942622Slaurenw-arm	mrs     x3, elr_el3
70180942622Slaurenw-arm	add     x3, x3, #4
70280942622Slaurenw-arm	msr     elr_el3, x3
70380942622Slaurenw-arm
70480942622Slaurenw-arm	ldp	x0, x1, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_X0]
70580942622Slaurenw-arm	ldp	x2, x3, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_X2]
70680942622Slaurenw-arm	ldp	x4, x5, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_X4]
70780942622Slaurenw-arm	ldr	x30, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_LR]
70880942622Slaurenw-arm
70980942622Slaurenw-arm#if IMAGE_BL31 && RAS_EXTENSION
71080942622Slaurenw-arm	/*
71180942622Slaurenw-arm	 * Issue Error Synchronization Barrier to synchronize SErrors before
71280942622Slaurenw-arm	 * exiting EL3. We're running with EAs unmasked, so any synchronized
71380942622Slaurenw-arm	 * errors would be taken immediately; therefore no need to inspect
71480942622Slaurenw-arm	 * DISR_EL1 register.
71580942622Slaurenw-arm	 */
71680942622Slaurenw-arm	esb
71780942622Slaurenw-arm#endif
718f461fe34SAnthony Steinhauser	exception_return
71980942622Slaurenw-arm1:
72080942622Slaurenw-arm	ret
72180942622Slaurenw-armendfunc neoverse_n1_errata_ic_trap_handler
72280942622Slaurenw-arm
723b04ea14bSJohn Tsichritzis	/* ---------------------------------------------
724da6d75a0SJohn Tsichritzis	 * This function provides neoverse_n1 specific
725b04ea14bSJohn Tsichritzis	 * register information for crash reporting.
726b04ea14bSJohn Tsichritzis	 * It needs to return with x6 pointing to
727b04ea14bSJohn Tsichritzis	 * a list of register names in ascii and
728b04ea14bSJohn Tsichritzis	 * x8 - x15 having values of registers to be
729b04ea14bSJohn Tsichritzis	 * reported.
730b04ea14bSJohn Tsichritzis	 * ---------------------------------------------
731b04ea14bSJohn Tsichritzis	 */
732da6d75a0SJohn Tsichritzis.section .rodata.neoverse_n1_regs, "aS"
733da6d75a0SJohn Tsichritzisneoverse_n1_regs:  /* The ascii list of register names to be reported */
734b04ea14bSJohn Tsichritzis	.asciz	"cpuectlr_el1", ""
735b04ea14bSJohn Tsichritzis
736da6d75a0SJohn Tsichritzisfunc neoverse_n1_cpu_reg_dump
737da6d75a0SJohn Tsichritzis	adr	x6, neoverse_n1_regs
738da6d75a0SJohn Tsichritzis	mrs	x8, NEOVERSE_N1_CPUECTLR_EL1
739b04ea14bSJohn Tsichritzis	ret
740da6d75a0SJohn Tsichritzisendfunc neoverse_n1_cpu_reg_dump
741b04ea14bSJohn Tsichritzis
74280942622Slaurenw-armdeclare_cpu_ops_eh neoverse_n1, NEOVERSE_N1_MIDR, \
743da6d75a0SJohn Tsichritzis	neoverse_n1_reset_func, \
74480942622Slaurenw-arm	neoverse_n1_errata_ic_trap_handler, \
745da6d75a0SJohn Tsichritzis	neoverse_n1_core_pwr_dwn
746