xref: /rk3399_ARM-atf/lib/cpus/aarch64/neoverse_n2.S (revision db9ee83432f9051092e4a00947e740a5ababcfc9)
125bbbd2dSJavier Almansa Sobrino/*
23fb52e41SRyan Everett * Copyright (c) 2020-2024, 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
27ccb56162SArvind Ram Prakash/*
28ccb56162SArvind Ram Prakash * ERRATA_DSU_2313941:
29ccb56162SArvind Ram Prakash * The errata is defined in dsu_helpers.S and applies to Neoverse N2.
30ccb56162SArvind Ram Prakash * Henceforth creating symbolic names to the already existing errata
31ccb56162SArvind Ram Prakash * workaround functions to get them registered under the Errata Framework.
329380f754Snayanpatel-arm */
33ccb56162SArvind Ram Prakash.equ check_erratum_neoverse_n2_2313941, check_errata_dsu_2313941
34ccb56162SArvind Ram Prakash.equ erratum_neoverse_n2_2313941_wa, errata_dsu_2313941_wa
35ccb56162SArvind Ram Prakashadd_erratum_entry neoverse_n2, ERRATUM(2313941), ERRATA_DSU_2313941, APPLY_AT_RESET
369380f754Snayanpatel-arm
37ccb56162SArvind 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
55ccb56162SArvind Ram Prakashworkaround_reset_end neoverse_n2, ERRATUM(2002655)
569380f754Snayanpatel-arm
57ccb56162SArvind Ram Prakashcheck_erratum_ls neoverse_n2, ERRATUM(2002655), CPU_REV(0, 0)
589380f754Snayanpatel-arm
59ccb56162SArvind Ram Prakashworkaround_reset_start neoverse_n2, ERRATUM(2025414), ERRATA_N2_2025414
60b41792caSArvind Ram Prakash	sysreg_bit_set NEOVERSE_N2_CPUECTLR_EL1, NEOVERSE_N2_CPUECTLR_EL1_PFSTIDIS_BIT
61ccb56162SArvind Ram Prakashworkaround_reset_end neoverse_n2, ERRATUM(2025414)
624618b2bfSBipin Ravi
63ccb56162SArvind Ram Prakashcheck_erratum_ls neoverse_n2, ERRATUM(2025414), CPU_REV(0, 0)
644618b2bfSBipin Ravi
65ccb56162SArvind Ram Prakashworkaround_reset_start neoverse_n2, ERRATUM(2067956), ERRATA_N2_2067956
66b41792caSArvind Ram Prakash	sysreg_bit_set NEOVERSE_N2_CPUACTLR_EL1, NEOVERSE_N2_CPUACTLR_EL1_BIT_46
67ccb56162SArvind Ram Prakashworkaround_reset_end neoverse_n2, ERRATUM(2067956)
687cfae932SBipin Ravi
69ccb56162SArvind Ram Prakashcheck_erratum_ls neoverse_n2, ERRATUM(2067956), CPU_REV(0, 0)
70a438f434SArvind Ram Prakash
7174bfe31fSBipin Raviworkaround_runtime_start neoverse_n2, ERRATUM(2009478), ERRATA_N2_2009478
7274bfe31fSBipin Ravi	/* Stash ERRSELR_EL1 in x2 */
7374bfe31fSBipin Ravi	mrs     x2, ERRSELR_EL1
7474bfe31fSBipin Ravi
7574bfe31fSBipin Ravi	/* Select error record 0 and clear ED bit */
7674bfe31fSBipin Ravi	msr     ERRSELR_EL1, xzr
7774bfe31fSBipin Ravi	mrs     x1, ERXCTLR_EL1
7874bfe31fSBipin Ravi	bfi     x1, xzr, #ERXCTLR_ED_SHIFT, #1
7974bfe31fSBipin Ravi	msr     ERXCTLR_EL1, x1
8074bfe31fSBipin Ravi
8174bfe31fSBipin Ravi	/* Restore ERRSELR_EL1 from x2 */
8274bfe31fSBipin Ravi	msr     ERRSELR_EL1, x2
8374bfe31fSBipin Raviworkaround_runtime_end neoverse_n2, ERRATUM(2009478), NO_ISB
8474bfe31fSBipin Ravi
8574bfe31fSBipin Ravicheck_erratum_ls neoverse_n2, ERRATUM(2009478), CPU_REV(0, 0)
8674bfe31fSBipin Ravi
87ccb56162SArvind Ram Prakashworkaround_reset_start neoverse_n2, ERRATUM(2138953), ERRATA_N2_2138953
88a438f434SArvind Ram Prakash	/* Apply instruction patching sequence */
89a438f434SArvind Ram Prakash	mrs	x1, NEOVERSE_N2_CPUECTLR2_EL1
90a438f434SArvind Ram Prakash	mov	x0, #NEOVERSE_N2_CPUECTLR2_EL1_PF_MODE_CNSRV
91a438f434SArvind Ram Prakash	bfi	x1, x0, #CPUECTLR2_EL1_PF_MODE_LSB, #CPUECTLR2_EL1_PF_MODE_WIDTH
92a438f434SArvind Ram Prakash	msr	NEOVERSE_N2_CPUECTLR2_EL1, x1
93ccb56162SArvind Ram Prakashworkaround_reset_end neoverse_n2, ERRATUM(2138953)
94a438f434SArvind Ram Prakash
95d6d34b39SArvind Ram Prakashcheck_erratum_ls neoverse_n2, ERRATUM(2138953), CPU_REV(0, 3)
967cfae932SBipin Ravi
97ccb56162SArvind Ram Prakashworkaround_reset_start neoverse_n2, ERRATUM(2138956), ERRATA_N2_2138956
981cafb08dSBipin Ravi	/* Apply instruction patching sequence */
991cafb08dSBipin Ravi	ldr	x0,=0x3
1001cafb08dSBipin Ravi	msr	S3_6_c15_c8_0,x0
1011cafb08dSBipin Ravi	ldr	x0,=0xF3A08002
1021cafb08dSBipin Ravi	msr	S3_6_c15_c8_2,x0
1031cafb08dSBipin Ravi	ldr	x0,=0xFFF0F7FE
1041cafb08dSBipin Ravi	msr	S3_6_c15_c8_3,x0
1051cafb08dSBipin Ravi	ldr	x0,=0x10002001003FF
1061cafb08dSBipin Ravi	msr	S3_6_c15_c8_1,x0
1071cafb08dSBipin Ravi	ldr	x0,=0x4
1081cafb08dSBipin Ravi	msr	S3_6_c15_c8_0,x0
1091cafb08dSBipin Ravi	ldr	x0,=0xBF200000
1101cafb08dSBipin Ravi	msr	S3_6_c15_c8_2,x0
1111cafb08dSBipin Ravi	ldr	x0,=0xFFEF0000
1121cafb08dSBipin Ravi	msr	S3_6_c15_c8_3,x0
1131cafb08dSBipin Ravi	ldr	x0,=0x10002001003F3
1141cafb08dSBipin Ravi	msr	S3_6_c15_c8_1,x0
115ccb56162SArvind Ram Prakashworkaround_reset_end neoverse_n2, ERRATUM(2138956)
1161cafb08dSBipin Ravi
117ccb56162SArvind Ram Prakashcheck_erratum_ls neoverse_n2, ERRATUM(2138956), CPU_REV(0, 0)
1181cafb08dSBipin Ravi
119c948185cSnayanpatel-arm
120ccb56162SArvind Ram Prakashworkaround_reset_start neoverse_n2, ERRATUM(2138958), ERRATA_N2_2138958
121c948185cSnayanpatel-arm	/* Apply instruction patching sequence */
122b41792caSArvind Ram Prakash	sysreg_bit_set NEOVERSE_N2_CPUACTLR5_EL1, NEOVERSE_N2_CPUACTLR5_EL1_BIT_13
123ccb56162SArvind Ram Prakashworkaround_reset_end neoverse_n2, ERRATUM(2138958)
124c948185cSnayanpatel-arm
125ccb56162SArvind Ram Prakashcheck_erratum_ls neoverse_n2, ERRATUM(2138958), CPU_REV(0, 0)
126c948185cSnayanpatel-arm
127ccb56162SArvind Ram Prakashworkaround_reset_start neoverse_n2, ERRATUM(2189731), ERRATA_N2_2189731
128b41792caSArvind Ram Prakash	sysreg_bit_set NEOVERSE_N2_CPUACTLR5_EL1, NEOVERSE_N2_CPUACTLR5_EL1_BIT_44
129ccb56162SArvind Ram Prakashworkaround_reset_end neoverse_n2, ERRATUM(2189731)
130a438f434SArvind Ram Prakash
131ccb56162SArvind Ram Prakashcheck_erratum_ls neoverse_n2, ERRATUM(2189731), CPU_REV(0, 0)
132a438f434SArvind Ram Prakash
133ccb56162SArvind Ram Prakashworkaround_reset_start neoverse_n2, ERRATUM(2242400), ERRATA_N2_2242400
134603806d1Snayanpatel-arm	/* Apply instruction patching sequence */
135b41792caSArvind Ram Prakash	sysreg_bit_set NEOVERSE_N2_CPUACTLR5_EL1, NEOVERSE_N2_CPUACTLR5_EL1_BIT_17
136603806d1Snayanpatel-arm	ldr	x0, =0x2
137603806d1Snayanpatel-arm	msr	S3_6_c15_c8_0, x0
138603806d1Snayanpatel-arm	ldr	x0, =0x10F600E000
139603806d1Snayanpatel-arm	msr	S3_6_c15_c8_2, x0
140603806d1Snayanpatel-arm	ldr	x0, =0x10FF80E000
141603806d1Snayanpatel-arm	msr	S3_6_c15_c8_3, x0
142603806d1Snayanpatel-arm	ldr	x0, =0x80000000003FF
143603806d1Snayanpatel-arm	msr	S3_6_c15_c8_1, x0
144ccb56162SArvind Ram Prakashworkaround_reset_end neoverse_n2, ERRATUM(2242400)
145603806d1Snayanpatel-arm
146ccb56162SArvind Ram Prakashcheck_erratum_ls neoverse_n2, ERRATUM(2242400), CPU_REV(0, 0)
147603806d1Snayanpatel-arm
148ccb56162SArvind Ram Prakashworkaround_reset_start neoverse_n2, ERRATUM(2242415), ERRATA_N2_2242415
149b41792caSArvind Ram Prakash	sysreg_bit_set NEOVERSE_N2_CPUACTLR_EL1, NEOVERSE_N2_CPUACTLR_EL1_BIT_22
150ccb56162SArvind Ram Prakashworkaround_reset_end neoverse_n2, ERRATUM(2242415)
151a438f434SArvind Ram Prakash
152ccb56162SArvind Ram Prakashcheck_erratum_ls neoverse_n2, ERRATUM(2242415), CPU_REV(0, 0)
153a438f434SArvind Ram Prakash
154ccb56162SArvind Ram Prakashworkaround_reset_start neoverse_n2, ERRATUM(2280757), ERRATA_N2_2280757
1550d2d9992Snayanpatel-arm	/* Apply instruction patching sequence */
156b41792caSArvind Ram Prakash	sysreg_bit_set NEOVERSE_N2_CPUACTLR_EL1, NEOVERSE_N2_CPUACTLR_EL1_BIT_22
157ccb56162SArvind Ram Prakashworkaround_reset_end neoverse_n2, ERRATUM(2280757)
1580d2d9992Snayanpatel-arm
159ccb56162SArvind Ram Prakashcheck_erratum_ls neoverse_n2, ERRATUM(2280757), CPU_REV(0, 0)
1600d2d9992Snayanpatel-arm
161ccb56162SArvind Ram Prakashworkaround_runtime_start neoverse_n2, ERRATUM(2326639), ERRATA_N2_2326639
16243438ad1SBoyan Karatotev	/* Set bit 36 in ACTLR2_EL1 */
163b41792caSArvind Ram Prakash	sysreg_bit_set NEOVERSE_N2_CPUACTLR2_EL1, NEOVERSE_N2_CPUACTLR2_EL1_BIT_36
164ccb56162SArvind Ram Prakashworkaround_runtime_end neoverse_n2, ERRATUM(2326639)
16543438ad1SBoyan Karatotev
166ccb56162SArvind Ram Prakashcheck_erratum_ls neoverse_n2, ERRATUM(2326639), CPU_REV(0, 0)
167e6602d4bSAkram Ahmad
16868085ad4SBipin Raviworkaround_runtime_start neoverse_n2, ERRATUM(2340933), ERRATA_N2_2340933
16968085ad4SBipin Ravi	/* Set bit 61 in CPUACTLR5_EL1 */
17068085ad4SBipin Ravi	sysreg_bit_set NEOVERSE_N2_CPUACTLR5_EL1, BIT(61)
17168085ad4SBipin Raviworkaround_runtime_end neoverse_n2, ERRATUM(2340933)
17268085ad4SBipin Ravi
17368085ad4SBipin Ravicheck_erratum_ls neoverse_n2, ERRATUM(2340933), CPU_REV(0, 0)
17468085ad4SBipin Ravi
1756cb8be17SBipin Raviworkaround_runtime_start neoverse_n2, ERRATUM(2346952), ERRATA_N2_2346952
1766cb8be17SBipin Ravi	/* Set TXREQ to STATIC and full L2 TQ size */
1776cb8be17SBipin Ravi	mrs	x1, NEOVERSE_N2_CPUECTLR2_EL1
1786cb8be17SBipin Ravi	mov	x0, #CPUECTLR2_EL1_TXREQ_STATIC_FULL
1796cb8be17SBipin Ravi	bfi	x1, x0, #CPUECTLR2_EL1_TXREQ_LSB, #CPUECTLR2_EL1_TXREQ_WIDTH
1806cb8be17SBipin Ravi	msr	NEOVERSE_N2_CPUECTLR2_EL1, x1
1816cb8be17SBipin Raviworkaround_runtime_end neoverse_n2, ERRATUM(2346952)
1826cb8be17SBipin Ravi
1836cb8be17SBipin Ravicheck_erratum_ls neoverse_n2, ERRATUM(2346952), CPU_REV(0, 2)
1846cb8be17SBipin Ravi
185ccb56162SArvind Ram Prakashworkaround_reset_start neoverse_n2, ERRATUM(2376738), ERRATA_N2_2376738
186e6602d4bSAkram Ahmad	/* Set CPUACTLR2_EL1[0] to 1 to force PLDW/PFRM
187e6602d4bSAkram Ahmad	 * ST to behave like PLD/PFRM LD and not cause
188e6602d4bSAkram Ahmad	 * invalidations to other PE caches.
189e6602d4bSAkram Ahmad	 */
190b41792caSArvind Ram Prakash	sysreg_bit_set NEOVERSE_N2_CPUACTLR2_EL1, NEOVERSE_N2_CPUACTLR2_EL1_BIT_0
191ccb56162SArvind Ram Prakashworkaround_reset_end neoverse_n2, ERRATUM(2376738)
192e6602d4bSAkram Ahmad
193d6d34b39SArvind Ram Prakashcheck_erratum_ls neoverse_n2, ERRATUM(2376738), CPU_REV(0, 3)
194e6602d4bSAkram Ahmad
195ccb56162SArvind Ram Prakashworkaround_reset_start neoverse_n2, ERRATUM(2388450), ERRATA_N2_2388450
196884d5156SDaniel Boulby	/*Set bit 40 in ACTLR2_EL1 */
197b41792caSArvind Ram Prakash	sysreg_bit_set NEOVERSE_N2_CPUACTLR2_EL1, NEOVERSE_N2_CPUACTLR2_EL1_BIT_40
198ccb56162SArvind Ram Prakashworkaround_reset_end neoverse_n2, ERRATUM(2388450)
199884d5156SDaniel Boulby
200ccb56162SArvind Ram Prakashcheck_erratum_ls neoverse_n2, ERRATUM(2388450), CPU_REV(0, 0)
201884d5156SDaniel Boulby
202eb44035cSArvind Ram Prakashworkaround_reset_start neoverse_n2, ERRATUM(2743014), ERRATA_N2_2743014
203eb44035cSArvind Ram Prakash	/* Set CPUACTLR5_EL1[56:55] to 2'b01 */
204eb44035cSArvind Ram Prakash	sysreg_bit_set NEOVERSE_N2_CPUACTLR5_EL1, NEOVERSE_N2_CPUACTLR5_EL1_BIT_55
205eb44035cSArvind Ram Prakash	sysreg_bit_clear NEOVERSE_N2_CPUACTLR5_EL1, NEOVERSE_N2_CPUACTLR5_EL1_BIT_56
206eb44035cSArvind Ram Prakashworkaround_reset_end neoverse_n2, ERRATUM(2743014)
207eb44035cSArvind Ram Prakash
208eb44035cSArvind Ram Prakashcheck_erratum_ls neoverse_n2, ERRATUM(2743014), CPU_REV(0, 2)
209eb44035cSArvind Ram Prakash
210ccb56162SArvind Ram Prakashworkaround_runtime_start neoverse_n2, ERRATUM(2743089), ERRATA_N2_2743089
2111ee7c823SBipin Ravi	/* dsb before isb of power down sequence */
2121ee7c823SBipin Ravi	dsb	sy
213ccb56162SArvind Ram Prakashworkaround_runtime_end neoverse_n2, ERRATUM(2743089)
2141ee7c823SBipin Ravi
215ccb56162SArvind Ram Prakashcheck_erratum_ls neoverse_n2, ERRATUM(2743089), CPU_REV(0, 2)
2161ee7c823SBipin Ravi
21712d28067SArvind Ram Prakashworkaround_reset_start neoverse_n2, ERRATUM(2779511), ERRATA_N2_2779511
21812d28067SArvind Ram Prakash	/* Set bit 47 in ACTLR3_EL1 */
21912d28067SArvind Ram Prakash	sysreg_bit_set NEOVERSE_N2_CPUACTLR3_EL1, NEOVERSE_N2_CPUACTLR3_EL1_BIT_47
22012d28067SArvind Ram Prakashworkaround_reset_end neoverse_n2, ERRATUM(2779511)
22112d28067SArvind Ram Prakash
22212d28067SArvind Ram Prakashcheck_erratum_ls neoverse_n2, ERRATUM(2779511), CPU_REV(0, 2)
22312d28067SArvind Ram Prakash
224ccb56162SArvind Ram Prakashworkaround_reset_start neoverse_n2, CVE(2022,23960), WORKAROUND_CVE_2022_23960
225ccb56162SArvind Ram Prakash#if IMAGE_BL31
226ccb56162SArvind Ram Prakash	/*
227ccb56162SArvind Ram Prakash	 * The Neoverse-N2 generic vectors are overridden to apply errata
228ccb56162SArvind Ram Prakash         * mitigation on exception entry from lower ELs.
229ccb56162SArvind Ram Prakash	 */
230b41792caSArvind Ram Prakash	override_vector_table wa_cve_vbar_neoverse_n2
231ccb56162SArvind Ram Prakash#endif /* IMAGE_BL31 */
232ccb56162SArvind Ram Prakashworkaround_reset_end neoverse_n2, CVE(2022,23960)
233ccb56162SArvind Ram Prakash
234ccb56162SArvind Ram Prakashcheck_erratum_chosen neoverse_n2, CVE(2022, 23960), WORKAROUND_CVE_2022_23960
2351fe4a9d1SBipin Ravi
2364618b2bfSBipin Ravi	/* -------------------------------------------
23725bbbd2dSJavier Almansa Sobrino	 * The CPU Ops reset function for Neoverse N2.
2384618b2bfSBipin Ravi	 * -------------------------------------------
23925bbbd2dSJavier Almansa Sobrino	 */
240ccb56162SArvind Ram Prakashcpu_reset_func_start neoverse_n2
2419380f754Snayanpatel-arm
24225bbbd2dSJavier Almansa Sobrino	/* Check if the PE implements SSBS */
24325bbbd2dSJavier Almansa Sobrino	mrs	x0, id_aa64pfr1_el1
24425bbbd2dSJavier Almansa Sobrino	tst	x0, #(ID_AA64PFR1_EL1_SSBS_MASK << ID_AA64PFR1_EL1_SSBS_SHIFT)
24525bbbd2dSJavier Almansa Sobrino	b.eq	1f
24625bbbd2dSJavier Almansa Sobrino
24725bbbd2dSJavier Almansa Sobrino	/* Disable speculative loads */
24825bbbd2dSJavier Almansa Sobrino	msr	SSBS, xzr
24925bbbd2dSJavier Almansa Sobrino1:
25025bbbd2dSJavier Almansa Sobrino	/* Force all cacheable atomic instructions to be near */
251b41792caSArvind Ram Prakash	sysreg_bit_set NEOVERSE_N2_CPUACTLR2_EL1, NEOVERSE_N2_CPUACTLR2_EL1_BIT_2
25225bbbd2dSJavier Almansa Sobrino
253d23acc9eSAndre Przywara#if ENABLE_FEAT_AMU
25425bbbd2dSJavier Almansa Sobrino	/* Make sure accesses from EL0/EL1 and EL2 are not trapped to EL3 */
25554b86d47SThomas Abraham	sysreg_bit_clear cptr_el3, TAM_BIT
25625bbbd2dSJavier Almansa Sobrino	/* Make sure accesses from EL0/EL1 are not trapped to EL2 */
25754b86d47SThomas Abraham	sysreg_bit_clear cptr_el2, TAM_BIT
25825bbbd2dSJavier Almansa Sobrino	/* No need to enable the counters as this would be done at el3 exit */
25925bbbd2dSJavier Almansa Sobrino#endif
26025bbbd2dSJavier Almansa Sobrino
26125bbbd2dSJavier Almansa Sobrino#if NEOVERSE_Nx_EXTERNAL_LLC
26225bbbd2dSJavier Almansa Sobrino	/* Some systems may have External LLC, core needs to be made aware */
263b41792caSArvind Ram Prakash	sysreg_bit_set NEOVERSE_N2_CPUECTLR_EL1, NEOVERSE_N2_CPUECTLR_EL1_EXTLLC_BIT
26425bbbd2dSJavier Almansa Sobrino#endif
265ccb56162SArvind Ram Prakashcpu_reset_func_end neoverse_n2
26625bbbd2dSJavier Almansa Sobrino
26725bbbd2dSJavier Almansa Sobrinofunc neoverse_n2_core_pwr_dwn
268*db9ee834SBoyan Karatotev	apply_erratum neoverse_n2, ERRATUM(2009478), ERRATA_N2_2009478, NO_GET_CPU_REV
26974bfe31fSBipin Ravi	apply_erratum neoverse_n2, ERRATUM(2326639), ERRATA_N2_2326639, NO_GET_CPU_REV
27074bfe31fSBipin Ravi
2714618b2bfSBipin Ravi	/* ---------------------------------------------------
27225bbbd2dSJavier Almansa Sobrino	 * Enable CPU power down bit in power control register
27325bbbd2dSJavier Almansa Sobrino	 * No need to do cache maintenance here.
2744618b2bfSBipin Ravi	 * ---------------------------------------------------
27525bbbd2dSJavier Almansa Sobrino	 */
276b41792caSArvind Ram Prakash	sysreg_bit_set NEOVERSE_N2_CPUPWRCTLR_EL1, NEOVERSE_N2_CORE_PWRDN_EN_BIT
277b41792caSArvind Ram Prakash
278*db9ee834SBoyan Karatotev	apply_erratum neoverse_n2, ERRATUM(2743089), ERRATA_N2_2743089, NO_GET_CPU_REV
279b41792caSArvind Ram Prakash
28025bbbd2dSJavier Almansa Sobrino	isb
28125bbbd2dSJavier Almansa Sobrino	ret
28225bbbd2dSJavier Almansa Sobrinoendfunc neoverse_n2_core_pwr_dwn
28325bbbd2dSJavier Almansa Sobrino
28425bbbd2dSJavier Almansa Sobrino	/* ---------------------------------------------
28525bbbd2dSJavier Almansa Sobrino	 * This function provides Neoverse N2 specific
28625bbbd2dSJavier Almansa Sobrino	 * register information for crash reporting.
28725bbbd2dSJavier Almansa Sobrino	 * It needs to return with x6 pointing to
28825bbbd2dSJavier Almansa Sobrino	 * a list of register names in ASCII and
28925bbbd2dSJavier Almansa Sobrino	 * x8 - x15 having values of registers to be
29025bbbd2dSJavier Almansa Sobrino	 * reported.
29125bbbd2dSJavier Almansa Sobrino	 * ---------------------------------------------
29225bbbd2dSJavier Almansa Sobrino	 */
29325bbbd2dSJavier Almansa Sobrino.section .rodata.neoverse_n2_regs, "aS"
29425bbbd2dSJavier Almansa Sobrinoneoverse_n2_regs:  /* The ASCII list of register names to be reported */
29525bbbd2dSJavier Almansa Sobrino	.asciz	"cpupwrctlr_el1", ""
29625bbbd2dSJavier Almansa Sobrino
29725bbbd2dSJavier Almansa Sobrinofunc neoverse_n2_cpu_reg_dump
29825bbbd2dSJavier Almansa Sobrino	adr	x6, neoverse_n2_regs
29925bbbd2dSJavier Almansa Sobrino	mrs	x8, NEOVERSE_N2_CPUPWRCTLR_EL1
30025bbbd2dSJavier Almansa Sobrino	ret
30125bbbd2dSJavier Almansa Sobrinoendfunc neoverse_n2_cpu_reg_dump
30225bbbd2dSJavier Almansa Sobrino
30325bbbd2dSJavier Almansa Sobrinodeclare_cpu_ops neoverse_n2, NEOVERSE_N2_MIDR, \
30425bbbd2dSJavier Almansa Sobrino	neoverse_n2_reset_func, \
30525bbbd2dSJavier Almansa Sobrino	neoverse_n2_core_pwr_dwn
306