blob: fbf78ab98153b3f8d20b2e67b99902eb2141fbce [file] [log] [blame]
Louis Mayencourtf57f1082019-05-14 11:00:45 +01001/*
Govindraj Raja805dc802023-06-15 12:39:48 -05002 * Copyright (c) 2019-2023, Arm Limited. All rights reserved.
Louis Mayencourtf57f1082019-05-14 11:00:45 +01003 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#include <arch.h>
8#include <asm_macros.S>
9#include <common/bl_common.h>
Jimmy Brisson7ec175e2020-06-01 16:49:34 -050010#include <cortex_a78.h>
Louis Mayencourtf57f1082019-05-14 11:00:45 +010011#include <cpu_macros.S>
12#include <plat_macros.S>
Bipin Ravi86499742022-01-18 01:59:06 -060013#include "wa_cve_2022_23960_bhb_vector.S"
Louis Mayencourtf57f1082019-05-14 11:00:45 +010014
15/* Hardware handled coherency */
16#if HW_ASSISTED_COHERENCY == 0
Jimmy Brisson3571fb92020-06-01 10:18:22 -050017#error "cortex_a78 must be compiled with HW_ASSISTED_COHERENCY enabled"
Louis Mayencourtf57f1082019-05-14 11:00:45 +010018#endif
19
Saurabh Gorechab8493012022-04-05 00:11:52 +053020.globl cortex_a78_reset_func
21.globl cortex_a78_core_pwr_dwn
22
Bipin Ravi86499742022-01-18 01:59:06 -060023#if WORKAROUND_CVE_2022_23960
24 wa_cve_2022_23960_bhb_vector_table CORTEX_A78_BHB_LOOP_COUNT, cortex_a78
25#endif /* WORKAROUND_CVE_2022_23960 */
Madhukar Pappireddy4efede72019-12-18 15:56:27 -060026
27/* --------------------------------------------------
Jimmy Brisson3571fb92020-06-01 10:18:22 -050028 * Errata Workaround for A78 Erratum 1688305.
29 * This applies to revision r0p0 and r1p0 of A78.
Madhukar Pappireddy4efede72019-12-18 15:56:27 -060030 * Inputs:
31 * x0: variant[4:7] and revision[0:3] of current cpu.
32 * Shall clobber: x0-x17
33 * --------------------------------------------------
34 */
Jimmy Brisson3571fb92020-06-01 10:18:22 -050035func errata_a78_1688305_wa
Madhukar Pappireddy4efede72019-12-18 15:56:27 -060036 /* Compare x0 against revision r1p0 */
37 mov x17, x30
38 bl check_errata_1688305
39 cbz x0, 1f
Jimmy Brisson3571fb92020-06-01 10:18:22 -050040 mrs x1, CORTEX_A78_ACTLR2_EL1
johpow019131eb82020-10-06 17:55:25 -050041 orr x1, x1, #CORTEX_A78_ACTLR2_EL1_BIT_1
Jimmy Brisson3571fb92020-06-01 10:18:22 -050042 msr CORTEX_A78_ACTLR2_EL1, x1
Madhukar Pappireddy4efede72019-12-18 15:56:27 -060043 isb
441:
45 ret x17
Jimmy Brisson3571fb92020-06-01 10:18:22 -050046endfunc errata_a78_1688305_wa
Madhukar Pappireddy4efede72019-12-18 15:56:27 -060047
48func check_errata_1688305
49 /* Applies to r0p0 and r1p0 */
50 mov x1, #0x10
51 b cpu_rev_var_ls
52endfunc check_errata_1688305
53
johpow01b3e82942021-04-30 18:08:52 -050054/* --------------------------------------------------
Govindraj Raja805dc802023-06-15 12:39:48 -050055 * Errata Workaround for Cortex A78 Errata #1821534.
56 * This applies to revisions r0p0 and r1p0.
57 * x0: variant[4:7] and revision[0:3] of current cpu.
58 * Shall clobber: x0-x17
59 * --------------------------------------------------
60 */
61func errata_a78_1821534_wa
62 /* Check revision. */
63 mov x17, x30
64 bl check_errata_1821534
65 cbz x0, 1f
66
67 /* Set bit 2 in ACTLR2_EL1 */
68 mrs x1, CORTEX_A78_ACTLR2_EL1
69 orr x1, x1, #CORTEX_A78_ACTLR2_EL1_BIT_2
70 msr CORTEX_A78_ACTLR2_EL1, x1
71 isb
721:
73 ret x17
74endfunc errata_a78_1821534_wa
75
76func check_errata_1821534
77 /* Applies to r0p0 and r1p0 */
78 mov x1, #0x10
79 b cpu_rev_var_ls
80endfunc check_errata_1821534
81
82/* --------------------------------------------------
johpow01b3e82942021-04-30 18:08:52 -050083 * Errata Workaround for Cortex A78 Errata #1941498.
84 * This applies to revisions r0p0, r1p0, and r1p1.
85 * x0: variant[4:7] and revision[0:3] of current cpu.
86 * Shall clobber: x0-x17
87 * --------------------------------------------------
88 */
johpow019131eb82020-10-06 17:55:25 -050089func errata_a78_1941498_wa
90 /* Compare x0 against revision <= r1p1 */
91 mov x17, x30
92 bl check_errata_1941498
93 cbz x0, 1f
94
95 /* Set bit 8 in ECTLR_EL1 */
96 mrs x1, CORTEX_A78_CPUECTLR_EL1
97 orr x1, x1, #CORTEX_A78_CPUECTLR_EL1_BIT_8
98 msr CORTEX_A78_CPUECTLR_EL1, x1
99 isb
1001:
101 ret x17
102endfunc errata_a78_1941498_wa
103
104func check_errata_1941498
105 /* Check for revision <= r1p1, might need to be updated later. */
106 mov x1, #0x11
107 b cpu_rev_var_ls
108endfunc check_errata_1941498
109
johpow01b3e82942021-04-30 18:08:52 -0500110/* --------------------------------------------------
111 * Errata Workaround for A78 Erratum 1951500.
112 * This applies to revisions r1p0 and r1p1 of A78.
113 * The issue also exists in r0p0 but there is no fix
114 * in that revision.
115 * Inputs:
116 * x0: variant[4:7] and revision[0:3] of current cpu.
117 * Shall clobber: x0-x17
118 * --------------------------------------------------
119 */
johpow0185ea43d2020-10-07 15:08:01 -0500120func errata_a78_1951500_wa
121 /* Compare x0 against revisions r1p0 - r1p1 */
122 mov x17, x30
123 bl check_errata_1951500
124 cbz x0, 1f
125
126 msr S3_6_c15_c8_0, xzr
127 ldr x0, =0x10E3900002
128 msr S3_6_c15_c8_2, x0
129 ldr x0, =0x10FFF00083
130 msr S3_6_c15_c8_3, x0
131 ldr x0, =0x2001003FF
132 msr S3_6_c15_c8_1, x0
133
134 mov x0, #1
135 msr S3_6_c15_c8_0, x0
136 ldr x0, =0x10E3800082
137 msr S3_6_c15_c8_2, x0
138 ldr x0, =0x10FFF00083
139 msr S3_6_c15_c8_3, x0
140 ldr x0, =0x2001003FF
141 msr S3_6_c15_c8_1, x0
142
143 mov x0, #2
144 msr S3_6_c15_c8_0, x0
145 ldr x0, =0x10E3800200
146 msr S3_6_c15_c8_2, x0
147 ldr x0, =0x10FFF003E0
148 msr S3_6_c15_c8_3, x0
149 ldr x0, =0x2001003FF
150 msr S3_6_c15_c8_1, x0
151
152 isb
1531:
154 ret x17
155endfunc errata_a78_1951500_wa
156
157func check_errata_1951500
158 /* Applies to revisions r1p0 and r1p1. */
159 mov x1, #CPU_REV(1, 0)
160 mov x2, #CPU_REV(1, 1)
161 b cpu_rev_var_range
162endfunc check_errata_1951500
163
johpow01b3e82942021-04-30 18:08:52 -0500164/* --------------------------------------------------
nayanpatel-arm80bf7a52021-08-11 13:33:00 -0700165 * Errata Workaround for Cortex A78 Errata 1952683.
166 * This applies to revision r0p0.
167 * x0: variant[4:7] and revision[0:3] of current cpu.
168 * Shall clobber: x0-x17
169 * --------------------------------------------------
170 */
171func errata_a78_1952683_wa
172 /* Check revision. */
173 mov x17, x30
174 bl check_errata_1952683
175 cbz x0, 1f
176
177 ldr x0,=0x5
178 msr S3_6_c15_c8_0,x0
179 ldr x0,=0xEEE10A10
180 msr S3_6_c15_c8_2,x0
181 ldr x0,=0xFFEF0FFF
182 msr S3_6_c15_c8_3,x0
183 ldr x0,=0x0010F000
184 msr S3_6_c15_c8_4,x0
185 ldr x0,=0x0010F000
186 msr S3_6_c15_c8_5,x0
187 ldr x0,=0x40000080023ff
188 msr S3_6_c15_c8_1,x0
189 ldr x0,=0x6
190 msr S3_6_c15_c8_0,x0
191 ldr x0,=0xEE640F34
192 msr S3_6_c15_c8_2,x0
193 ldr x0,=0xFFEF0FFF
194 msr S3_6_c15_c8_3,x0
195 ldr x0,=0x40000080023ff
196 msr S3_6_c15_c8_1,x0
197 isb
1981:
199 ret x17
200endfunc errata_a78_1952683_wa
201
202func check_errata_1952683
203 /* Applies to r0p0 only */
204 mov x1, #0x00
205 b cpu_rev_var_ls
206endfunc check_errata_1952683
207
nayanpatel-arm39e08652021-09-28 17:31:50 -0700208/* --------------------------------------------------
209 * Errata Workaround for Cortex A78 Errata 2132060.
210 * This applies to revisions r0p0, r1p0, r1p1, and r1p2.
211 * It is still open.
212 * x0: variant[4:7] and revision[0:3] of current cpu.
213 * Shall clobber: x0-x1, x17
214 * --------------------------------------------------
215 */
216func errata_a78_2132060_wa
217 /* Check revision. */
218 mov x17, x30
219 bl check_errata_2132060
220 cbz x0, 1f
221
222 /* Apply the workaround. */
223 mrs x1, CORTEX_A78_CPUECTLR_EL1
224 mov x0, #CORTEX_A78_CPUECTLR_EL1_PF_MODE_CNSRV
225 bfi x1, x0, #CPUECTLR_EL1_PF_MODE_LSB, #CPUECTLR_EL1_PF_MODE_WIDTH
226 msr CORTEX_A78_CPUECTLR_EL1, x1
2271:
228 ret x17
229endfunc errata_a78_2132060_wa
230
231func check_errata_2132060
232 /* Applies to r0p0, r0p1, r1p1, and r1p2 */
233 mov x1, #0x12
234 b cpu_rev_var_ls
235endfunc check_errata_2132060
236
johpow0145c17242021-09-02 17:53:30 -0500237/* --------------------------------------------------------------------
238 * Errata Workaround for A78 Erratum 2242635.
239 * This applies to revisions r1p0, r1p1, and r1p2 of the Cortex A78
240 * processor and is still open.
241 * The issue also exists in r0p0 but there is no fix in that revision.
242 * x0: variant[4:7] and revision[0:3] of current cpu.
243 * Shall clobber: x0-x17
244 * --------------------------------------------------------------------
245 */
246func errata_a78_2242635_wa
247 /* Compare x0 against revisions r1p0 - r1p2 */
248 mov x17, x30
249 bl check_errata_2242635
250 cbz x0, 1f
251
252 ldr x0, =0x5
253 msr S3_6_c15_c8_0, x0 /* CPUPSELR_EL3 */
254 ldr x0, =0x10F600E000
255 msr S3_6_c15_c8_2, x0 /* CPUPOR_EL3 */
256 ldr x0, =0x10FF80E000
257 msr S3_6_c15_c8_3, x0 /* CPUPMR_EL3 */
258 ldr x0, =0x80000000003FF
259 msr S3_6_c15_c8_1, x0 /* CPUPCR_EL3 */
260
261 isb
2621:
263 ret x17
264endfunc errata_a78_2242635_wa
265
266func check_errata_2242635
267 /* Applies to revisions r1p0 through r1p2. */
268 mov x1, #CPU_REV(1, 0)
269 mov x2, #CPU_REV(1, 2)
270 b cpu_rev_var_range
271endfunc check_errata_2242635
272
John Powell12bc0de2022-05-03 15:22:57 -0500273/* --------------------------------------------------
274 * Errata Workaround for Cortex A78 Errata 2376745.
275 * This applies to revisions r0p0, r1p0, r1p1, and r1p2.
276 * It is still open.
277 * x0: variant[4:7] and revision[0:3] of current cpu.
278 * Shall clobber: x0-x1, x17
279 * --------------------------------------------------
280 */
281func errata_a78_2376745_wa
282 /* Check revision. */
283 mov x17, x30
284 bl check_errata_2376745
285 cbz x0, 1f
286
287 /* Apply the workaround. */
288 mrs x1, CORTEX_A78_ACTLR2_EL1
289 orr x1, x1, #BIT(0)
290 msr CORTEX_A78_ACTLR2_EL1, x1
2911:
292 ret x17
293endfunc errata_a78_2376745_wa
294
295func check_errata_2376745
296 /* Applies to r0p0, r0p1, r1p1, and r1p2 */
297 mov x1, #CPU_REV(1, 2)
298 b cpu_rev_var_ls
299endfunc check_errata_2376745
300
John Powella93b7e52022-05-03 15:52:11 -0500301/* --------------------------------------------------
302 * Errata Workaround for Cortex A78 Errata 2395406.
303 * This applies to revisions r0p0, r1p0, r1p1, and r1p2.
304 * It is still open.
305 * x0: variant[4:7] and revision[0:3] of current cpu.
306 * Shall clobber: x0-x1, x17
307 * --------------------------------------------------
308 */
309func errata_a78_2395406_wa
310 /* Check revision. */
311 mov x17, x30
312 bl check_errata_2395406
313 cbz x0, 1f
314
315 /* Apply the workaround. */
316 mrs x1, CORTEX_A78_ACTLR2_EL1
317 orr x1, x1, #BIT(40)
318 msr CORTEX_A78_ACTLR2_EL1, x1
3191:
320 ret x17
321endfunc errata_a78_2395406_wa
322
323func check_errata_2395406
324 /* Applies to r0p0, r0p1, r1p1, and r1p2 */
325 mov x1, #CPU_REV(1, 2)
326 b cpu_rev_var_ls
327endfunc check_errata_2395406
328
Bipin Ravi8f78e0d2022-12-15 14:48:21 -0600329/* ----------------------------------------------------
Bipin Ravi33100ef2023-02-28 14:51:28 -0600330 * Errata Workaround for Cortex A78 Errata 2742426.
331 * This applies to revisions r0p0, r1p0, r1p1 and r1p2.
332 * It is still open.
333 * x0: variant[4:7] and revision[0:3] of current cpu.
334 * Shall clobber: x0-x1, x17
335 * ----------------------------------------------------
336 */
337func errata_a78_2742426_wa
338 /* Check revision. */
339 mov x17, x30
340 bl check_errata_2742426
341 cbz x0, 1f
342
343 /* Apply the workaround */
344 mrs x1, CORTEX_A78_ACTLR5_EL1
345 bic x1, x1, #BIT(56)
346 orr x1, x1, #BIT(55)
347 msr CORTEX_A78_ACTLR5_EL1, x1
348
3491:
350 ret x17
351endfunc errata_a78_2742426_wa
352
353func check_errata_2742426
354 /* Applies to r0p0, r1p0, r1p1, r1p2 */
355 mov x1, #CPU_REV(1, 2)
356 b cpu_rev_var_ls
357endfunc check_errata_2742426
358
359/* ----------------------------------------------------
Bipin Ravi8f78e0d2022-12-15 14:48:21 -0600360 * Errata Workaround for Cortex-A78 Errata 2772019
361 * This applies to revisions <= r1p2 and is still open.
362 * x0: variant[4:7] and revision[0:3] of current cpu.
363 * Shall clobber: x0-x17
364 * ----------------------------------------------------
365 */
366func errata_a78_2772019_wa
367 mov x17, x30
368 bl check_errata_2772019
369 cbz x0, 1f
370
371
372 /* dsb before isb of power down sequence */
373 dsb sy
3741:
375 ret x17
376endfunc errata_a78_2772019_wa
377
378func check_errata_2772019
379 /* Applies to all revisions <= r1p2 */
380 mov x1, #0x12
381 b cpu_rev_var_ls
382endfunc check_errata_2772019
383
Sona Mathewf13c1a92023-01-11 12:55:30 -0600384/* ----------------------------------------------------
385 * Errata Workaround for Cortex A78 Errata 2779479.
386 * This applies to revisions r0p0, r1p0, r1p1, and r1p2.
387 * It is still open.
388 * x0: variant[4:7] and revision[0:3] of current cpu.
389 * Shall clobber: x0-x1, x17
390 * ----------------------------------------------------
391 */
392func errata_a78_2779479_wa
393 /* Check revision. */
394 mov x17, x30
395 bl check_errata_2779479
396 cbz x0, 1f
397
398 /* Apply the workaround */
399 mrs x1, CORTEX_A78_ACTLR3_EL1
400 orr x1, x1, #BIT(47)
401 msr CORTEX_A78_ACTLR3_EL1, x1
402
4031:
404 ret x17
405endfunc errata_a78_2779479_wa
406
407func check_errata_2779479
408 /* Applies to r0p0, r1p0, r1p1, r1p2 */
409 mov x1, #CPU_REV(1, 2)
410 b cpu_rev_var_ls
411endfunc check_errata_2779479
412
Bipin Ravi86499742022-01-18 01:59:06 -0600413func check_errata_cve_2022_23960
414#if WORKAROUND_CVE_2022_23960
415 mov x0, #ERRATA_APPLIES
416#else
417 mov x0, #ERRATA_MISSING
418#endif
419 ret
420endfunc check_errata_cve_2022_23960
421
Balint Dobszaydb2ec852019-07-15 11:46:20 +0200422 /* -------------------------------------------------
Jimmy Brisson3571fb92020-06-01 10:18:22 -0500423 * The CPU Ops reset function for Cortex-A78
Balint Dobszaydb2ec852019-07-15 11:46:20 +0200424 * -------------------------------------------------
425 */
Jimmy Brisson3571fb92020-06-01 10:18:22 -0500426func cortex_a78_reset_func
Madhukar Pappireddy4efede72019-12-18 15:56:27 -0600427 mov x19, x30
428 bl cpu_get_rev_var
429 mov x18, x0
430
Jimmy Brisson3571fb92020-06-01 10:18:22 -0500431#if ERRATA_A78_1688305
Madhukar Pappireddy4efede72019-12-18 15:56:27 -0600432 mov x0, x18
Jimmy Brisson3571fb92020-06-01 10:18:22 -0500433 bl errata_a78_1688305_wa
Madhukar Pappireddy4efede72019-12-18 15:56:27 -0600434#endif
435
johpow019131eb82020-10-06 17:55:25 -0500436#if ERRATA_A78_1941498
437 mov x0, x18
438 bl errata_a78_1941498_wa
439#endif
440
johpow0185ea43d2020-10-07 15:08:01 -0500441#if ERRATA_A78_1951500
442 mov x0, x18
443 bl errata_a78_1951500_wa
444#endif
445
johpow01b3e82942021-04-30 18:08:52 -0500446#if ERRATA_A78_1821534
447 mov x0, x18
448 bl errata_a78_1821534_wa
449#endif
450
nayanpatel-arm80bf7a52021-08-11 13:33:00 -0700451#if ERRATA_A78_1952683
452 mov x0, x18
453 bl errata_a78_1952683_wa
454#endif
455
nayanpatel-arm39e08652021-09-28 17:31:50 -0700456#if ERRATA_A78_2132060
457 mov x0, x18
458 bl errata_a78_2132060_wa
459#endif
460
johpow0145c17242021-09-02 17:53:30 -0500461#if ERRATA_A78_2242635
462 mov x0, x18
463 bl errata_a78_2242635_wa
464#endif
465
John Powell12bc0de2022-05-03 15:22:57 -0500466#if ERRATA_A78_2376745
467 mov x0, x18
468 bl errata_a78_2376745_wa
469#endif
470
John Powella93b7e52022-05-03 15:52:11 -0500471#if ERRATA_A78_2395406
472 mov x0, x18
473 bl errata_a78_2395406_wa
474#endif
475
Bipin Ravi33100ef2023-02-28 14:51:28 -0600476#if ERRATA_A78_2742426
477 mov x0, x18
478 bl errata_a78_2742426_wa
479#endif
480
Sona Mathewf13c1a92023-01-11 12:55:30 -0600481#if ERRATA_A78_2779479
482 mov x0, x18
483 bl errata_a78_2779479_wa
484#endif
485
Andre Przywara0b7f1b02023-03-21 13:53:19 +0000486#if ENABLE_FEAT_AMU
Balint Dobszaydb2ec852019-07-15 11:46:20 +0200487 /* Make sure accesses from EL0/EL1 and EL2 are not trapped to EL3 */
488 mrs x0, actlr_el3
Jimmy Brisson3571fb92020-06-01 10:18:22 -0500489 bic x0, x0, #CORTEX_A78_ACTLR_TAM_BIT
Balint Dobszaydb2ec852019-07-15 11:46:20 +0200490 msr actlr_el3, x0
491
492 /* Make sure accesses from non-secure EL0/EL1 are not trapped to EL2 */
493 mrs x0, actlr_el2
Jimmy Brisson3571fb92020-06-01 10:18:22 -0500494 bic x0, x0, #CORTEX_A78_ACTLR_TAM_BIT
Balint Dobszaydb2ec852019-07-15 11:46:20 +0200495 msr actlr_el2, x0
496
497 /* Enable group0 counters */
Jimmy Brisson3571fb92020-06-01 10:18:22 -0500498 mov x0, #CORTEX_A78_AMU_GROUP0_MASK
Balint Dobszaydb2ec852019-07-15 11:46:20 +0200499 msr CPUAMCNTENSET0_EL0, x0
500
501 /* Enable group1 counters */
Jimmy Brisson3571fb92020-06-01 10:18:22 -0500502 mov x0, #CORTEX_A78_AMU_GROUP1_MASK
Balint Dobszaydb2ec852019-07-15 11:46:20 +0200503 msr CPUAMCNTENSET1_EL0, x0
Madhukar Pappireddy4efede72019-12-18 15:56:27 -0600504#endif
Balint Dobszaydb2ec852019-07-15 11:46:20 +0200505
Bipin Ravi86499742022-01-18 01:59:06 -0600506#if IMAGE_BL31 && WORKAROUND_CVE_2022_23960
507 /*
508 * The Cortex-A78 generic vectors are overridden to apply errata
509 * mitigation on exception entry from lower ELs.
510 */
511 adr x0, wa_cve_vbar_cortex_a78
512 msr vbar_el3, x0
513#endif /* IMAGE_BL31 && WORKAROUND_CVE_2022_23960 */
514
Madhukar Pappireddy4efede72019-12-18 15:56:27 -0600515 isb
516 ret x19
Jimmy Brisson3571fb92020-06-01 10:18:22 -0500517endfunc cortex_a78_reset_func
Balint Dobszaydb2ec852019-07-15 11:46:20 +0200518
Louis Mayencourtf57f1082019-05-14 11:00:45 +0100519 /* ---------------------------------------------
520 * HW will do the cache maintenance while powering down
521 * ---------------------------------------------
522 */
Jimmy Brisson3571fb92020-06-01 10:18:22 -0500523func cortex_a78_core_pwr_dwn
Louis Mayencourtf57f1082019-05-14 11:00:45 +0100524 /* ---------------------------------------------
525 * Enable CPU power down bit in power control register
526 * ---------------------------------------------
527 */
Jimmy Brisson3571fb92020-06-01 10:18:22 -0500528 mrs x0, CORTEX_A78_CPUPWRCTLR_EL1
529 orr x0, x0, #CORTEX_A78_CPUPWRCTLR_EL1_CORE_PWRDN_EN_BIT
530 msr CORTEX_A78_CPUPWRCTLR_EL1, x0
Bipin Ravi8f78e0d2022-12-15 14:48:21 -0600531#if ERRATA_A78_2772019
532 mov x15, x30
533 bl cpu_get_rev_var
534 bl errata_a78_2772019_wa
535 mov x30, x15
536#endif /* ERRATA_A78_2772019 */
Louis Mayencourtf57f1082019-05-14 11:00:45 +0100537 isb
538 ret
Jimmy Brisson3571fb92020-06-01 10:18:22 -0500539endfunc cortex_a78_core_pwr_dwn
Louis Mayencourtf57f1082019-05-14 11:00:45 +0100540
541 /*
Jimmy Brisson3571fb92020-06-01 10:18:22 -0500542 * Errata printing function for cortex_a78. Must follow AAPCS.
Louis Mayencourtf57f1082019-05-14 11:00:45 +0100543 */
544#if REPORT_ERRATA
Jimmy Brisson3571fb92020-06-01 10:18:22 -0500545func cortex_a78_errata_report
Madhukar Pappireddy4efede72019-12-18 15:56:27 -0600546 stp x8, x30, [sp, #-16]!
547
548 bl cpu_get_rev_var
549 mov x8, x0
550
551 /*
552 * Report all errata. The revision-variant information is passed to
553 * checking functions of each errata.
554 */
Jimmy Brisson3571fb92020-06-01 10:18:22 -0500555 report_errata ERRATA_A78_1688305, cortex_a78, 1688305
Govindraj Raja805dc802023-06-15 12:39:48 -0500556 report_errata ERRATA_A78_1821534, cortex_a78, 1821534
johpow019131eb82020-10-06 17:55:25 -0500557 report_errata ERRATA_A78_1941498, cortex_a78, 1941498
johpow0185ea43d2020-10-07 15:08:01 -0500558 report_errata ERRATA_A78_1951500, cortex_a78, 1951500
nayanpatel-arm80bf7a52021-08-11 13:33:00 -0700559 report_errata ERRATA_A78_1952683, cortex_a78, 1952683
nayanpatel-arm39e08652021-09-28 17:31:50 -0700560 report_errata ERRATA_A78_2132060, cortex_a78, 2132060
johpow0145c17242021-09-02 17:53:30 -0500561 report_errata ERRATA_A78_2242635, cortex_a78, 2242635
John Powell12bc0de2022-05-03 15:22:57 -0500562 report_errata ERRATA_A78_2376745, cortex_a78, 2376745
John Powella93b7e52022-05-03 15:52:11 -0500563 report_errata ERRATA_A78_2395406, cortex_a78, 2395406
Bipin Ravi33100ef2023-02-28 14:51:28 -0600564 report_errata ERRATA_A78_2742426, cortex_a78, 2742426
Bipin Ravi8f78e0d2022-12-15 14:48:21 -0600565 report_errata ERRATA_A78_2772019, cortex_a78, 2772019
Sona Mathewf13c1a92023-01-11 12:55:30 -0600566 report_errata ERRATA_A78_2779479, cortex_a78, 2779479
Bipin Ravi86499742022-01-18 01:59:06 -0600567 report_errata WORKAROUND_CVE_2022_23960, cortex_a78, cve_2022_23960
Madhukar Pappireddy4efede72019-12-18 15:56:27 -0600568
569 ldp x8, x30, [sp], #16
Louis Mayencourtf57f1082019-05-14 11:00:45 +0100570 ret
Jimmy Brisson3571fb92020-06-01 10:18:22 -0500571endfunc cortex_a78_errata_report
Louis Mayencourtf57f1082019-05-14 11:00:45 +0100572#endif
573
574 /* ---------------------------------------------
Jimmy Brisson3571fb92020-06-01 10:18:22 -0500575 * This function provides cortex_a78 specific
Louis Mayencourtf57f1082019-05-14 11:00:45 +0100576 * register information for crash reporting.
577 * It needs to return with x6 pointing to
578 * a list of register names in ascii and
579 * x8 - x15 having values of registers to be
580 * reported.
581 * ---------------------------------------------
582 */
Jimmy Brisson3571fb92020-06-01 10:18:22 -0500583.section .rodata.cortex_a78_regs, "aS"
584cortex_a78_regs: /* The ascii list of register names to be reported */
Louis Mayencourtf57f1082019-05-14 11:00:45 +0100585 .asciz "cpuectlr_el1", ""
586
Jimmy Brisson3571fb92020-06-01 10:18:22 -0500587func cortex_a78_cpu_reg_dump
588 adr x6, cortex_a78_regs
589 mrs x8, CORTEX_A78_CPUECTLR_EL1
Louis Mayencourtf57f1082019-05-14 11:00:45 +0100590 ret
Jimmy Brisson3571fb92020-06-01 10:18:22 -0500591endfunc cortex_a78_cpu_reg_dump
Louis Mayencourtf57f1082019-05-14 11:00:45 +0100592
Jimmy Brisson3571fb92020-06-01 10:18:22 -0500593declare_cpu_ops cortex_a78, CORTEX_A78_MIDR, \
594 cortex_a78_reset_func, \
595 cortex_a78_core_pwr_dwn