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