1*54fd6939SJiyong Park/* 2*54fd6939SJiyong Park * Copyright (c) 2019-2021, Arm Limited. All rights reserved. 3*54fd6939SJiyong Park * 4*54fd6939SJiyong Park * SPDX-License-Identifier: BSD-3-Clause 5*54fd6939SJiyong Park */ 6*54fd6939SJiyong Park 7*54fd6939SJiyong Park#include <arch.h> 8*54fd6939SJiyong Park#include <asm_macros.S> 9*54fd6939SJiyong Park#include <common/bl_common.h> 10*54fd6939SJiyong Park#include <neoverse_v1.h> 11*54fd6939SJiyong Park#include <cpu_macros.S> 12*54fd6939SJiyong Park#include <plat_macros.S> 13*54fd6939SJiyong Park 14*54fd6939SJiyong Park/* Hardware handled coherency */ 15*54fd6939SJiyong Park#if HW_ASSISTED_COHERENCY == 0 16*54fd6939SJiyong Park#error "Neoverse V1 must be compiled with HW_ASSISTED_COHERENCY enabled" 17*54fd6939SJiyong Park#endif 18*54fd6939SJiyong Park 19*54fd6939SJiyong Park/* 64-bit only core */ 20*54fd6939SJiyong Park#if CTX_INCLUDE_AARCH32_REGS == 1 21*54fd6939SJiyong Park#error "Neoverse-V1 supports only AArch64. Compile with CTX_INCLUDE_AARCH32_REGS=0" 22*54fd6939SJiyong Park#endif 23*54fd6939SJiyong Park 24*54fd6939SJiyong Park /* -------------------------------------------------- 25*54fd6939SJiyong Park * Errata Workaround for Neoverse V1 Errata #1774420. 26*54fd6939SJiyong Park * This applies to revisions r0p0 and r1p0, fixed in r1p1. 27*54fd6939SJiyong Park * x0: variant[4:7] and revision[0:3] of current cpu. 28*54fd6939SJiyong Park * Shall clobber: x0-x17 29*54fd6939SJiyong Park * -------------------------------------------------- 30*54fd6939SJiyong Park */ 31*54fd6939SJiyong Parkfunc errata_neoverse_v1_1774420_wa 32*54fd6939SJiyong Park /* Check workaround compatibility. */ 33*54fd6939SJiyong Park mov x17, x30 34*54fd6939SJiyong Park bl check_errata_1774420 35*54fd6939SJiyong Park cbz x0, 1f 36*54fd6939SJiyong Park 37*54fd6939SJiyong Park /* Set bit 53 in CPUECTLR_EL1 */ 38*54fd6939SJiyong Park mrs x1, NEOVERSE_V1_CPUECTLR_EL1 39*54fd6939SJiyong Park orr x1, x1, #NEOVERSE_V1_CPUECTLR_EL1_BIT_53 40*54fd6939SJiyong Park msr NEOVERSE_V1_CPUECTLR_EL1, x1 41*54fd6939SJiyong Park isb 42*54fd6939SJiyong Park1: 43*54fd6939SJiyong Park ret x17 44*54fd6939SJiyong Parkendfunc errata_neoverse_v1_1774420_wa 45*54fd6939SJiyong Park 46*54fd6939SJiyong Parkfunc check_errata_1774420 47*54fd6939SJiyong Park /* Applies to r0p0 and r1p0. */ 48*54fd6939SJiyong Park mov x1, #0x10 49*54fd6939SJiyong Park b cpu_rev_var_ls 50*54fd6939SJiyong Parkendfunc check_errata_1774420 51*54fd6939SJiyong Park 52*54fd6939SJiyong Park /* -------------------------------------------------- 53*54fd6939SJiyong Park * Errata Workaround for Neoverse V1 Errata #1791573. 54*54fd6939SJiyong Park * This applies to revisions r0p0 and r1p0, fixed in r1p1. 55*54fd6939SJiyong Park * x0: variant[4:7] and revision[0:3] of current cpu. 56*54fd6939SJiyong Park * Shall clobber: x0-x17 57*54fd6939SJiyong Park * -------------------------------------------------- 58*54fd6939SJiyong Park */ 59*54fd6939SJiyong Parkfunc errata_neoverse_v1_1791573_wa 60*54fd6939SJiyong Park /* Check workaround compatibility. */ 61*54fd6939SJiyong Park mov x17, x30 62*54fd6939SJiyong Park bl check_errata_1791573 63*54fd6939SJiyong Park cbz x0, 1f 64*54fd6939SJiyong Park 65*54fd6939SJiyong Park /* Set bit 2 in ACTLR2_EL1 */ 66*54fd6939SJiyong Park mrs x1, NEOVERSE_V1_ACTLR2_EL1 67*54fd6939SJiyong Park orr x1, x1, #NEOVERSE_V1_ACTLR2_EL1_BIT_2 68*54fd6939SJiyong Park msr NEOVERSE_V1_ACTLR2_EL1, x1 69*54fd6939SJiyong Park isb 70*54fd6939SJiyong Park1: 71*54fd6939SJiyong Park ret x17 72*54fd6939SJiyong Parkendfunc errata_neoverse_v1_1791573_wa 73*54fd6939SJiyong Park 74*54fd6939SJiyong Parkfunc check_errata_1791573 75*54fd6939SJiyong Park /* Applies to r0p0 and r1p0. */ 76*54fd6939SJiyong Park mov x1, #0x10 77*54fd6939SJiyong Park b cpu_rev_var_ls 78*54fd6939SJiyong Parkendfunc check_errata_1791573 79*54fd6939SJiyong Park 80*54fd6939SJiyong Park /* -------------------------------------------------- 81*54fd6939SJiyong Park * Errata Workaround for Neoverse V1 Errata #1852267. 82*54fd6939SJiyong Park * This applies to revisions r0p0 and r1p0, fixed in r1p1. 83*54fd6939SJiyong Park * x0: variant[4:7] and revision[0:3] of current cpu. 84*54fd6939SJiyong Park * Shall clobber: x0-x17 85*54fd6939SJiyong Park * -------------------------------------------------- 86*54fd6939SJiyong Park */ 87*54fd6939SJiyong Parkfunc errata_neoverse_v1_1852267_wa 88*54fd6939SJiyong Park /* Check workaround compatibility. */ 89*54fd6939SJiyong Park mov x17, x30 90*54fd6939SJiyong Park bl check_errata_1852267 91*54fd6939SJiyong Park cbz x0, 1f 92*54fd6939SJiyong Park 93*54fd6939SJiyong Park /* Set bit 28 in ACTLR2_EL1 */ 94*54fd6939SJiyong Park mrs x1, NEOVERSE_V1_ACTLR2_EL1 95*54fd6939SJiyong Park orr x1, x1, #NEOVERSE_V1_ACTLR2_EL1_BIT_28 96*54fd6939SJiyong Park msr NEOVERSE_V1_ACTLR2_EL1, x1 97*54fd6939SJiyong Park isb 98*54fd6939SJiyong Park1: 99*54fd6939SJiyong Park ret x17 100*54fd6939SJiyong Parkendfunc errata_neoverse_v1_1852267_wa 101*54fd6939SJiyong Park 102*54fd6939SJiyong Parkfunc check_errata_1852267 103*54fd6939SJiyong Park /* Applies to r0p0 and r1p0. */ 104*54fd6939SJiyong Park mov x1, #0x10 105*54fd6939SJiyong Park b cpu_rev_var_ls 106*54fd6939SJiyong Parkendfunc check_errata_1852267 107*54fd6939SJiyong Park 108*54fd6939SJiyong Park /* -------------------------------------------------- 109*54fd6939SJiyong Park * Errata Workaround for Neoverse V1 Errata #1925756. 110*54fd6939SJiyong Park * This applies to revisions <= r1p1. 111*54fd6939SJiyong Park * x0: variant[4:7] and revision[0:3] of current cpu. 112*54fd6939SJiyong Park * Shall clobber: x0-x17 113*54fd6939SJiyong Park * -------------------------------------------------- 114*54fd6939SJiyong Park */ 115*54fd6939SJiyong Parkfunc errata_neoverse_v1_1925756_wa 116*54fd6939SJiyong Park /* Check workaround compatibility. */ 117*54fd6939SJiyong Park mov x17, x30 118*54fd6939SJiyong Park bl check_errata_1925756 119*54fd6939SJiyong Park cbz x0, 1f 120*54fd6939SJiyong Park 121*54fd6939SJiyong Park /* Set bit 8 in CPUECTLR_EL1 */ 122*54fd6939SJiyong Park mrs x1, NEOVERSE_V1_CPUECTLR_EL1 123*54fd6939SJiyong Park orr x1, x1, #NEOVERSE_V1_CPUECTLR_EL1_BIT_8 124*54fd6939SJiyong Park msr NEOVERSE_V1_CPUECTLR_EL1, x1 125*54fd6939SJiyong Park isb 126*54fd6939SJiyong Park1: 127*54fd6939SJiyong Park ret x17 128*54fd6939SJiyong Parkendfunc errata_neoverse_v1_1925756_wa 129*54fd6939SJiyong Park 130*54fd6939SJiyong Parkfunc check_errata_1925756 131*54fd6939SJiyong Park /* Applies to <= r1p1. */ 132*54fd6939SJiyong Park mov x1, #0x11 133*54fd6939SJiyong Park b cpu_rev_var_ls 134*54fd6939SJiyong Parkendfunc check_errata_1925756 135*54fd6939SJiyong Park 136*54fd6939SJiyong Park /* -------------------------------------------------- 137*54fd6939SJiyong Park * Errata Workaround for Neoverse V1 Erratum #1940577 138*54fd6939SJiyong Park * This applies to revisions r1p0 - r1p1 and is open. 139*54fd6939SJiyong Park * It also exists in r0p0 but there is no fix in that 140*54fd6939SJiyong Park * revision. 141*54fd6939SJiyong Park * Inputs: 142*54fd6939SJiyong Park * x0: variant[4:7] and revision[0:3] of current cpu. 143*54fd6939SJiyong Park * Shall clobber: x0-x17 144*54fd6939SJiyong Park * -------------------------------------------------- 145*54fd6939SJiyong Park */ 146*54fd6939SJiyong Parkfunc errata_neoverse_v1_1940577_wa 147*54fd6939SJiyong Park /* Compare x0 against revisions r1p0 - r1p1 */ 148*54fd6939SJiyong Park mov x17, x30 149*54fd6939SJiyong Park bl check_errata_1940577 150*54fd6939SJiyong Park cbz x0, 1f 151*54fd6939SJiyong Park 152*54fd6939SJiyong Park mov x0, #0 153*54fd6939SJiyong Park msr S3_6_C15_C8_0, x0 154*54fd6939SJiyong Park ldr x0, =0x10E3900002 155*54fd6939SJiyong Park msr S3_6_C15_C8_2, x0 156*54fd6939SJiyong Park ldr x0, =0x10FFF00083 157*54fd6939SJiyong Park msr S3_6_C15_C8_3, x0 158*54fd6939SJiyong Park ldr x0, =0x2001003FF 159*54fd6939SJiyong Park msr S3_6_C15_C8_1, x0 160*54fd6939SJiyong Park 161*54fd6939SJiyong Park mov x0, #1 162*54fd6939SJiyong Park msr S3_6_C15_C8_0, x0 163*54fd6939SJiyong Park ldr x0, =0x10E3800082 164*54fd6939SJiyong Park msr S3_6_C15_C8_2, x0 165*54fd6939SJiyong Park ldr x0, =0x10FFF00083 166*54fd6939SJiyong Park msr S3_6_C15_C8_3, x0 167*54fd6939SJiyong Park ldr x0, =0x2001003FF 168*54fd6939SJiyong Park msr S3_6_C15_C8_1, x0 169*54fd6939SJiyong Park 170*54fd6939SJiyong Park mov x0, #2 171*54fd6939SJiyong Park msr S3_6_C15_C8_0, x0 172*54fd6939SJiyong Park ldr x0, =0x10E3800200 173*54fd6939SJiyong Park msr S3_6_C15_C8_2, x0 174*54fd6939SJiyong Park ldr x0, =0x10FFF003E0 175*54fd6939SJiyong Park msr S3_6_C15_C8_3, x0 176*54fd6939SJiyong Park ldr x0, =0x2001003FF 177*54fd6939SJiyong Park msr S3_6_C15_C8_1, x0 178*54fd6939SJiyong Park 179*54fd6939SJiyong Park isb 180*54fd6939SJiyong Park1: 181*54fd6939SJiyong Park ret x17 182*54fd6939SJiyong Parkendfunc errata_neoverse_v1_1940577_wa 183*54fd6939SJiyong Park 184*54fd6939SJiyong Parkfunc check_errata_1940577 185*54fd6939SJiyong Park /* Applies to revisions r1p0 - r1p1. */ 186*54fd6939SJiyong Park mov x1, #0x10 187*54fd6939SJiyong Park mov x2, #0x11 188*54fd6939SJiyong Park b cpu_rev_var_range 189*54fd6939SJiyong Parkendfunc check_errata_1940577 190*54fd6939SJiyong Park 191*54fd6939SJiyong Park /* -------------------------------------------------- 192*54fd6939SJiyong Park * Errata Workaround for Neoverse V1 Errata #1966096 193*54fd6939SJiyong Park * This applies to revisions r1p0 - r1p1 and is open. 194*54fd6939SJiyong Park * It also exists in r0p0 but there is no workaround 195*54fd6939SJiyong Park * for that revision. 196*54fd6939SJiyong Park * x0: variant[4:7] and revision[0:3] of current cpu. 197*54fd6939SJiyong Park * Shall clobber: x0-x17 198*54fd6939SJiyong Park * -------------------------------------------------- 199*54fd6939SJiyong Park */ 200*54fd6939SJiyong Parkfunc errata_neoverse_v1_1966096_wa 201*54fd6939SJiyong Park /* Check workaround compatibility. */ 202*54fd6939SJiyong Park mov x17, x30 203*54fd6939SJiyong Park bl check_errata_1966096 204*54fd6939SJiyong Park cbz x0, 1f 205*54fd6939SJiyong Park 206*54fd6939SJiyong Park /* Apply the workaround. */ 207*54fd6939SJiyong Park mov x0, #0x3 208*54fd6939SJiyong Park msr S3_6_C15_C8_0, x0 209*54fd6939SJiyong Park ldr x0, =0xEE010F12 210*54fd6939SJiyong Park msr S3_6_C15_C8_2, x0 211*54fd6939SJiyong Park ldr x0, =0xFFFF0FFF 212*54fd6939SJiyong Park msr S3_6_C15_C8_3, x0 213*54fd6939SJiyong Park ldr x0, =0x80000000003FF 214*54fd6939SJiyong Park msr S3_6_C15_C8_1, x0 215*54fd6939SJiyong Park isb 216*54fd6939SJiyong Park 217*54fd6939SJiyong Park1: 218*54fd6939SJiyong Park ret x17 219*54fd6939SJiyong Parkendfunc errata_neoverse_v1_1966096_wa 220*54fd6939SJiyong Park 221*54fd6939SJiyong Parkfunc check_errata_1966096 222*54fd6939SJiyong Park mov x1, #0x10 223*54fd6939SJiyong Park mov x2, #0x11 224*54fd6939SJiyong Park b cpu_rev_var_range 225*54fd6939SJiyong Parkendfunc check_errata_1966096 226*54fd6939SJiyong Park 227*54fd6939SJiyong Park /* -------------------------------------------------- 228*54fd6939SJiyong Park * Errata Workaround for Neoverse V1 Errata #2139242. 229*54fd6939SJiyong Park * This applies to revisions r0p0, r1p0, and r1p1, it 230*54fd6939SJiyong Park * is still open. 231*54fd6939SJiyong Park * x0: variant[4:7] and revision[0:3] of current cpu. 232*54fd6939SJiyong Park * Shall clobber: x0-x17 233*54fd6939SJiyong Park * -------------------------------------------------- 234*54fd6939SJiyong Park */ 235*54fd6939SJiyong Parkfunc errata_neoverse_v1_2139242_wa 236*54fd6939SJiyong Park /* Check workaround compatibility. */ 237*54fd6939SJiyong Park mov x17, x30 238*54fd6939SJiyong Park bl check_errata_2139242 239*54fd6939SJiyong Park cbz x0, 1f 240*54fd6939SJiyong Park 241*54fd6939SJiyong Park /* Apply the workaround. */ 242*54fd6939SJiyong Park mov x0, #0x3 243*54fd6939SJiyong Park msr S3_6_C15_C8_0, x0 244*54fd6939SJiyong Park ldr x0, =0xEE720F14 245*54fd6939SJiyong Park msr S3_6_C15_C8_2, x0 246*54fd6939SJiyong Park ldr x0, =0xFFFF0FDF 247*54fd6939SJiyong Park msr S3_6_C15_C8_3, x0 248*54fd6939SJiyong Park ldr x0, =0x40000005003FF 249*54fd6939SJiyong Park msr S3_6_C15_C8_1, x0 250*54fd6939SJiyong Park isb 251*54fd6939SJiyong Park 252*54fd6939SJiyong Park1: 253*54fd6939SJiyong Park ret x17 254*54fd6939SJiyong Parkendfunc errata_neoverse_v1_2139242_wa 255*54fd6939SJiyong Park 256*54fd6939SJiyong Parkfunc check_errata_2139242 257*54fd6939SJiyong Park /* Applies to r0p0, r1p0, r1p1 */ 258*54fd6939SJiyong Park mov x1, #0x11 259*54fd6939SJiyong Park b cpu_rev_var_ls 260*54fd6939SJiyong Parkendfunc check_errata_2139242 261*54fd6939SJiyong Park 262*54fd6939SJiyong Park /* -------------------------------------------------- 263*54fd6939SJiyong Park * Errata Workaround for Neoverse V1 Errata #2108267. 264*54fd6939SJiyong Park * This applies to revisions r0p0, r1p0, and r1p1, it 265*54fd6939SJiyong Park * is still open. 266*54fd6939SJiyong Park * x0: variant[4:7] and revision[0:3] of current cpu. 267*54fd6939SJiyong Park * Shall clobber: x0-x1, x17 268*54fd6939SJiyong Park * -------------------------------------------------- 269*54fd6939SJiyong Park */ 270*54fd6939SJiyong Parkfunc errata_neoverse_v1_2108267_wa 271*54fd6939SJiyong Park /* Check workaround compatibility. */ 272*54fd6939SJiyong Park mov x17, x30 273*54fd6939SJiyong Park bl check_errata_2108267 274*54fd6939SJiyong Park cbz x0, 1f 275*54fd6939SJiyong Park 276*54fd6939SJiyong Park /* Apply the workaround. */ 277*54fd6939SJiyong Park mrs x1, NEOVERSE_V1_CPUECTLR_EL1 278*54fd6939SJiyong Park mov x0, #NEOVERSE_V1_CPUECTLR_EL1_PF_MODE_CNSRV 279*54fd6939SJiyong Park bfi x1, x0, #CPUECTLR_EL1_PF_MODE_LSB, #CPUECTLR_EL1_PF_MODE_WIDTH 280*54fd6939SJiyong Park msr NEOVERSE_V1_CPUECTLR_EL1, x1 281*54fd6939SJiyong Park1: 282*54fd6939SJiyong Park ret x17 283*54fd6939SJiyong Parkendfunc errata_neoverse_v1_2108267_wa 284*54fd6939SJiyong Park 285*54fd6939SJiyong Parkfunc check_errata_2108267 286*54fd6939SJiyong Park /* Applies to r0p0, r1p0, r1p1 */ 287*54fd6939SJiyong Park mov x1, #0x11 288*54fd6939SJiyong Park b cpu_rev_var_ls 289*54fd6939SJiyong Parkendfunc check_errata_2108267 290*54fd6939SJiyong Park 291*54fd6939SJiyong Park /* -------------------------------------------------- 292*54fd6939SJiyong Park * Errata Workaround for Neoverse V1 Errata #2216392. 293*54fd6939SJiyong Park * This applies to revisions r1p0 and r1p1 and is 294*54fd6939SJiyong Park * still open. 295*54fd6939SJiyong Park * This issue is also present in r0p0 but there is no 296*54fd6939SJiyong Park * workaround in that revision. 297*54fd6939SJiyong Park * x0: variant[4:7] and revision[0:3] of current cpu. 298*54fd6939SJiyong Park * Shall clobber: x0-x17 299*54fd6939SJiyong Park * -------------------------------------------------- 300*54fd6939SJiyong Park */ 301*54fd6939SJiyong Parkfunc errata_neoverse_v1_2216392_wa 302*54fd6939SJiyong Park /* Check workaround compatibility. */ 303*54fd6939SJiyong Park mov x17, x30 304*54fd6939SJiyong Park bl check_errata_2216392 305*54fd6939SJiyong Park cbz x0, 1f 306*54fd6939SJiyong Park 307*54fd6939SJiyong Park ldr x0, =0x5 308*54fd6939SJiyong Park msr S3_6_c15_c8_0, x0 /* CPUPSELR_EL3 */ 309*54fd6939SJiyong Park ldr x0, =0x10F600E000 310*54fd6939SJiyong Park msr S3_6_c15_c8_2, x0 /* CPUPOR_EL3 */ 311*54fd6939SJiyong Park ldr x0, =0x10FF80E000 312*54fd6939SJiyong Park msr S3_6_c15_c8_3, x0 /* CPUPMR_EL3 */ 313*54fd6939SJiyong Park ldr x0, =0x80000000003FF 314*54fd6939SJiyong Park msr S3_6_c15_c8_1, x0 /* CPUPCR_EL3 */ 315*54fd6939SJiyong Park 316*54fd6939SJiyong Park isb 317*54fd6939SJiyong Park1: 318*54fd6939SJiyong Park ret x17 319*54fd6939SJiyong Parkendfunc errata_neoverse_v1_2216392_wa 320*54fd6939SJiyong Park 321*54fd6939SJiyong Parkfunc check_errata_2216392 322*54fd6939SJiyong Park /* Applies to revisions r1p0 and r1p1. */ 323*54fd6939SJiyong Park mov x1, #CPU_REV(1, 0) 324*54fd6939SJiyong Park mov x2, #CPU_REV(1, 1) 325*54fd6939SJiyong Park b cpu_rev_var_range 326*54fd6939SJiyong Parkendfunc check_errata_2216392 327*54fd6939SJiyong Park 328*54fd6939SJiyong Park /* --------------------------------------------- 329*54fd6939SJiyong Park * HW will do the cache maintenance while powering down 330*54fd6939SJiyong Park * --------------------------------------------- 331*54fd6939SJiyong Park */ 332*54fd6939SJiyong Parkfunc neoverse_v1_core_pwr_dwn 333*54fd6939SJiyong Park /* --------------------------------------------- 334*54fd6939SJiyong Park * Enable CPU power down bit in power control register 335*54fd6939SJiyong Park * --------------------------------------------- 336*54fd6939SJiyong Park */ 337*54fd6939SJiyong Park mrs x0, NEOVERSE_V1_CPUPWRCTLR_EL1 338*54fd6939SJiyong Park orr x0, x0, #NEOVERSE_V1_CPUPWRCTLR_EL1_CORE_PWRDN_BIT 339*54fd6939SJiyong Park msr NEOVERSE_V1_CPUPWRCTLR_EL1, x0 340*54fd6939SJiyong Park isb 341*54fd6939SJiyong Park ret 342*54fd6939SJiyong Parkendfunc neoverse_v1_core_pwr_dwn 343*54fd6939SJiyong Park 344*54fd6939SJiyong Park /* 345*54fd6939SJiyong Park * Errata printing function for Neoverse V1. Must follow AAPCS. 346*54fd6939SJiyong Park */ 347*54fd6939SJiyong Park#if REPORT_ERRATA 348*54fd6939SJiyong Parkfunc neoverse_v1_errata_report 349*54fd6939SJiyong Park stp x8, x30, [sp, #-16]! 350*54fd6939SJiyong Park 351*54fd6939SJiyong Park bl cpu_get_rev_var 352*54fd6939SJiyong Park mov x8, x0 353*54fd6939SJiyong Park 354*54fd6939SJiyong Park /* 355*54fd6939SJiyong Park * Report all errata. The revision-variant information is passed to 356*54fd6939SJiyong Park * checking functions of each errata. 357*54fd6939SJiyong Park */ 358*54fd6939SJiyong Park report_errata ERRATA_V1_1774420, neoverse_v1, 1774420 359*54fd6939SJiyong Park report_errata ERRATA_V1_1791573, neoverse_v1, 1791573 360*54fd6939SJiyong Park report_errata ERRATA_V1_1852267, neoverse_v1, 1852267 361*54fd6939SJiyong Park report_errata ERRATA_V1_1925756, neoverse_v1, 1925756 362*54fd6939SJiyong Park report_errata ERRATA_V1_1940577, neoverse_v1, 1940577 363*54fd6939SJiyong Park report_errata ERRATA_V1_1966096, neoverse_v1, 1966096 364*54fd6939SJiyong Park report_errata ERRATA_V1_2139242, neoverse_v1, 2139242 365*54fd6939SJiyong Park report_errata ERRATA_V1_2108267, neoverse_v1, 2108267 366*54fd6939SJiyong Park report_errata ERRATA_V1_2216392, neoverse_v1, 2216392 367*54fd6939SJiyong Park 368*54fd6939SJiyong Park ldp x8, x30, [sp], #16 369*54fd6939SJiyong Park ret 370*54fd6939SJiyong Parkendfunc neoverse_v1_errata_report 371*54fd6939SJiyong Park#endif 372*54fd6939SJiyong Park 373*54fd6939SJiyong Parkfunc neoverse_v1_reset_func 374*54fd6939SJiyong Park mov x19, x30 375*54fd6939SJiyong Park 376*54fd6939SJiyong Park /* Disable speculative loads */ 377*54fd6939SJiyong Park msr SSBS, xzr 378*54fd6939SJiyong Park isb 379*54fd6939SJiyong Park 380*54fd6939SJiyong Park#if ERRATA_V1_1774420 381*54fd6939SJiyong Park mov x0, x18 382*54fd6939SJiyong Park bl errata_neoverse_v1_1774420_wa 383*54fd6939SJiyong Park#endif 384*54fd6939SJiyong Park 385*54fd6939SJiyong Park#if ERRATA_V1_1791573 386*54fd6939SJiyong Park mov x0, x18 387*54fd6939SJiyong Park bl errata_neoverse_v1_1791573_wa 388*54fd6939SJiyong Park#endif 389*54fd6939SJiyong Park 390*54fd6939SJiyong Park#if ERRATA_V1_1852267 391*54fd6939SJiyong Park mov x0, x18 392*54fd6939SJiyong Park bl errata_neoverse_v1_1852267_wa 393*54fd6939SJiyong Park#endif 394*54fd6939SJiyong Park 395*54fd6939SJiyong Park#if ERRATA_V1_1925756 396*54fd6939SJiyong Park mov x0, x18 397*54fd6939SJiyong Park bl errata_neoverse_v1_1925756_wa 398*54fd6939SJiyong Park#endif 399*54fd6939SJiyong Park 400*54fd6939SJiyong Park#if ERRATA_V1_1940577 401*54fd6939SJiyong Park mov x0, x18 402*54fd6939SJiyong Park bl errata_neoverse_v1_1940577_wa 403*54fd6939SJiyong Park#endif 404*54fd6939SJiyong Park 405*54fd6939SJiyong Park#if ERRATA_V1_1966096 406*54fd6939SJiyong Park mov x0, x18 407*54fd6939SJiyong Park bl errata_neoverse_v1_1966096_wa 408*54fd6939SJiyong Park#endif 409*54fd6939SJiyong Park 410*54fd6939SJiyong Park#if ERRATA_V1_2139242 411*54fd6939SJiyong Park mov x0, x18 412*54fd6939SJiyong Park bl errata_neoverse_v1_2139242_wa 413*54fd6939SJiyong Park#endif 414*54fd6939SJiyong Park 415*54fd6939SJiyong Park#if ERRATA_V1_2108267 416*54fd6939SJiyong Park mov x0, x18 417*54fd6939SJiyong Park bl errata_neoverse_v1_2108267_wa 418*54fd6939SJiyong Park#endif 419*54fd6939SJiyong Park 420*54fd6939SJiyong Park#if ERRATA_V1_2216392 421*54fd6939SJiyong Park mov x0, x18 422*54fd6939SJiyong Park bl errata_neoverse_v1_2216392_wa 423*54fd6939SJiyong Park#endif 424*54fd6939SJiyong Park 425*54fd6939SJiyong Park ret x19 426*54fd6939SJiyong Parkendfunc neoverse_v1_reset_func 427*54fd6939SJiyong Park 428*54fd6939SJiyong Park /* --------------------------------------------- 429*54fd6939SJiyong Park * This function provides Neoverse-V1 specific 430*54fd6939SJiyong Park * register information for crash reporting. 431*54fd6939SJiyong Park * It needs to return with x6 pointing to 432*54fd6939SJiyong Park * a list of register names in ascii and 433*54fd6939SJiyong Park * x8 - x15 having values of registers to be 434*54fd6939SJiyong Park * reported. 435*54fd6939SJiyong Park * --------------------------------------------- 436*54fd6939SJiyong Park */ 437*54fd6939SJiyong Park.section .rodata.neoverse_v1_regs, "aS" 438*54fd6939SJiyong Parkneoverse_v1_regs: /* The ascii list of register names to be reported */ 439*54fd6939SJiyong Park .asciz "cpuectlr_el1", "" 440*54fd6939SJiyong Park 441*54fd6939SJiyong Parkfunc neoverse_v1_cpu_reg_dump 442*54fd6939SJiyong Park adr x6, neoverse_v1_regs 443*54fd6939SJiyong Park mrs x8, NEOVERSE_V1_CPUECTLR_EL1 444*54fd6939SJiyong Park ret 445*54fd6939SJiyong Parkendfunc neoverse_v1_cpu_reg_dump 446*54fd6939SJiyong Park 447*54fd6939SJiyong Parkdeclare_cpu_ops neoverse_v1, NEOVERSE_V1_MIDR, \ 448*54fd6939SJiyong Park neoverse_v1_reset_func, \ 449*54fd6939SJiyong Park neoverse_v1_core_pwr_dwn 450