Jimmy Brisson | 958a0b1 | 2020-09-30 15:28:03 -0500 | [diff] [blame] | 1 | /* |
Sona Mathew | fe405d0 | 2023-01-11 17:04:24 -0600 | [diff] [blame] | 2 | * Copyright (c) 2019-2023, Arm Limited. All rights reserved. |
Jimmy Brisson | 958a0b1 | 2020-09-30 15:28:03 -0500 | [diff] [blame] | 3 | * |
| 4 | * SPDX-License-Identifier: BSD-3-Clause |
| 5 | */ |
| 6 | |
| 7 | #include <arch.h> |
| 8 | #include <asm_macros.S> |
| 9 | #include <common/bl_common.h> |
| 10 | #include <neoverse_v1.h> |
| 11 | #include <cpu_macros.S> |
| 12 | #include <plat_macros.S> |
Bipin Ravi | 8649974 | 2022-01-18 01:59:06 -0600 | [diff] [blame] | 13 | #include "wa_cve_2022_23960_bhb_vector.S" |
Jimmy Brisson | 958a0b1 | 2020-09-30 15:28:03 -0500 | [diff] [blame] | 14 | |
| 15 | /* Hardware handled coherency */ |
| 16 | #if HW_ASSISTED_COHERENCY == 0 |
| 17 | #error "Neoverse V1 must be compiled with HW_ASSISTED_COHERENCY enabled" |
| 18 | #endif |
| 19 | |
| 20 | /* 64-bit only core */ |
| 21 | #if CTX_INCLUDE_AARCH32_REGS == 1 |
| 22 | #error "Neoverse-V1 supports only AArch64. Compile with CTX_INCLUDE_AARCH32_REGS=0" |
| 23 | #endif |
| 24 | |
Bipin Ravi | 8649974 | 2022-01-18 01:59:06 -0600 | [diff] [blame] | 25 | #if WORKAROUND_CVE_2022_23960 |
| 26 | wa_cve_2022_23960_bhb_vector_table NEOVERSE_V1_BHB_LOOP_COUNT, neoverse_v1 |
| 27 | #endif /* WORKAROUND_CVE_2022_23960 */ |
| 28 | |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 29 | workaround_reset_start neoverse_v1, ERRATUM(1618635), ERRATA_V1_1618635 |
Juan Pablo Conde | 31c9337 | 2022-02-28 14:14:44 -0500 | [diff] [blame] | 30 | /* Inserts a DMB SY before and after MRS PAR_EL1 */ |
| 31 | ldr x0, =0x0 |
| 32 | msr NEOVERSE_V1_CPUPSELR_EL3, x0 |
| 33 | ldr x0, = 0xEE070F14 |
| 34 | msr NEOVERSE_V1_CPUPOR_EL3, x0 |
| 35 | ldr x0, = 0xFFFF0FFF |
| 36 | msr NEOVERSE_V1_CPUPMR_EL3, x0 |
| 37 | ldr x0, =0x4005027FF |
| 38 | msr NEOVERSE_V1_CPUPCR_EL3, x0 |
| 39 | |
| 40 | /* Inserts a DMB SY before STREX imm offset */ |
| 41 | ldr x0, =0x1 |
| 42 | msr NEOVERSE_V1_CPUPSELR_EL3, x0 |
| 43 | ldr x0, =0x00e8400000 |
| 44 | msr NEOVERSE_V1_CPUPOR_EL3, x0 |
| 45 | ldr x0, =0x00fff00000 |
| 46 | msr NEOVERSE_V1_CPUPMR_EL3, x0 |
| 47 | ldr x0, = 0x4001027FF |
| 48 | msr NEOVERSE_V1_CPUPCR_EL3, x0 |
| 49 | |
| 50 | /* Inserts a DMB SY before STREX[BHD}/STLEX* */ |
| 51 | ldr x0, =0x2 |
| 52 | msr NEOVERSE_V1_CPUPSELR_EL3, x0 |
| 53 | ldr x0, =0x00e8c00040 |
| 54 | msr NEOVERSE_V1_CPUPOR_EL3, x0 |
| 55 | ldr x0, =0x00fff00040 |
| 56 | msr NEOVERSE_V1_CPUPMR_EL3, x0 |
| 57 | ldr x0, = 0x4001027FF |
| 58 | msr NEOVERSE_V1_CPUPCR_EL3, x0 |
| 59 | |
| 60 | /* Inserts a DMB SY after STREX imm offset */ |
| 61 | ldr x0, =0x3 |
| 62 | msr NEOVERSE_V1_CPUPSELR_EL3, x0 |
| 63 | ldr x0, =0x00e8400000 |
| 64 | msr NEOVERSE_V1_CPUPOR_EL3, x0 |
| 65 | ldr x0, =0x00fff00000 |
| 66 | msr NEOVERSE_V1_CPUPMR_EL3, x0 |
| 67 | ldr x0, = 0x4004027FF |
| 68 | msr NEOVERSE_V1_CPUPCR_EL3, x0 |
| 69 | |
| 70 | /* Inserts a DMB SY after STREX[BHD}/STLEX* */ |
| 71 | ldr x0, =0x4 |
| 72 | msr NEOVERSE_V1_CPUPSELR_EL3, x0 |
| 73 | ldr x0, =0x00e8c00040 |
| 74 | msr NEOVERSE_V1_CPUPOR_EL3, x0 |
| 75 | ldr x0, =0x00fff00040 |
| 76 | msr NEOVERSE_V1_CPUPMR_EL3, x0 |
| 77 | ldr x0, = 0x4004027FF |
| 78 | msr NEOVERSE_V1_CPUPCR_EL3, x0 |
| 79 | |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 80 | workaround_reset_end neoverse_v1, ERRATUM(1618635) |
Juan Pablo Conde | 31c9337 | 2022-02-28 14:14:44 -0500 | [diff] [blame] | 81 | |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 82 | check_erratum_ls neoverse_v1, ERRATUM(1618635), CPU_REV(0, 0) |
laurenw-arm | 3c86d83 | 2021-08-02 13:22:32 -0500 | [diff] [blame] | 83 | |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 84 | workaround_reset_start neoverse_v1, ERRATUM(1774420), ERRATA_V1_1774420 |
laurenw-arm | 3c86d83 | 2021-08-02 13:22:32 -0500 | [diff] [blame] | 85 | /* Set bit 53 in CPUECTLR_EL1 */ |
Arvind Ram Prakash | 29cbe72 | 2023-07-21 16:01:22 -0500 | [diff] [blame] | 86 | sysreg_bit_set NEOVERSE_V1_CPUECTLR_EL1, NEOVERSE_V1_CPUECTLR_EL1_BIT_53 |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 87 | workaround_reset_end neoverse_v1, ERRATUM(1774420) |
laurenw-arm | 3c86d83 | 2021-08-02 13:22:32 -0500 | [diff] [blame] | 88 | |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 89 | check_erratum_ls neoverse_v1, ERRATUM(1774420), CPU_REV(1, 0) |
laurenw-arm | 3c86d83 | 2021-08-02 13:22:32 -0500 | [diff] [blame] | 90 | |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 91 | workaround_reset_start neoverse_v1, ERRATUM(1791573), ERRATA_V1_1791573 |
johpow01 | c73b03c | 2021-05-03 15:33:39 -0500 | [diff] [blame] | 92 | /* Set bit 2 in ACTLR2_EL1 */ |
Arvind Ram Prakash | 29cbe72 | 2023-07-21 16:01:22 -0500 | [diff] [blame] | 93 | sysreg_bit_set NEOVERSE_V1_ACTLR2_EL1, NEOVERSE_V1_ACTLR2_EL1_BIT_2 |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 94 | workaround_reset_end neoverse_v1, ERRATUM(1791573) |
johpow01 | c73b03c | 2021-05-03 15:33:39 -0500 | [diff] [blame] | 95 | |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 96 | check_erratum_ls neoverse_v1, ERRATUM(1791573), CPU_REV(1, 0) |
johpow01 | c73b03c | 2021-05-03 15:33:39 -0500 | [diff] [blame] | 97 | |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 98 | workaround_reset_start neoverse_v1, ERRATUM(1852267), ERRATA_V1_1852267 |
laurenw-arm | b1923e9 | 2021-08-02 14:40:08 -0500 | [diff] [blame] | 99 | /* Set bit 28 in ACTLR2_EL1 */ |
Arvind Ram Prakash | 29cbe72 | 2023-07-21 16:01:22 -0500 | [diff] [blame] | 100 | sysreg_bit_set NEOVERSE_V1_ACTLR2_EL1, NEOVERSE_V1_ACTLR2_EL1_BIT_28 |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 101 | workaround_reset_end neoverse_v1, ERRATUM(1852267) |
laurenw-arm | b1923e9 | 2021-08-02 14:40:08 -0500 | [diff] [blame] | 102 | |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 103 | check_erratum_ls neoverse_v1, ERRATUM(1852267), CPU_REV(1, 0) |
laurenw-arm | b1923e9 | 2021-08-02 14:40:08 -0500 | [diff] [blame] | 104 | |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 105 | workaround_reset_start neoverse_v1, ERRATUM(1925756), ERRATA_V1_1925756 |
laurenw-arm | 6b56f96 | 2021-08-02 15:00:15 -0500 | [diff] [blame] | 106 | /* Set bit 8 in CPUECTLR_EL1 */ |
Arvind Ram Prakash | 29cbe72 | 2023-07-21 16:01:22 -0500 | [diff] [blame] | 107 | sysreg_bit_set NEOVERSE_V1_CPUECTLR_EL1, NEOVERSE_V1_CPUECTLR_EL1_BIT_8 |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 108 | workaround_reset_end neoverse_v1, ERRATUM(1925756) |
laurenw-arm | 6b56f96 | 2021-08-02 15:00:15 -0500 | [diff] [blame] | 109 | |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 110 | check_erratum_ls neoverse_v1, ERRATUM(1925756), CPU_REV(1, 1) |
laurenw-arm | 6b56f96 | 2021-08-02 15:00:15 -0500 | [diff] [blame] | 111 | |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 112 | workaround_reset_start neoverse_v1, ERRATUM(1940577), ERRATA_V1_1940577 |
johpow01 | 07acb4f | 2020-10-07 16:38:37 -0500 | [diff] [blame] | 113 | mov x0, #0 |
| 114 | msr S3_6_C15_C8_0, x0 |
| 115 | ldr x0, =0x10E3900002 |
| 116 | msr S3_6_C15_C8_2, x0 |
| 117 | ldr x0, =0x10FFF00083 |
| 118 | msr S3_6_C15_C8_3, x0 |
| 119 | ldr x0, =0x2001003FF |
| 120 | msr S3_6_C15_C8_1, x0 |
| 121 | |
| 122 | mov x0, #1 |
| 123 | msr S3_6_C15_C8_0, x0 |
| 124 | ldr x0, =0x10E3800082 |
| 125 | msr S3_6_C15_C8_2, x0 |
| 126 | ldr x0, =0x10FFF00083 |
| 127 | msr S3_6_C15_C8_3, x0 |
| 128 | ldr x0, =0x2001003FF |
| 129 | msr S3_6_C15_C8_1, x0 |
| 130 | |
| 131 | mov x0, #2 |
| 132 | msr S3_6_C15_C8_0, x0 |
| 133 | ldr x0, =0x10E3800200 |
| 134 | msr S3_6_C15_C8_2, x0 |
| 135 | ldr x0, =0x10FFF003E0 |
| 136 | msr S3_6_C15_C8_3, x0 |
| 137 | ldr x0, =0x2001003FF |
| 138 | msr S3_6_C15_C8_1, x0 |
| 139 | |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 140 | workaround_reset_end neoverse_v1, ERRATUM(1940577) |
johpow01 | 07acb4f | 2020-10-07 16:38:37 -0500 | [diff] [blame] | 141 | |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 142 | check_erratum_range neoverse_v1, ERRATUM(1940577), CPU_REV(1, 0), CPU_REV(1, 1) |
johpow01 | 07acb4f | 2020-10-07 16:38:37 -0500 | [diff] [blame] | 143 | |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 144 | workaround_reset_start neoverse_v1, ERRATUM(1966096), ERRATA_V1_1966096 |
johpow01 | 97db675 | 2021-08-02 18:59:08 -0500 | [diff] [blame] | 145 | mov x0, #0x3 |
| 146 | msr S3_6_C15_C8_0, x0 |
| 147 | ldr x0, =0xEE010F12 |
| 148 | msr S3_6_C15_C8_2, x0 |
| 149 | ldr x0, =0xFFFF0FFF |
| 150 | msr S3_6_C15_C8_3, x0 |
| 151 | ldr x0, =0x80000000003FF |
| 152 | msr S3_6_C15_C8_1, x0 |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 153 | workaround_reset_end neoverse_v1, ERRATUM(1966096) |
johpow01 | 97db675 | 2021-08-02 18:59:08 -0500 | [diff] [blame] | 154 | |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 155 | check_erratum_range neoverse_v1, ERRATUM(1966096), CPU_REV(1, 0), CPU_REV(1, 1) |
johpow01 | 97db675 | 2021-08-02 18:59:08 -0500 | [diff] [blame] | 156 | |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 157 | workaround_reset_start neoverse_v1, ERRATUM(2108267), ERRATA_V1_2108267 |
Arvind Ram Prakash | 9fc6f83 | 2023-07-18 17:17:44 -0500 | [diff] [blame] | 158 | mrs x1, NEOVERSE_V1_CPUECTLR_EL1 |
| 159 | mov x0, #NEOVERSE_V1_CPUECTLR_EL1_PF_MODE_CNSRV |
| 160 | bfi x1, x0, #CPUECTLR_EL1_PF_MODE_LSB, #CPUECTLR_EL1_PF_MODE_WIDTH |
| 161 | msr NEOVERSE_V1_CPUECTLR_EL1, x1 |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 162 | workaround_reset_end neoverse_v1, ERRATUM(2108267) |
johpow01 | ad1ca34 | 2021-08-03 14:35:20 -0500 | [diff] [blame] | 163 | |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 164 | check_erratum_ls neoverse_v1, ERRATUM(2108267), CPU_REV(1, 1) |
nayanpatel-arm | fc26ffe | 2021-09-28 13:41:03 -0700 | [diff] [blame] | 165 | |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 166 | workaround_reset_start neoverse_v1, ERRATUM(2139242), ERRATA_V1_2139242 |
Arvind Ram Prakash | 9fc6f83 | 2023-07-18 17:17:44 -0500 | [diff] [blame] | 167 | mov x0, #0x3 |
| 168 | msr S3_6_C15_C8_0, x0 |
| 169 | ldr x0, =0xEE720F14 |
| 170 | msr S3_6_C15_C8_2, x0 |
| 171 | ldr x0, =0xFFFF0FDF |
| 172 | msr S3_6_C15_C8_3, x0 |
| 173 | ldr x0, =0x40000005003FF |
| 174 | msr S3_6_C15_C8_1, x0 |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 175 | workaround_reset_end neoverse_v1, ERRATUM(2139242) |
nayanpatel-arm | fc26ffe | 2021-09-28 13:41:03 -0700 | [diff] [blame] | 176 | |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 177 | check_erratum_ls neoverse_v1, ERRATUM(2139242), CPU_REV(1, 1) |
nayanpatel-arm | fc26ffe | 2021-09-28 13:41:03 -0700 | [diff] [blame] | 178 | |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 179 | workaround_reset_start neoverse_v1, ERRATUM(2216392), ERRATA_V1_2216392 |
johpow01 | 4de29cb | 2021-09-02 18:29:17 -0500 | [diff] [blame] | 180 | ldr x0, =0x5 |
| 181 | msr S3_6_c15_c8_0, x0 /* CPUPSELR_EL3 */ |
| 182 | ldr x0, =0x10F600E000 |
| 183 | msr S3_6_c15_c8_2, x0 /* CPUPOR_EL3 */ |
| 184 | ldr x0, =0x10FF80E000 |
| 185 | msr S3_6_c15_c8_3, x0 /* CPUPMR_EL3 */ |
| 186 | ldr x0, =0x80000000003FF |
| 187 | msr S3_6_c15_c8_1, x0 /* CPUPCR_EL3 */ |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 188 | workaround_reset_end neoverse_v1, ERRATUM(2216392) |
johpow01 | 4de29cb | 2021-09-02 18:29:17 -0500 | [diff] [blame] | 189 | |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 190 | check_erratum_range neoverse_v1, ERRATUM(2216392), CPU_REV(1, 0), CPU_REV(1, 1) |
Bipin Ravi | 971938f | 2022-06-08 16:28:46 -0500 | [diff] [blame] | 191 | |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 192 | workaround_reset_start neoverse_v1, ERRATUM(2294912), ERRATA_V1_2294912 |
Bipin Ravi | 971938f | 2022-06-08 16:28:46 -0500 | [diff] [blame] | 193 | /* Set bit 0 in ACTLR2_EL1 */ |
Arvind Ram Prakash | 29cbe72 | 2023-07-21 16:01:22 -0500 | [diff] [blame] | 194 | sysreg_bit_set NEOVERSE_V1_ACTLR2_EL1, NEOVERSE_V1_ACTLR2_EL1_BIT_0 |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 195 | workaround_reset_end neoverse_v1, ERRATUM(2294912) |
Bipin Ravi | 971938f | 2022-06-08 16:28:46 -0500 | [diff] [blame] | 196 | |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 197 | check_erratum_ls neoverse_v1, ERRATUM(2294912), CPU_REV(1, 1) |
Bipin Ravi | b4cb31f | 2022-06-14 17:09:23 -0500 | [diff] [blame] | 198 | |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 199 | workaround_reset_start neoverse_v1, ERRATUM(2372203), ERRATA_V1_2372203 |
Bipin Ravi | b4cb31f | 2022-06-14 17:09:23 -0500 | [diff] [blame] | 200 | /* Set bit 40 in ACTLR2_EL1 */ |
Arvind Ram Prakash | 29cbe72 | 2023-07-21 16:01:22 -0500 | [diff] [blame] | 201 | sysreg_bit_set NEOVERSE_V1_ACTLR2_EL1, NEOVERSE_V1_ACTLR2_EL1_BIT_40 |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 202 | workaround_reset_end neoverse_v1, ERRATUM(2372203) |
Bipin Ravi | b4cb31f | 2022-06-14 17:09:23 -0500 | [diff] [blame] | 203 | |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 204 | check_erratum_ls neoverse_v1, ERRATUM(2372203), CPU_REV(1, 1) |
Bipin Ravi | fe4b0c4 | 2022-12-15 11:57:53 -0600 | [diff] [blame] | 205 | |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 206 | workaround_runtime_start neoverse_v1, ERRATUM(2743093), ERRATA_V1_2743093 |
Bipin Ravi | fe4b0c4 | 2022-12-15 11:57:53 -0600 | [diff] [blame] | 207 | /* dsb before isb of power down sequence */ |
| 208 | dsb sy |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 209 | workaround_runtime_end neoverse_v1, ERRATUM(2743093) |
Bipin Ravi | fe4b0c4 | 2022-12-15 11:57:53 -0600 | [diff] [blame] | 210 | |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 211 | check_erratum_ls neoverse_v1, ERRATUM(2743093), CPU_REV(1, 2) |
Bipin Ravi | fe4b0c4 | 2022-12-15 11:57:53 -0600 | [diff] [blame] | 212 | |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 213 | workaround_reset_start neoverse_v1, ERRATUM(2743233), ERRATA_V1_2743233 |
Arvind Ram Prakash | 29cbe72 | 2023-07-21 16:01:22 -0500 | [diff] [blame] | 214 | sysreg_bit_clear NEOVERSE_V1_ACTLR5_EL1, NEOVERSE_V1_ACTLR5_EL1_BIT_56 |
| 215 | sysreg_bit_set NEOVERSE_V1_ACTLR5_EL1, NEOVERSE_V1_ACTLR5_EL1_BIT_55 |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 216 | workaround_reset_end neoverse_v1, ERRATUM(2743233) |
Sona Mathew | 2ef5db7 | 2023-03-02 15:07:55 -0600 | [diff] [blame] | 217 | |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 218 | check_erratum_ls neoverse_v1, ERRATUM(2743233), CPU_REV(1, 2) |
Sona Mathew | fe405d0 | 2023-01-11 17:04:24 -0600 | [diff] [blame] | 219 | |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 220 | workaround_reset_start neoverse_v1, ERRATUM(2779461), ERRATA_V1_2779461 |
Arvind Ram Prakash | 29cbe72 | 2023-07-21 16:01:22 -0500 | [diff] [blame] | 221 | sysreg_bit_set NEOVERSE_V1_ACTLR3_EL1, NEOVERSE_V1_ACTLR3_EL1_BIT_47 |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 222 | workaround_reset_end neoverse_v1, ERRATUM(2779461) |
Sona Mathew | fe405d0 | 2023-01-11 17:04:24 -0600 | [diff] [blame] | 223 | |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 224 | check_erratum_ls neoverse_v1, ERRATUM(2779461), CPU_REV(1, 2) |
Sona Mathew | fe405d0 | 2023-01-11 17:04:24 -0600 | [diff] [blame] | 225 | |
Sona Mathew | fe405d0 | 2023-01-11 17:04:24 -0600 | [diff] [blame] | 226 | |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 227 | workaround_reset_start neoverse_v1, CVE(2022,23960), WORKAROUND_CVE_2022_23960 |
| 228 | #if IMAGE_BL31 |
| 229 | /* |
| 230 | * The Neoverse-V1 generic vectors are overridden to apply errata |
| 231 | * mitigation on exception entry from lower ELs. |
| 232 | */ |
Arvind Ram Prakash | 29cbe72 | 2023-07-21 16:01:22 -0500 | [diff] [blame] | 233 | override_vector_table wa_cve_vbar_neoverse_v1 |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 234 | #endif /* IMAGE_BL31 */ |
| 235 | workaround_reset_end neoverse_v1, CVE(2022,23960) |
| 236 | |
| 237 | check_erratum_chosen neoverse_v1, CVE(2022, 23960), WORKAROUND_CVE_2022_23960 |
Bipin Ravi | 8649974 | 2022-01-18 01:59:06 -0600 | [diff] [blame] | 238 | |
Jimmy Brisson | 958a0b1 | 2020-09-30 15:28:03 -0500 | [diff] [blame] | 239 | /* --------------------------------------------- |
| 240 | * HW will do the cache maintenance while powering down |
| 241 | * --------------------------------------------- |
| 242 | */ |
| 243 | func neoverse_v1_core_pwr_dwn |
| 244 | /* --------------------------------------------- |
| 245 | * Enable CPU power down bit in power control register |
| 246 | * --------------------------------------------- |
| 247 | */ |
Arvind Ram Prakash | 29cbe72 | 2023-07-21 16:01:22 -0500 | [diff] [blame] | 248 | sysreg_bit_set NEOVERSE_V1_CPUPWRCTLR_EL1, NEOVERSE_V1_CPUPWRCTLR_EL1_CORE_PWRDN_BIT |
| 249 | apply_erratum neoverse_v1, ERRATUM(2743093), ERRATA_V1_2743093 |
| 250 | |
Jimmy Brisson | 958a0b1 | 2020-09-30 15:28:03 -0500 | [diff] [blame] | 251 | isb |
| 252 | ret |
| 253 | endfunc neoverse_v1_core_pwr_dwn |
| 254 | |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 255 | errata_report_shim neoverse_v1 |
johpow01 | c73b03c | 2021-05-03 15:33:39 -0500 | [diff] [blame] | 256 | |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 257 | cpu_reset_func_start neoverse_v1 |
Jimmy Brisson | 958a0b1 | 2020-09-30 15:28:03 -0500 | [diff] [blame] | 258 | /* Disable speculative loads */ |
| 259 | msr SSBS, xzr |
Arvind Ram Prakash | 48bda11 | 2023-07-20 17:11:11 -0500 | [diff] [blame] | 260 | cpu_reset_func_end neoverse_v1 |
Jimmy Brisson | 958a0b1 | 2020-09-30 15:28:03 -0500 | [diff] [blame] | 261 | |
| 262 | /* --------------------------------------------- |
| 263 | * This function provides Neoverse-V1 specific |
| 264 | * register information for crash reporting. |
| 265 | * It needs to return with x6 pointing to |
| 266 | * a list of register names in ascii and |
| 267 | * x8 - x15 having values of registers to be |
| 268 | * reported. |
| 269 | * --------------------------------------------- |
| 270 | */ |
| 271 | .section .rodata.neoverse_v1_regs, "aS" |
| 272 | neoverse_v1_regs: /* The ascii list of register names to be reported */ |
| 273 | .asciz "cpuectlr_el1", "" |
| 274 | |
| 275 | func neoverse_v1_cpu_reg_dump |
| 276 | adr x6, neoverse_v1_regs |
| 277 | mrs x8, NEOVERSE_V1_CPUECTLR_EL1 |
| 278 | ret |
| 279 | endfunc neoverse_v1_cpu_reg_dump |
| 280 | |
| 281 | declare_cpu_ops neoverse_v1, NEOVERSE_V1_MIDR, \ |
| 282 | neoverse_v1_reset_func, \ |
| 283 | neoverse_v1_core_pwr_dwn |