1b04ea14bSJohn Tsichritzis/* 2*1ca5c887Slaurenw-arm * Copyright (c) 2017-2023, 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/* -------------------------------------------------- 65a601afe1Slauwal01 * Errata Workaround for Neoverse N1 Errata #1073348 66a601afe1Slauwal01 * This applies to revision r0p0 and r1p0 of Neoverse N1. 67a601afe1Slauwal01 * Inputs: 68a601afe1Slauwal01 * x0: variant[4:7] and revision[0:3] of current cpu. 69a601afe1Slauwal01 * Shall clobber: x0-x17 70a601afe1Slauwal01 * -------------------------------------------------- 71a601afe1Slauwal01 */ 72a601afe1Slauwal01func errata_n1_1073348_wa 73a601afe1Slauwal01 /* Compare x0 against revision r1p0 */ 74a601afe1Slauwal01 mov x17, x30 75a601afe1Slauwal01 bl check_errata_1073348 76a601afe1Slauwal01 cbz x0, 1f 77a601afe1Slauwal01 mrs x1, NEOVERSE_N1_CPUACTLR_EL1 78a601afe1Slauwal01 orr x1, x1, NEOVERSE_N1_CPUACTLR_EL1_BIT_6 79a601afe1Slauwal01 msr NEOVERSE_N1_CPUACTLR_EL1, x1 80a601afe1Slauwal011: 81a601afe1Slauwal01 ret x17 82a601afe1Slauwal01endfunc errata_n1_1073348_wa 83a601afe1Slauwal01 84a601afe1Slauwal01func check_errata_1073348 85a601afe1Slauwal01 /* Applies to r0p0 and r1p0 */ 86a601afe1Slauwal01 mov x1, #0x10 87a601afe1Slauwal01 b cpu_rev_var_ls 88a601afe1Slauwal01endfunc check_errata_1073348 89a601afe1Slauwal01 90a601afe1Slauwal01/* -------------------------------------------------- 91e34606f2Slauwal01 * Errata Workaround for Neoverse N1 Errata #1130799 92e34606f2Slauwal01 * This applies to revision <=r2p0 of Neoverse N1. 93e34606f2Slauwal01 * Inputs: 94e34606f2Slauwal01 * x0: variant[4:7] and revision[0:3] of current cpu. 95e34606f2Slauwal01 * Shall clobber: x0-x17 96e34606f2Slauwal01 * -------------------------------------------------- 97e34606f2Slauwal01 */ 98e34606f2Slauwal01func errata_n1_1130799_wa 99e34606f2Slauwal01 /* Compare x0 against revision r2p0 */ 100e34606f2Slauwal01 mov x17, x30 101e34606f2Slauwal01 bl check_errata_1130799 102e34606f2Slauwal01 cbz x0, 1f 103e34606f2Slauwal01 mrs x1, NEOVERSE_N1_CPUACTLR2_EL1 104e34606f2Slauwal01 orr x1, x1, NEOVERSE_N1_CPUACTLR2_EL1_BIT_59 105e34606f2Slauwal01 msr NEOVERSE_N1_CPUACTLR2_EL1, x1 106e34606f2Slauwal011: 107e34606f2Slauwal01 ret x17 108e34606f2Slauwal01endfunc errata_n1_1130799_wa 109e34606f2Slauwal01 110e34606f2Slauwal01func check_errata_1130799 111e34606f2Slauwal01 /* Applies to <=r2p0 */ 112e34606f2Slauwal01 mov x1, #0x20 113e34606f2Slauwal01 b cpu_rev_var_ls 114e34606f2Slauwal01endfunc check_errata_1130799 115e34606f2Slauwal01 116e34606f2Slauwal01/* -------------------------------------------------- 1172017ab24Slauwal01 * Errata Workaround for Neoverse N1 Errata #1165347 1182017ab24Slauwal01 * This applies to revision <=r2p0 of Neoverse N1. 1192017ab24Slauwal01 * Inputs: 1202017ab24Slauwal01 * x0: variant[4:7] and revision[0:3] of current cpu. 1212017ab24Slauwal01 * Shall clobber: x0-x17 1222017ab24Slauwal01 * -------------------------------------------------- 1232017ab24Slauwal01 */ 1242017ab24Slauwal01func errata_n1_1165347_wa 1252017ab24Slauwal01 /* Compare x0 against revision r2p0 */ 1262017ab24Slauwal01 mov x17, x30 1272017ab24Slauwal01 bl check_errata_1165347 1282017ab24Slauwal01 cbz x0, 1f 1292017ab24Slauwal01 mrs x1, NEOVERSE_N1_CPUACTLR2_EL1 1302017ab24Slauwal01 orr x1, x1, NEOVERSE_N1_CPUACTLR2_EL1_BIT_0 1312017ab24Slauwal01 orr x1, x1, NEOVERSE_N1_CPUACTLR2_EL1_BIT_15 1322017ab24Slauwal01 msr NEOVERSE_N1_CPUACTLR2_EL1, x1 1332017ab24Slauwal011: 1342017ab24Slauwal01 ret x17 1352017ab24Slauwal01endfunc errata_n1_1165347_wa 1362017ab24Slauwal01 1372017ab24Slauwal01func check_errata_1165347 1382017ab24Slauwal01 /* Applies to <=r2p0 */ 1392017ab24Slauwal01 mov x1, #0x20 1402017ab24Slauwal01 b cpu_rev_var_ls 1412017ab24Slauwal01endfunc check_errata_1165347 1422017ab24Slauwal01 1432017ab24Slauwal01/* -------------------------------------------------- 144ef5fa7d4Slauwal01 * Errata Workaround for Neoverse N1 Errata #1207823 145ef5fa7d4Slauwal01 * This applies to revision <=r2p0 of Neoverse N1. 146ef5fa7d4Slauwal01 * Inputs: 147ef5fa7d4Slauwal01 * x0: variant[4:7] and revision[0:3] of current cpu. 148ef5fa7d4Slauwal01 * Shall clobber: x0-x17 149ef5fa7d4Slauwal01 * -------------------------------------------------- 150ef5fa7d4Slauwal01 */ 151ef5fa7d4Slauwal01func errata_n1_1207823_wa 152ef5fa7d4Slauwal01 /* Compare x0 against revision r2p0 */ 153ef5fa7d4Slauwal01 mov x17, x30 154ef5fa7d4Slauwal01 bl check_errata_1207823 155ef5fa7d4Slauwal01 cbz x0, 1f 156ef5fa7d4Slauwal01 mrs x1, NEOVERSE_N1_CPUACTLR2_EL1 157ef5fa7d4Slauwal01 orr x1, x1, NEOVERSE_N1_CPUACTLR2_EL1_BIT_11 158ef5fa7d4Slauwal01 msr NEOVERSE_N1_CPUACTLR2_EL1, x1 159ef5fa7d4Slauwal011: 160ef5fa7d4Slauwal01 ret x17 161ef5fa7d4Slauwal01endfunc errata_n1_1207823_wa 162ef5fa7d4Slauwal01 163ef5fa7d4Slauwal01func check_errata_1207823 164ef5fa7d4Slauwal01 /* Applies to <=r2p0 */ 165ef5fa7d4Slauwal01 mov x1, #0x20 166ef5fa7d4Slauwal01 b cpu_rev_var_ls 167ef5fa7d4Slauwal01endfunc check_errata_1207823 168ef5fa7d4Slauwal01 169ef5fa7d4Slauwal01/* -------------------------------------------------- 1709eceb020Slauwal01 * Errata Workaround for Neoverse N1 Errata #1220197 1719eceb020Slauwal01 * This applies to revision <=r2p0 of Neoverse N1. 1729eceb020Slauwal01 * Inputs: 1739eceb020Slauwal01 * x0: variant[4:7] and revision[0:3] of current cpu. 1749eceb020Slauwal01 * Shall clobber: x0-x17 1759eceb020Slauwal01 * -------------------------------------------------- 1769eceb020Slauwal01 */ 1779eceb020Slauwal01func errata_n1_1220197_wa 1789eceb020Slauwal01 /* Compare x0 against revision r2p0 */ 1799eceb020Slauwal01 mov x17, x30 1809eceb020Slauwal01 bl check_errata_1220197 1819eceb020Slauwal01 cbz x0, 1f 1829eceb020Slauwal01 mrs x1, NEOVERSE_N1_CPUECTLR_EL1 1839eceb020Slauwal01 orr x1, x1, NEOVERSE_N1_WS_THR_L2_MASK 1849eceb020Slauwal01 msr NEOVERSE_N1_CPUECTLR_EL1, x1 1859eceb020Slauwal011: 1869eceb020Slauwal01 ret x17 1879eceb020Slauwal01endfunc errata_n1_1220197_wa 1889eceb020Slauwal01 1899eceb020Slauwal01func check_errata_1220197 1909eceb020Slauwal01 /* Applies to <=r2p0 */ 1919eceb020Slauwal01 mov x1, #0x20 1929eceb020Slauwal01 b cpu_rev_var_ls 1939eceb020Slauwal01endfunc check_errata_1220197 1949eceb020Slauwal01 1959eceb020Slauwal01/* -------------------------------------------------- 196335b3c79Slauwal01 * Errata Workaround for Neoverse N1 Errata #1257314 197335b3c79Slauwal01 * This applies to revision <=r3p0 of Neoverse N1. 198335b3c79Slauwal01 * Inputs: 199335b3c79Slauwal01 * x0: variant[4:7] and revision[0:3] of current cpu. 200335b3c79Slauwal01 * Shall clobber: x0-x17 201335b3c79Slauwal01 * -------------------------------------------------- 202335b3c79Slauwal01 */ 203335b3c79Slauwal01func errata_n1_1257314_wa 204335b3c79Slauwal01 /* Compare x0 against revision r3p0 */ 205335b3c79Slauwal01 mov x17, x30 206335b3c79Slauwal01 bl check_errata_1257314 207335b3c79Slauwal01 cbz x0, 1f 208335b3c79Slauwal01 mrs x1, NEOVERSE_N1_CPUACTLR3_EL1 209335b3c79Slauwal01 orr x1, x1, NEOVERSE_N1_CPUACTLR3_EL1_BIT_10 210335b3c79Slauwal01 msr NEOVERSE_N1_CPUACTLR3_EL1, x1 211335b3c79Slauwal011: 212335b3c79Slauwal01 ret x17 213335b3c79Slauwal01endfunc errata_n1_1257314_wa 214335b3c79Slauwal01 215335b3c79Slauwal01func check_errata_1257314 216335b3c79Slauwal01 /* Applies to <=r3p0 */ 217335b3c79Slauwal01 mov x1, #0x30 218335b3c79Slauwal01 b cpu_rev_var_ls 219335b3c79Slauwal01endfunc check_errata_1257314 220335b3c79Slauwal01 221335b3c79Slauwal01/* -------------------------------------------------- 222411f4959Slauwal01 * Errata Workaround for Neoverse N1 Errata #1262606 223411f4959Slauwal01 * This applies to revision <=r3p0 of Neoverse N1. 224411f4959Slauwal01 * Inputs: 225411f4959Slauwal01 * x0: variant[4:7] and revision[0:3] of current cpu. 226411f4959Slauwal01 * Shall clobber: x0-x17 227411f4959Slauwal01 * -------------------------------------------------- 228411f4959Slauwal01 */ 229411f4959Slauwal01func errata_n1_1262606_wa 230411f4959Slauwal01 /* Compare x0 against revision r3p0 */ 231411f4959Slauwal01 mov x17, x30 232411f4959Slauwal01 bl check_errata_1262606 233411f4959Slauwal01 cbz x0, 1f 234411f4959Slauwal01 mrs x1, NEOVERSE_N1_CPUACTLR_EL1 235411f4959Slauwal01 orr x1, x1, NEOVERSE_N1_CPUACTLR_EL1_BIT_13 236411f4959Slauwal01 msr NEOVERSE_N1_CPUACTLR_EL1, x1 237411f4959Slauwal011: 238411f4959Slauwal01 ret x17 239411f4959Slauwal01endfunc errata_n1_1262606_wa 240411f4959Slauwal01 241411f4959Slauwal01func check_errata_1262606 242411f4959Slauwal01 /* Applies to <=r3p0 */ 243411f4959Slauwal01 mov x1, #0x30 244411f4959Slauwal01 b cpu_rev_var_ls 245411f4959Slauwal01endfunc check_errata_1262606 246411f4959Slauwal01 247411f4959Slauwal01/* -------------------------------------------------- 24811c48370Slauwal01 * Errata Workaround for Neoverse N1 Errata #1262888 24911c48370Slauwal01 * This applies to revision <=r3p0 of Neoverse N1. 25011c48370Slauwal01 * Inputs: 25111c48370Slauwal01 * x0: variant[4:7] and revision[0:3] of current cpu. 25211c48370Slauwal01 * Shall clobber: x0-x17 25311c48370Slauwal01 * -------------------------------------------------- 25411c48370Slauwal01 */ 25511c48370Slauwal01func errata_n1_1262888_wa 25611c48370Slauwal01 /* Compare x0 against revision r3p0 */ 25711c48370Slauwal01 mov x17, x30 25811c48370Slauwal01 bl check_errata_1262888 25911c48370Slauwal01 cbz x0, 1f 26011c48370Slauwal01 mrs x1, NEOVERSE_N1_CPUECTLR_EL1 26111c48370Slauwal01 orr x1, x1, NEOVERSE_N1_CPUECTLR_EL1_MM_TLBPF_DIS_BIT 26211c48370Slauwal01 msr NEOVERSE_N1_CPUECTLR_EL1, x1 26311c48370Slauwal011: 26411c48370Slauwal01 ret x17 26511c48370Slauwal01endfunc errata_n1_1262888_wa 26611c48370Slauwal01 26711c48370Slauwal01func check_errata_1262888 26811c48370Slauwal01 /* Applies to <=r3p0 */ 26911c48370Slauwal01 mov x1, #0x30 27011c48370Slauwal01 b cpu_rev_var_ls 27111c48370Slauwal01endfunc check_errata_1262888 27211c48370Slauwal01 27311c48370Slauwal01/* -------------------------------------------------- 2744d8801feSlauwal01 * Errata Workaround for Neoverse N1 Errata #1275112 2754d8801feSlauwal01 * This applies to revision <=r3p0 of Neoverse N1. 2764d8801feSlauwal01 * Inputs: 2774d8801feSlauwal01 * x0: variant[4:7] and revision[0:3] of current cpu. 2784d8801feSlauwal01 * Shall clobber: x0-x17 2794d8801feSlauwal01 * -------------------------------------------------- 2804d8801feSlauwal01 */ 2814d8801feSlauwal01func errata_n1_1275112_wa 2824d8801feSlauwal01 /* Compare x0 against revision r3p0 */ 2834d8801feSlauwal01 mov x17, x30 2844d8801feSlauwal01 bl check_errata_1275112 2854d8801feSlauwal01 cbz x0, 1f 2864d8801feSlauwal01 mrs x1, NEOVERSE_N1_CPUACTLR_EL1 2874d8801feSlauwal01 orr x1, x1, NEOVERSE_N1_CPUACTLR_EL1_BIT_13 2884d8801feSlauwal01 msr NEOVERSE_N1_CPUACTLR_EL1, x1 2894d8801feSlauwal011: 2904d8801feSlauwal01 ret x17 2914d8801feSlauwal01endfunc errata_n1_1275112_wa 2924d8801feSlauwal01 2934d8801feSlauwal01func check_errata_1275112 2944d8801feSlauwal01 /* Applies to <=r3p0 */ 2954d8801feSlauwal01 mov x1, #0x30 2964d8801feSlauwal01 b cpu_rev_var_ls 2974d8801feSlauwal01endfunc check_errata_1275112 2984d8801feSlauwal01 2994d8801feSlauwal01/* -------------------------------------------------- 3005f5d0763SAndre Przywara * Errata Workaround for Neoverse N1 Erratum 1315703. 3015f5d0763SAndre Przywara * This applies to revision <= r3p0 of Neoverse N1. 3025f5d0763SAndre Przywara * Inputs: 3035f5d0763SAndre Przywara * x0: variant[4:7] and revision[0:3] of current cpu. 3045f5d0763SAndre Przywara * Shall clobber: x0-x17 3055f5d0763SAndre Przywara * -------------------------------------------------- 3065f5d0763SAndre Przywara */ 3075f5d0763SAndre Przywarafunc errata_n1_1315703_wa 3085f5d0763SAndre Przywara /* Compare x0 against revision r3p1 */ 3095f5d0763SAndre Przywara mov x17, x30 3105f5d0763SAndre Przywara bl check_errata_1315703 3115f5d0763SAndre Przywara cbz x0, 1f 3125f5d0763SAndre Przywara 3135f5d0763SAndre Przywara mrs x0, NEOVERSE_N1_CPUACTLR2_EL1 3145f5d0763SAndre Przywara orr x0, x0, #NEOVERSE_N1_CPUACTLR2_EL1_BIT_16 3155f5d0763SAndre Przywara msr NEOVERSE_N1_CPUACTLR2_EL1, x0 3165f5d0763SAndre Przywara 3175f5d0763SAndre Przywara1: 3185f5d0763SAndre Przywara ret x17 3195f5d0763SAndre Przywaraendfunc errata_n1_1315703_wa 3205f5d0763SAndre Przywara 3215f5d0763SAndre Przywarafunc check_errata_1315703 3225f5d0763SAndre Przywara /* Applies to everything <= r3p0. */ 3235f5d0763SAndre Przywara mov x1, #0x30 3245f5d0763SAndre Przywara b cpu_rev_var_ls 3255f5d0763SAndre Przywaraendfunc check_errata_1315703 3265f5d0763SAndre Przywara 32780942622Slaurenw-arm/* -------------------------------------------------- 32880942622Slaurenw-arm * Errata Workaround for Neoverse N1 Erratum 1542419. 32980942622Slaurenw-arm * This applies to revisions r3p0 - r4p0 of Neoverse N1 33080942622Slaurenw-arm * Inputs: 33180942622Slaurenw-arm * x0: variant[4:7] and revision[0:3] of current cpu. 33280942622Slaurenw-arm * Shall clobber: x0-x17 33380942622Slaurenw-arm * -------------------------------------------------- 33480942622Slaurenw-arm */ 33580942622Slaurenw-armfunc errata_n1_1542419_wa 33680942622Slaurenw-arm /* Compare x0 against revision r3p0 and r4p0 */ 33780942622Slaurenw-arm mov x17, x30 33880942622Slaurenw-arm bl check_errata_1542419 33980942622Slaurenw-arm cbz x0, 1f 34080942622Slaurenw-arm 34180942622Slaurenw-arm /* Apply instruction patching sequence */ 34280942622Slaurenw-arm ldr x0, =0x0 34380942622Slaurenw-arm msr CPUPSELR_EL3, x0 34480942622Slaurenw-arm ldr x0, =0xEE670D35 34580942622Slaurenw-arm msr CPUPOR_EL3, x0 34680942622Slaurenw-arm ldr x0, =0xFFFF0FFF 34780942622Slaurenw-arm msr CPUPMR_EL3, x0 34880942622Slaurenw-arm ldr x0, =0x08000020007D 34980942622Slaurenw-arm msr CPUPCR_EL3, x0 35080942622Slaurenw-arm isb 35180942622Slaurenw-arm1: 35280942622Slaurenw-arm ret x17 35380942622Slaurenw-armendfunc errata_n1_1542419_wa 35480942622Slaurenw-arm 35580942622Slaurenw-armfunc check_errata_1542419 35680942622Slaurenw-arm /* Applies to everything r3p0 - r4p0. */ 35780942622Slaurenw-arm mov x1, #0x30 35880942622Slaurenw-arm mov x2, #0x40 35980942622Slaurenw-arm b cpu_rev_var_range 36080942622Slaurenw-armendfunc check_errata_1542419 36180942622Slaurenw-arm 36261f0ffc4Sjohpow01 /* -------------------------------------------------- 36361f0ffc4Sjohpow01 * Errata Workaround for Neoverse N1 Errata #1868343. 36461f0ffc4Sjohpow01 * This applies to revision <= r4p0 of Neoverse N1. 36561f0ffc4Sjohpow01 * This workaround is the same as the workaround for 36661f0ffc4Sjohpow01 * errata 1262606 and 1275112 but applies to a wider 36761f0ffc4Sjohpow01 * revision range. 36861f0ffc4Sjohpow01 * Inputs: 36961f0ffc4Sjohpow01 * x0: variant[4:7] and revision[0:3] of current cpu. 37061f0ffc4Sjohpow01 * Shall clobber: x0-x17 37161f0ffc4Sjohpow01 * -------------------------------------------------- 37261f0ffc4Sjohpow01 */ 37361f0ffc4Sjohpow01func errata_n1_1868343_wa 37461f0ffc4Sjohpow01 /* 37561f0ffc4Sjohpow01 * Compare x0 against revision r4p0 37661f0ffc4Sjohpow01 */ 37761f0ffc4Sjohpow01 mov x17, x30 37861f0ffc4Sjohpow01 bl check_errata_1868343 37961f0ffc4Sjohpow01 cbz x0, 1f 38061f0ffc4Sjohpow01 mrs x1, NEOVERSE_N1_CPUACTLR_EL1 38161f0ffc4Sjohpow01 orr x1, x1, NEOVERSE_N1_CPUACTLR_EL1_BIT_13 38261f0ffc4Sjohpow01 msr NEOVERSE_N1_CPUACTLR_EL1, x1 38361f0ffc4Sjohpow01 isb 38461f0ffc4Sjohpow011: 38561f0ffc4Sjohpow01 ret x17 38661f0ffc4Sjohpow01endfunc errata_n1_1868343_wa 38761f0ffc4Sjohpow01 38861f0ffc4Sjohpow01func check_errata_1868343 38961f0ffc4Sjohpow01 /* Applies to everything <= r4p0 */ 39061f0ffc4Sjohpow01 mov x1, #0x40 39161f0ffc4Sjohpow01 b cpu_rev_var_ls 39261f0ffc4Sjohpow01endfunc check_errata_1868343 39361f0ffc4Sjohpow01 394263ee781Sjohpow01 /* -------------------------------------------------- 395263ee781Sjohpow01 * Errata Workaround for Neoverse N1 Errata #1946160. 396263ee781Sjohpow01 * This applies to revisions r3p0, r3p1, r4p0, and 397263ee781Sjohpow01 * r4p1 of Neoverse N1. It also exists in r0p0, r1p0, 398263ee781Sjohpow01 * and r2p0 but there is no fix in these revisions. 399263ee781Sjohpow01 * Inputs: 400263ee781Sjohpow01 * x0: variant[4:7] and revision[0:3] of current cpu. 401263ee781Sjohpow01 * Shall clobber: x0-x17 402263ee781Sjohpow01 * -------------------------------------------------- 403263ee781Sjohpow01 */ 404263ee781Sjohpow01func errata_n1_1946160_wa 405263ee781Sjohpow01 /* 406263ee781Sjohpow01 * Compare x0 against r3p0 - r4p1 407263ee781Sjohpow01 */ 408263ee781Sjohpow01 mov x17, x30 409263ee781Sjohpow01 bl check_errata_1946160 410263ee781Sjohpow01 cbz x0, 1f 411263ee781Sjohpow01 412263ee781Sjohpow01 mov x0, #3 413263ee781Sjohpow01 msr S3_6_C15_C8_0, x0 414263ee781Sjohpow01 ldr x0, =0x10E3900002 415263ee781Sjohpow01 msr S3_6_C15_C8_2, x0 416263ee781Sjohpow01 ldr x0, =0x10FFF00083 417263ee781Sjohpow01 msr S3_6_C15_C8_3, x0 418263ee781Sjohpow01 ldr x0, =0x2001003FF 419263ee781Sjohpow01 msr S3_6_C15_C8_1, x0 420263ee781Sjohpow01 421263ee781Sjohpow01 mov x0, #4 422263ee781Sjohpow01 msr S3_6_C15_C8_0, x0 423263ee781Sjohpow01 ldr x0, =0x10E3800082 424263ee781Sjohpow01 msr S3_6_C15_C8_2, x0 425263ee781Sjohpow01 ldr x0, =0x10FFF00083 426263ee781Sjohpow01 msr S3_6_C15_C8_3, x0 427263ee781Sjohpow01 ldr x0, =0x2001003FF 428263ee781Sjohpow01 msr S3_6_C15_C8_1, x0 429263ee781Sjohpow01 430263ee781Sjohpow01 mov x0, #5 431263ee781Sjohpow01 msr S3_6_C15_C8_0, x0 432263ee781Sjohpow01 ldr x0, =0x10E3800200 433263ee781Sjohpow01 msr S3_6_C15_C8_2, x0 434263ee781Sjohpow01 ldr x0, =0x10FFF003E0 435263ee781Sjohpow01 msr S3_6_C15_C8_3, x0 436263ee781Sjohpow01 ldr x0, =0x2001003FF 437263ee781Sjohpow01 msr S3_6_C15_C8_1, x0 438263ee781Sjohpow01 439263ee781Sjohpow01 isb 440263ee781Sjohpow011: 441263ee781Sjohpow01 ret x17 442263ee781Sjohpow01endfunc errata_n1_1946160_wa 443263ee781Sjohpow01 444263ee781Sjohpow01func check_errata_1946160 445263ee781Sjohpow01 /* Applies to r3p0 - r4p1. */ 446263ee781Sjohpow01 mov x1, #0x30 447263ee781Sjohpow01 mov x2, #0x41 448263ee781Sjohpow01 b cpu_rev_var_range 449263ee781Sjohpow01endfunc check_errata_1946160 450263ee781Sjohpow01 4518ce40503SBipin Ravi /* ---------------------------------------------------- 4528ce40503SBipin Ravi * Errata Workaround for Neoverse N1 Errata #2743102 4538ce40503SBipin Ravi * This applies to revisions <= r4p1 and is still open. 4548ce40503SBipin Ravi * x0: variant[4:7] and revision[0:3] of current cpu. 4558ce40503SBipin Ravi * Shall clobber: x0-x17 4568ce40503SBipin Ravi * ---------------------------------------------------- 4578ce40503SBipin Ravi */ 4588ce40503SBipin Ravifunc errata_n1_2743102_wa 4598ce40503SBipin Ravi mov x17, x30 4608ce40503SBipin Ravi bl check_errata_2743102 4618ce40503SBipin Ravi cbz x0, 1f 4628ce40503SBipin Ravi 4638ce40503SBipin Ravi /* dsb before isb of power down sequence */ 4648ce40503SBipin Ravi dsb sy 4658ce40503SBipin Ravi1: 4668ce40503SBipin Ravi ret x17 4678ce40503SBipin Raviendfunc errata_n1_2743102_wa 4688ce40503SBipin Ravi 4698ce40503SBipin Ravifunc check_errata_2743102 4708ce40503SBipin Ravi /* Applies to all revisions <= r4p1 */ 4718ce40503SBipin Ravi mov x1, #0x41 4728ce40503SBipin Ravi b cpu_rev_var_ls 4738ce40503SBipin Raviendfunc check_errata_2743102 4748ce40503SBipin Ravi 4751fe4a9d1SBipin Ravifunc check_errata_cve_2022_23960 4761fe4a9d1SBipin Ravi#if WORKAROUND_CVE_2022_23960 4771fe4a9d1SBipin Ravi mov x0, #ERRATA_APPLIES 4781fe4a9d1SBipin Ravi#else 4791fe4a9d1SBipin Ravi mov x0, #ERRATA_MISSING 4801fe4a9d1SBipin Ravi#endif 4811fe4a9d1SBipin Ravi ret 4821fe4a9d1SBipin Raviendfunc check_errata_cve_2022_23960 4831fe4a9d1SBipin Ravi 484*1ca5c887Slaurenw-arm/* -------------------------------------------------- 485*1ca5c887Slaurenw-arm * Disable speculative loads if Neoverse N1 supports 486*1ca5c887Slaurenw-arm * SSBS. 487*1ca5c887Slaurenw-arm * 488*1ca5c887Slaurenw-arm * Shall clobber: x0. 489*1ca5c887Slaurenw-arm * -------------------------------------------------- 490*1ca5c887Slaurenw-arm */ 491*1ca5c887Slaurenw-armfunc neoverse_n1_disable_speculative_loads 492*1ca5c887Slaurenw-arm /* Check if the PE implements SSBS */ 493*1ca5c887Slaurenw-arm mrs x0, id_aa64pfr1_el1 494*1ca5c887Slaurenw-arm tst x0, #(ID_AA64PFR1_EL1_SSBS_MASK << ID_AA64PFR1_EL1_SSBS_SHIFT) 495*1ca5c887Slaurenw-arm b.eq 1f 496*1ca5c887Slaurenw-arm 497*1ca5c887Slaurenw-arm /* Disable speculative loads */ 498*1ca5c887Slaurenw-arm msr SSBS, xzr 499*1ca5c887Slaurenw-arm 500*1ca5c887Slaurenw-arm1: 501*1ca5c887Slaurenw-arm ret 502*1ca5c887Slaurenw-armendfunc neoverse_n1_disable_speculative_loads 503*1ca5c887Slaurenw-arm 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 588d23acc9eSAndre Przywara#if ENABLE_FEAT_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 6408ce40503SBipin Ravi#if ERRATA_N1_2743102 6418ce40503SBipin Ravi mov x15, x30 6428ce40503SBipin Ravi bl cpu_get_rev_var 6438ce40503SBipin Ravi bl errata_n1_2743102_wa 6448ce40503SBipin Ravi mov x30, x15 6458ce40503SBipin 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 6788ce40503SBipin 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 /* 71080942622Slaurenw-arm * Issue Error Synchronization Barrier to synchronize SErrors before 71180942622Slaurenw-arm * exiting EL3. We're running with EAs unmasked, so any synchronized 71280942622Slaurenw-arm * errors would be taken immediately; therefore no need to inspect 71380942622Slaurenw-arm * DISR_EL1 register. 71480942622Slaurenw-arm */ 71580942622Slaurenw-arm esb 716f461fe34SAnthony Steinhauser exception_return 71780942622Slaurenw-arm1: 71880942622Slaurenw-arm ret 71980942622Slaurenw-armendfunc neoverse_n1_errata_ic_trap_handler 72080942622Slaurenw-arm 721b04ea14bSJohn Tsichritzis /* --------------------------------------------- 722da6d75a0SJohn Tsichritzis * This function provides neoverse_n1 specific 723b04ea14bSJohn Tsichritzis * register information for crash reporting. 724b04ea14bSJohn Tsichritzis * It needs to return with x6 pointing to 725b04ea14bSJohn Tsichritzis * a list of register names in ascii and 726b04ea14bSJohn Tsichritzis * x8 - x15 having values of registers to be 727b04ea14bSJohn Tsichritzis * reported. 728b04ea14bSJohn Tsichritzis * --------------------------------------------- 729b04ea14bSJohn Tsichritzis */ 730da6d75a0SJohn Tsichritzis.section .rodata.neoverse_n1_regs, "aS" 731da6d75a0SJohn Tsichritzisneoverse_n1_regs: /* The ascii list of register names to be reported */ 732b04ea14bSJohn Tsichritzis .asciz "cpuectlr_el1", "" 733b04ea14bSJohn Tsichritzis 734da6d75a0SJohn Tsichritzisfunc neoverse_n1_cpu_reg_dump 735da6d75a0SJohn Tsichritzis adr x6, neoverse_n1_regs 736da6d75a0SJohn Tsichritzis mrs x8, NEOVERSE_N1_CPUECTLR_EL1 737b04ea14bSJohn Tsichritzis ret 738da6d75a0SJohn Tsichritzisendfunc neoverse_n1_cpu_reg_dump 739b04ea14bSJohn Tsichritzis 74080942622Slaurenw-armdeclare_cpu_ops_eh neoverse_n1, NEOVERSE_N1_MIDR, \ 741da6d75a0SJohn Tsichritzis neoverse_n1_reset_func, \ 74280942622Slaurenw-arm neoverse_n1_errata_ic_trap_handler, \ 743da6d75a0SJohn Tsichritzis neoverse_n1_core_pwr_dwn 744