xref: /rk3399_ARM-atf/lib/cpus/aarch64/neoverse_n2.S (revision ccb5616272d081b91a8fd7e6c2497ff7a60bfdbb)
125bbbd2dSJavier Almansa Sobrino/*
2a438f434SArvind Ram Prakash * Copyright (c) 2020-2023, Arm Limited. All rights reserved.
325bbbd2dSJavier Almansa Sobrino *
425bbbd2dSJavier Almansa Sobrino * SPDX-License-Identifier: BSD-3-Clause
525bbbd2dSJavier Almansa Sobrino */
625bbbd2dSJavier Almansa Sobrino
725bbbd2dSJavier Almansa Sobrino#include <arch.h>
825bbbd2dSJavier Almansa Sobrino#include <asm_macros.S>
925bbbd2dSJavier Almansa Sobrino#include <cpu_macros.S>
1025bbbd2dSJavier Almansa Sobrino#include <neoverse_n2.h>
111fe4a9d1SBipin Ravi#include "wa_cve_2022_23960_bhb_vector.S"
1225bbbd2dSJavier Almansa Sobrino
1325bbbd2dSJavier Almansa Sobrino/* Hardware handled coherency */
1425bbbd2dSJavier Almansa Sobrino#if HW_ASSISTED_COHERENCY == 0
1525bbbd2dSJavier Almansa Sobrino#error "Neoverse N2 must be compiled with HW_ASSISTED_COHERENCY enabled"
1625bbbd2dSJavier Almansa Sobrino#endif
1725bbbd2dSJavier Almansa Sobrino
1825bbbd2dSJavier Almansa Sobrino/* 64-bit only core */
1925bbbd2dSJavier Almansa Sobrino#if CTX_INCLUDE_AARCH32_REGS == 1
2025bbbd2dSJavier Almansa Sobrino#error "Neoverse-N2 supports only AArch64. Compile with CTX_INCLUDE_AARCH32_REGS=0"
2125bbbd2dSJavier Almansa Sobrino#endif
2225bbbd2dSJavier Almansa Sobrino
231fe4a9d1SBipin Ravi#if WORKAROUND_CVE_2022_23960
241fe4a9d1SBipin Ravi	wa_cve_2022_23960_bhb_vector_table NEOVERSE_N2_BHB_LOOP_COUNT, neoverse_n2
251fe4a9d1SBipin Ravi#endif /* WORKAROUND_CVE_2022_23960 */
261fe4a9d1SBipin Ravi
27*ccb56162SArvind Ram Prakash/*
28*ccb56162SArvind Ram Prakash * ERRATA_DSU_2313941:
29*ccb56162SArvind Ram Prakash * The errata is defined in dsu_helpers.S and applies to Neoverse N2.
30*ccb56162SArvind Ram Prakash * Henceforth creating symbolic names to the already existing errata
31*ccb56162SArvind Ram Prakash * workaround functions to get them registered under the Errata Framework.
329380f754Snayanpatel-arm */
33*ccb56162SArvind Ram Prakash.equ check_erratum_neoverse_n2_2313941, check_errata_dsu_2313941
34*ccb56162SArvind Ram Prakash.equ erratum_neoverse_n2_2313941_wa, errata_dsu_2313941_wa
35*ccb56162SArvind Ram Prakashadd_erratum_entry neoverse_n2, ERRATUM(2313941), ERRATA_DSU_2313941, APPLY_AT_RESET
369380f754Snayanpatel-arm
37*ccb56162SArvind Ram Prakashworkaround_reset_start neoverse_n2, ERRATUM(2002655), ERRATA_N2_2002655
389380f754Snayanpatel-arm	/* Apply instruction patching sequence */
399380f754Snayanpatel-arm	ldr x0,=0x6
409380f754Snayanpatel-arm	msr S3_6_c15_c8_0,x0
419380f754Snayanpatel-arm	ldr x0,=0xF3A08002
429380f754Snayanpatel-arm	msr S3_6_c15_c8_2,x0
439380f754Snayanpatel-arm	ldr x0,=0xFFF0F7FE
449380f754Snayanpatel-arm	msr S3_6_c15_c8_3,x0
459380f754Snayanpatel-arm	ldr x0,=0x40000001003ff
469380f754Snayanpatel-arm	msr S3_6_c15_c8_1,x0
479380f754Snayanpatel-arm	ldr x0,=0x7
489380f754Snayanpatel-arm	msr S3_6_c15_c8_0,x0
499380f754Snayanpatel-arm	ldr x0,=0xBF200000
509380f754Snayanpatel-arm	msr S3_6_c15_c8_2,x0
519380f754Snayanpatel-arm	ldr x0,=0xFFEF0000
529380f754Snayanpatel-arm	msr S3_6_c15_c8_3,x0
539380f754Snayanpatel-arm	ldr x0,=0x40000001003f3
549380f754Snayanpatel-arm	msr S3_6_c15_c8_1,x0
55*ccb56162SArvind Ram Prakashworkaround_reset_end neoverse_n2, ERRATUM(2002655)
569380f754Snayanpatel-arm
57*ccb56162SArvind Ram Prakashcheck_erratum_ls neoverse_n2, ERRATUM(2002655), CPU_REV(0, 0)
589380f754Snayanpatel-arm
59*ccb56162SArvind Ram Prakashworkaround_reset_start neoverse_n2, ERRATUM(2025414), ERRATA_N2_2025414
604618b2bfSBipin Ravi	mrs     x1, NEOVERSE_N2_CPUECTLR_EL1
614618b2bfSBipin Ravi	orr     x1, x1, NEOVERSE_N2_CPUECTLR_EL1_PFSTIDIS_BIT
624618b2bfSBipin Ravi	msr     NEOVERSE_N2_CPUECTLR_EL1, x1
63*ccb56162SArvind Ram Prakashworkaround_reset_end neoverse_n2, ERRATUM(2025414)
644618b2bfSBipin Ravi
65*ccb56162SArvind Ram Prakashcheck_erratum_ls neoverse_n2, ERRATUM(2025414), CPU_REV(0, 0)
664618b2bfSBipin Ravi
67*ccb56162SArvind Ram Prakashworkaround_reset_start neoverse_n2, ERRATUM(2067956), ERRATA_N2_2067956
68a438f434SArvind Ram Prakash	mrs	x1, NEOVERSE_N2_CPUACTLR_EL1
69a438f434SArvind Ram Prakash	orr	x1, x1, NEOVERSE_N2_CPUACTLR_EL1_BIT_46
70a438f434SArvind Ram Prakash	msr	NEOVERSE_N2_CPUACTLR_EL1, x1
71*ccb56162SArvind Ram Prakashworkaround_reset_end neoverse_n2, ERRATUM(2067956)
727cfae932SBipin Ravi
73*ccb56162SArvind Ram Prakashcheck_erratum_ls neoverse_n2, ERRATUM(2067956), CPU_REV(0, 0)
74a438f434SArvind Ram Prakash
75*ccb56162SArvind Ram Prakashworkaround_reset_start neoverse_n2, ERRATUM(2138953), ERRATA_N2_2138953
76a438f434SArvind Ram Prakash	/* Apply instruction patching sequence */
77a438f434SArvind Ram Prakash	mrs	x1, NEOVERSE_N2_CPUECTLR2_EL1
78a438f434SArvind Ram Prakash	mov	x0, #NEOVERSE_N2_CPUECTLR2_EL1_PF_MODE_CNSRV
79a438f434SArvind Ram Prakash	bfi	x1, x0, #CPUECTLR2_EL1_PF_MODE_LSB, #CPUECTLR2_EL1_PF_MODE_WIDTH
80a438f434SArvind Ram Prakash	msr	NEOVERSE_N2_CPUECTLR2_EL1, x1
81*ccb56162SArvind Ram Prakashworkaround_reset_end neoverse_n2, ERRATUM(2138953)
82a438f434SArvind Ram Prakash
83*ccb56162SArvind Ram Prakashcheck_erratum_ls neoverse_n2, ERRATUM(2138953), CPU_REV(0, 0)
847cfae932SBipin Ravi
85*ccb56162SArvind Ram Prakashworkaround_reset_start neoverse_n2, ERRATUM(2138956), ERRATA_N2_2138956
861cafb08dSBipin Ravi	/* Apply instruction patching sequence */
871cafb08dSBipin Ravi	ldr	x0,=0x3
881cafb08dSBipin Ravi	msr	S3_6_c15_c8_0,x0
891cafb08dSBipin Ravi	ldr	x0,=0xF3A08002
901cafb08dSBipin Ravi	msr	S3_6_c15_c8_2,x0
911cafb08dSBipin Ravi	ldr	x0,=0xFFF0F7FE
921cafb08dSBipin Ravi	msr	S3_6_c15_c8_3,x0
931cafb08dSBipin Ravi	ldr	x0,=0x10002001003FF
941cafb08dSBipin Ravi	msr	S3_6_c15_c8_1,x0
951cafb08dSBipin Ravi	ldr	x0,=0x4
961cafb08dSBipin Ravi	msr	S3_6_c15_c8_0,x0
971cafb08dSBipin Ravi	ldr	x0,=0xBF200000
981cafb08dSBipin Ravi	msr	S3_6_c15_c8_2,x0
991cafb08dSBipin Ravi	ldr	x0,=0xFFEF0000
1001cafb08dSBipin Ravi	msr	S3_6_c15_c8_3,x0
1011cafb08dSBipin Ravi	ldr	x0,=0x10002001003F3
1021cafb08dSBipin Ravi	msr	S3_6_c15_c8_1,x0
103*ccb56162SArvind Ram Prakashworkaround_reset_end neoverse_n2, ERRATUM(2138956)
1041cafb08dSBipin Ravi
105*ccb56162SArvind Ram Prakashcheck_erratum_ls neoverse_n2, ERRATUM(2138956), CPU_REV(0, 0)
1061cafb08dSBipin Ravi
107c948185cSnayanpatel-arm
108*ccb56162SArvind Ram Prakashworkaround_reset_start neoverse_n2, ERRATUM(2138958), ERRATA_N2_2138958
109c948185cSnayanpatel-arm	/* Apply instruction patching sequence */
110c948185cSnayanpatel-arm	mrs	x1, NEOVERSE_N2_CPUACTLR5_EL1
111c948185cSnayanpatel-arm	orr	x1, x1, NEOVERSE_N2_CPUACTLR5_EL1_BIT_13
112c948185cSnayanpatel-arm	msr	NEOVERSE_N2_CPUACTLR5_EL1, x1
113*ccb56162SArvind Ram Prakashworkaround_reset_end neoverse_n2, ERRATUM(2138958)
114c948185cSnayanpatel-arm
115*ccb56162SArvind Ram Prakashcheck_erratum_ls neoverse_n2, ERRATUM(2138958), CPU_REV(0, 0)
116c948185cSnayanpatel-arm
117*ccb56162SArvind Ram Prakash
118*ccb56162SArvind Ram Prakashworkaround_reset_start neoverse_n2, ERRATUM(2189731), ERRATA_N2_2189731
119a438f434SArvind Ram Prakash	mrs     x1, NEOVERSE_N2_CPUACTLR5_EL1
120a438f434SArvind Ram Prakash	orr     x1, x1, NEOVERSE_N2_CPUACTLR5_EL1_BIT_44
121a438f434SArvind Ram Prakash	msr     NEOVERSE_N2_CPUACTLR5_EL1, x1
122*ccb56162SArvind Ram Prakashworkaround_reset_end neoverse_n2, ERRATUM(2189731)
123a438f434SArvind Ram Prakash
124*ccb56162SArvind Ram Prakashcheck_erratum_ls neoverse_n2, ERRATUM(2189731), CPU_REV(0, 0)
125a438f434SArvind Ram Prakash
126*ccb56162SArvind Ram Prakashworkaround_reset_start neoverse_n2, ERRATUM(2242400), ERRATA_N2_2242400
127603806d1Snayanpatel-arm	/* Apply instruction patching sequence */
128603806d1Snayanpatel-arm	mrs	x1, NEOVERSE_N2_CPUACTLR5_EL1
129603806d1Snayanpatel-arm	orr	x1, x1, NEOVERSE_N2_CPUACTLR5_EL1_BIT_17
130603806d1Snayanpatel-arm	msr	NEOVERSE_N2_CPUACTLR5_EL1, x1
131603806d1Snayanpatel-arm	ldr	x0, =0x2
132603806d1Snayanpatel-arm	msr	S3_6_c15_c8_0, x0
133603806d1Snayanpatel-arm	ldr	x0, =0x10F600E000
134603806d1Snayanpatel-arm	msr	S3_6_c15_c8_2, x0
135603806d1Snayanpatel-arm	ldr	x0, =0x10FF80E000
136603806d1Snayanpatel-arm	msr	S3_6_c15_c8_3, x0
137603806d1Snayanpatel-arm	ldr	x0, =0x80000000003FF
138603806d1Snayanpatel-arm	msr	S3_6_c15_c8_1, x0
139*ccb56162SArvind Ram Prakashworkaround_reset_end neoverse_n2, ERRATUM(2242400)
140603806d1Snayanpatel-arm
141*ccb56162SArvind Ram Prakashcheck_erratum_ls neoverse_n2, ERRATUM(2242400), CPU_REV(0, 0)
142603806d1Snayanpatel-arm
143*ccb56162SArvind Ram Prakashworkaround_reset_start neoverse_n2, ERRATUM(2242415), ERRATA_N2_2242415
144a438f434SArvind Ram Prakash	/* Apply instruction patching sequence */
145a438f434SArvind Ram Prakash	mrs	x1, NEOVERSE_N2_CPUACTLR_EL1
146a438f434SArvind Ram Prakash	orr	x1, x1, NEOVERSE_N2_CPUACTLR_EL1_BIT_22
147a438f434SArvind Ram Prakash	msr	NEOVERSE_N2_CPUACTLR_EL1, x1
148*ccb56162SArvind Ram Prakashworkaround_reset_end neoverse_n2, ERRATUM(2242415)
149a438f434SArvind Ram Prakash
150*ccb56162SArvind Ram Prakashcheck_erratum_ls neoverse_n2, ERRATUM(2242415), CPU_REV(0, 0)
151a438f434SArvind Ram Prakash
1520d2d9992Snayanpatel-arm
153*ccb56162SArvind Ram Prakashworkaround_reset_start neoverse_n2, ERRATUM(2280757), ERRATA_N2_2280757
1540d2d9992Snayanpatel-arm	/* Apply instruction patching sequence */
1550d2d9992Snayanpatel-arm	mrs	x1, NEOVERSE_N2_CPUACTLR_EL1
1560d2d9992Snayanpatel-arm	orr	x1, x1, NEOVERSE_N2_CPUACTLR_EL1_BIT_22
1570d2d9992Snayanpatel-arm	msr	NEOVERSE_N2_CPUACTLR_EL1, x1
158*ccb56162SArvind Ram Prakashworkaround_reset_end neoverse_n2, ERRATUM(2280757)
1590d2d9992Snayanpatel-arm
160*ccb56162SArvind Ram Prakashcheck_erratum_ls neoverse_n2, ERRATUM(2280757), CPU_REV(0, 0)
1610d2d9992Snayanpatel-arm
162*ccb56162SArvind Ram Prakashworkaround_runtime_start neoverse_n2, ERRATUM(2326639), ERRATA_N2_2326639
16343438ad1SBoyan Karatotev	/* Set bit 36 in ACTLR2_EL1 */
16443438ad1SBoyan Karatotev	mrs	x1, NEOVERSE_N2_CPUACTLR2_EL1
16543438ad1SBoyan Karatotev	orr	x1, x1, #NEOVERSE_N2_CPUACTLR2_EL1_BIT_36
16643438ad1SBoyan Karatotev	msr	NEOVERSE_N2_CPUACTLR2_EL1, x1
167*ccb56162SArvind Ram Prakashworkaround_runtime_end neoverse_n2, ERRATUM(2326639)
16843438ad1SBoyan Karatotev
169*ccb56162SArvind Ram Prakashcheck_erratum_ls neoverse_n2, ERRATUM(2326639), CPU_REV(0, 0)
170e6602d4bSAkram Ahmad
171*ccb56162SArvind Ram Prakashworkaround_reset_start neoverse_n2, ERRATUM(2376738), ERRATA_N2_2376738
172e6602d4bSAkram Ahmad	/* Set CPUACTLR2_EL1[0] to 1 to force PLDW/PFRM
173e6602d4bSAkram Ahmad	 * ST to behave like PLD/PFRM LD and not cause
174e6602d4bSAkram Ahmad	 * invalidations to other PE caches.
175e6602d4bSAkram Ahmad	 */
176e6602d4bSAkram Ahmad	mrs	x1, NEOVERSE_N2_CPUACTLR2_EL1
177e6602d4bSAkram Ahmad	orr	x1, x1,	NEOVERSE_N2_CPUACTLR2_EL1_BIT_0
178e6602d4bSAkram Ahmad	msr	NEOVERSE_N2_CPUACTLR2_EL1, x1
179*ccb56162SArvind Ram Prakashworkaround_reset_end neoverse_n2, ERRATUM(2376738)
180e6602d4bSAkram Ahmad
181*ccb56162SArvind Ram Prakashcheck_erratum_ls neoverse_n2, ERRATUM(2376738), CPU_REV(0, 0)
182e6602d4bSAkram Ahmad
183*ccb56162SArvind Ram Prakashworkaround_reset_start neoverse_n2, ERRATUM(2388450), ERRATA_N2_2388450
184884d5156SDaniel Boulby	/*Set bit 40 in ACTLR2_EL1 */
185884d5156SDaniel Boulby	mrs	x1, NEOVERSE_N2_CPUACTLR2_EL1
186884d5156SDaniel Boulby	orr	x1, x1, #NEOVERSE_N2_CPUACTLR2_EL1_BIT_40
187884d5156SDaniel Boulby	msr	NEOVERSE_N2_CPUACTLR2_EL1, x1
188*ccb56162SArvind Ram Prakashworkaround_reset_end neoverse_n2, ERRATUM(2388450)
189884d5156SDaniel Boulby
190*ccb56162SArvind Ram Prakashcheck_erratum_ls neoverse_n2, ERRATUM(2388450), CPU_REV(0, 0)
191884d5156SDaniel Boulby
1921ee7c823SBipin Ravi
193*ccb56162SArvind Ram Prakashworkaround_runtime_start neoverse_n2, ERRATUM(2743089), ERRATA_N2_2743089
1941ee7c823SBipin Ravi	/* dsb before isb of power down sequence */
1951ee7c823SBipin Ravi	dsb	sy
196*ccb56162SArvind Ram Prakashworkaround_runtime_end neoverse_n2, ERRATUM(2743089)
1971ee7c823SBipin Ravi
198*ccb56162SArvind Ram Prakashcheck_erratum_ls neoverse_n2, ERRATUM(2743089), CPU_REV(0, 2)
1991ee7c823SBipin Ravi
200*ccb56162SArvind Ram Prakash
201*ccb56162SArvind Ram Prakashworkaround_reset_start neoverse_n2, CVE(2022,23960), WORKAROUND_CVE_2022_23960
202*ccb56162SArvind Ram Prakash#if IMAGE_BL31
203*ccb56162SArvind Ram Prakash	/*
204*ccb56162SArvind Ram Prakash	 * The Neoverse-N2 generic vectors are overridden to apply errata
205*ccb56162SArvind Ram Prakash         * mitigation on exception entry from lower ELs.
206*ccb56162SArvind Ram Prakash	 */
207*ccb56162SArvind Ram Prakash	adr	x0, wa_cve_vbar_neoverse_n2
208*ccb56162SArvind Ram Prakash	msr	vbar_el3, x0
209*ccb56162SArvind Ram Prakash#endif /* IMAGE_BL31 */
210*ccb56162SArvind Ram Prakashworkaround_reset_end neoverse_n2, CVE(2022,23960)
211*ccb56162SArvind Ram Prakash
212*ccb56162SArvind Ram Prakashcheck_erratum_chosen neoverse_n2, CVE(2022, 23960), WORKAROUND_CVE_2022_23960
2131fe4a9d1SBipin Ravi
2144618b2bfSBipin Ravi	/* -------------------------------------------
21525bbbd2dSJavier Almansa Sobrino	 * The CPU Ops reset function for Neoverse N2.
2164618b2bfSBipin Ravi	 * -------------------------------------------
21725bbbd2dSJavier Almansa Sobrino	 */
218*ccb56162SArvind Ram Prakashcpu_reset_func_start neoverse_n2
2199380f754Snayanpatel-arm
22025bbbd2dSJavier Almansa Sobrino	/* Check if the PE implements SSBS */
22125bbbd2dSJavier Almansa Sobrino	mrs	x0, id_aa64pfr1_el1
22225bbbd2dSJavier Almansa Sobrino	tst	x0, #(ID_AA64PFR1_EL1_SSBS_MASK << ID_AA64PFR1_EL1_SSBS_SHIFT)
22325bbbd2dSJavier Almansa Sobrino	b.eq	1f
22425bbbd2dSJavier Almansa Sobrino
22525bbbd2dSJavier Almansa Sobrino	/* Disable speculative loads */
22625bbbd2dSJavier Almansa Sobrino	msr	SSBS, xzr
22725bbbd2dSJavier Almansa Sobrino1:
22825bbbd2dSJavier Almansa Sobrino	/* Force all cacheable atomic instructions to be near */
22925bbbd2dSJavier Almansa Sobrino	mrs	x0, NEOVERSE_N2_CPUACTLR2_EL1
23025bbbd2dSJavier Almansa Sobrino	orr	x0, x0, #NEOVERSE_N2_CPUACTLR2_EL1_BIT_2
23125bbbd2dSJavier Almansa Sobrino	msr	NEOVERSE_N2_CPUACTLR2_EL1, x0
23225bbbd2dSJavier Almansa Sobrino
233d23acc9eSAndre Przywara#if ENABLE_FEAT_AMU
23425bbbd2dSJavier Almansa Sobrino	/* Make sure accesses from EL0/EL1 and EL2 are not trapped to EL3 */
23525bbbd2dSJavier Almansa Sobrino	mrs	x0, cptr_el3
23625bbbd2dSJavier Almansa Sobrino	orr	x0, x0, #TAM_BIT
23725bbbd2dSJavier Almansa Sobrino	msr	cptr_el3, x0
23825bbbd2dSJavier Almansa Sobrino
23925bbbd2dSJavier Almansa Sobrino	/* Make sure accesses from EL0/EL1 are not trapped to EL2 */
24025bbbd2dSJavier Almansa Sobrino	mrs	x0, cptr_el2
24125bbbd2dSJavier Almansa Sobrino	orr	x0, x0, #TAM_BIT
24225bbbd2dSJavier Almansa Sobrino	msr	cptr_el2, x0
24325bbbd2dSJavier Almansa Sobrino
24425bbbd2dSJavier Almansa Sobrino	/* No need to enable the counters as this would be done at el3 exit */
24525bbbd2dSJavier Almansa Sobrino#endif
24625bbbd2dSJavier Almansa Sobrino
24725bbbd2dSJavier Almansa Sobrino#if NEOVERSE_Nx_EXTERNAL_LLC
24825bbbd2dSJavier Almansa Sobrino	/* Some systems may have External LLC, core needs to be made aware */
24925bbbd2dSJavier Almansa Sobrino	mrs	x0, NEOVERSE_N2_CPUECTLR_EL1
25025bbbd2dSJavier Almansa Sobrino	orr	x0, x0, NEOVERSE_N2_CPUECTLR_EL1_EXTLLC_BIT
25125bbbd2dSJavier Almansa Sobrino	msr	NEOVERSE_N2_CPUECTLR_EL1, x0
25225bbbd2dSJavier Almansa Sobrino#endif
253*ccb56162SArvind Ram Prakashcpu_reset_func_end neoverse_n2
25425bbbd2dSJavier Almansa Sobrino
25525bbbd2dSJavier Almansa Sobrinofunc neoverse_n2_core_pwr_dwn
25643438ad1SBoyan Karatotev#if ERRATA_N2_2326639
25743438ad1SBoyan Karatotev	mov	x15, x30
25843438ad1SBoyan Karatotev	bl	cpu_get_rev_var
259*ccb56162SArvind Ram Prakash	bl	erratum_neoverse_n2_2326639_wa
26043438ad1SBoyan Karatotev	mov	x30, x15
26143438ad1SBoyan Karatotev#endif /* ERRATA_N2_2326639 */
26243438ad1SBoyan Karatotev
2634618b2bfSBipin Ravi	/* ---------------------------------------------------
26425bbbd2dSJavier Almansa Sobrino	 * Enable CPU power down bit in power control register
26525bbbd2dSJavier Almansa Sobrino	 * No need to do cache maintenance here.
2664618b2bfSBipin Ravi	 * ---------------------------------------------------
26725bbbd2dSJavier Almansa Sobrino	 */
26825bbbd2dSJavier Almansa Sobrino	mrs	x0, NEOVERSE_N2_CPUPWRCTLR_EL1
26925bbbd2dSJavier Almansa Sobrino	orr	x0, x0, #NEOVERSE_N2_CORE_PWRDN_EN_BIT
27025bbbd2dSJavier Almansa Sobrino	msr	NEOVERSE_N2_CPUPWRCTLR_EL1, x0
2711ee7c823SBipin Ravi#if ERRATA_N2_2743089
2721ee7c823SBipin Ravi	mov	x15, x30
2731ee7c823SBipin Ravi	bl	cpu_get_rev_var
274*ccb56162SArvind Ram Prakash	bl	erratum_neoverse_n2_2743089_wa
2751ee7c823SBipin Ravi	mov	x30, x15
2761ee7c823SBipin Ravi#endif /* ERRATA_N2_2743089 */
27725bbbd2dSJavier Almansa Sobrino	isb
27825bbbd2dSJavier Almansa Sobrino	ret
27925bbbd2dSJavier Almansa Sobrinoendfunc neoverse_n2_core_pwr_dwn
28025bbbd2dSJavier Almansa Sobrino
281*ccb56162SArvind Ram Prakasherrata_report_shim neoverse_n2
28225bbbd2dSJavier Almansa Sobrino
28325bbbd2dSJavier Almansa Sobrino	/* ---------------------------------------------
28425bbbd2dSJavier Almansa Sobrino	 * This function provides Neoverse N2 specific
28525bbbd2dSJavier Almansa Sobrino	 * register information for crash reporting.
28625bbbd2dSJavier Almansa Sobrino	 * It needs to return with x6 pointing to
28725bbbd2dSJavier Almansa Sobrino	 * a list of register names in ASCII and
28825bbbd2dSJavier Almansa Sobrino	 * x8 - x15 having values of registers to be
28925bbbd2dSJavier Almansa Sobrino	 * reported.
29025bbbd2dSJavier Almansa Sobrino	 * ---------------------------------------------
29125bbbd2dSJavier Almansa Sobrino	 */
29225bbbd2dSJavier Almansa Sobrino.section .rodata.neoverse_n2_regs, "aS"
29325bbbd2dSJavier Almansa Sobrinoneoverse_n2_regs:  /* The ASCII list of register names to be reported */
29425bbbd2dSJavier Almansa Sobrino	.asciz	"cpupwrctlr_el1", ""
29525bbbd2dSJavier Almansa Sobrino
29625bbbd2dSJavier Almansa Sobrinofunc neoverse_n2_cpu_reg_dump
29725bbbd2dSJavier Almansa Sobrino	adr	x6, neoverse_n2_regs
29825bbbd2dSJavier Almansa Sobrino	mrs	x8, NEOVERSE_N2_CPUPWRCTLR_EL1
29925bbbd2dSJavier Almansa Sobrino	ret
30025bbbd2dSJavier Almansa Sobrinoendfunc neoverse_n2_cpu_reg_dump
30125bbbd2dSJavier Almansa Sobrino
30225bbbd2dSJavier Almansa Sobrinodeclare_cpu_ops neoverse_n2, NEOVERSE_N2_MIDR, \
30325bbbd2dSJavier Almansa Sobrino	neoverse_n2_reset_func, \
30425bbbd2dSJavier Almansa Sobrino	neoverse_n2_core_pwr_dwn
305