blob: 3ea55df2c7eb4c2a2a5e924c127eb89a383f8a38 [file] [log] [blame]
johpow01a3810e82021-05-18 15:23:31 -05001/*
Bipin Ravi86499742022-01-18 01:59:06 -06002 * Copyright (c) 2021-2022, Arm Limited. All rights reserved.
johpow01a3810e82021-05-18 15:23:31 -05003 *
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 <cortex_a710.h>
11#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"
johpow01a3810e82021-05-18 15:23:31 -050014
15/* Hardware handled coherency */
16#if HW_ASSISTED_COHERENCY == 0
17#error "Cortex A710 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 "Cortex A710 supports only AArch64. Compile with CTX_INCLUDE_AARCH32_REGS=0"
23#endif
24
Bipin Ravi86499742022-01-18 01:59:06 -060025#if WORKAROUND_CVE_2022_23960
26 wa_cve_2022_23960_bhb_vector_table CORTEX_A710_BHB_LOOP_COUNT, cortex_a710
27#endif /* WORKAROUND_CVE_2022_23960 */
28
nayanpatel-arme55d3252021-08-06 16:39:48 -070029/* --------------------------------------------------
30 * Errata Workaround for Cortex-A710 Erratum 1987031.
31 * This applies to revision r0p0, r1p0 and r2p0 of Cortex-A710. It is still
32 * open.
33 * Inputs:
34 * x0: variant[4:7] and revision[0:3] of current cpu.
35 * Shall clobber: x0-x17
36 * --------------------------------------------------
37 */
38func errata_a710_1987031_wa
39 /* Check revision. */
40 mov x17, x30
41 bl check_errata_1987031
42 cbz x0, 1f
43
44 /* Apply instruction patching sequence */
45 ldr x0,=0x6
46 msr S3_6_c15_c8_0,x0
47 ldr x0,=0xF3A08002
48 msr S3_6_c15_c8_2,x0
49 ldr x0,=0xFFF0F7FE
50 msr S3_6_c15_c8_3,x0
51 ldr x0,=0x40000001003ff
52 msr S3_6_c15_c8_1,x0
53 ldr x0,=0x7
54 msr S3_6_c15_c8_0,x0
55 ldr x0,=0xBF200000
56 msr S3_6_c15_c8_2,x0
57 ldr x0,=0xFFEF0000
58 msr S3_6_c15_c8_3,x0
59 ldr x0,=0x40000001003f3
60 msr S3_6_c15_c8_1,x0
61 isb
621:
63 ret x17
64endfunc errata_a710_1987031_wa
65
66func check_errata_1987031
67 /* Applies to r0p0, r1p0 and r2p0 */
68 mov x1, #0x20
69 b cpu_rev_var_ls
70endfunc check_errata_1987031
71
nayanpatel-arm7597d082021-08-25 17:35:15 -070072/* --------------------------------------------------
73 * Errata Workaround for Cortex-A710 Erratum 2081180.
74 * This applies to revision r0p0, r1p0 and r2p0 of Cortex-A710.
75 * It is still open.
76 * Inputs:
77 * x0: variant[4:7] and revision[0:3] of current cpu.
78 * Shall clobber: x0-x17
79 * --------------------------------------------------
80 */
81func errata_a710_2081180_wa
82 /* Check revision. */
83 mov x17, x30
84 bl check_errata_2081180
85 cbz x0, 1f
86
87 /* Apply instruction patching sequence */
88 ldr x0,=0x3
89 msr S3_6_c15_c8_0,x0
90 ldr x0,=0xF3A08002
91 msr S3_6_c15_c8_2,x0
92 ldr x0,=0xFFF0F7FE
93 msr S3_6_c15_c8_3,x0
94 ldr x0,=0x10002001003FF
95 msr S3_6_c15_c8_1,x0
96 ldr x0,=0x4
97 msr S3_6_c15_c8_0,x0
98 ldr x0,=0xBF200000
99 msr S3_6_c15_c8_2,x0
100 ldr x0,=0xFFEF0000
101 msr S3_6_c15_c8_3,x0
102 ldr x0,=0x10002001003F3
103 msr S3_6_c15_c8_1,x0
104 isb
1051:
106 ret x17
107endfunc errata_a710_2081180_wa
108
109func check_errata_2081180
110 /* Applies to r0p0, r1p0 and r2p0 */
111 mov x1, #0x20
112 b cpu_rev_var_ls
113endfunc check_errata_2081180
114
Bipin Ravicd39b142021-03-31 16:45:40 -0500115/* ---------------------------------------------------------------------
116 * Errata Workaround for Cortex-A710 Erratum 2055002.
117 * This applies to revision r1p0, r2p0 of Cortex-A710 and is still open.
118 * Inputs:
119 * x0: variant[4:7] and revision[0:3] of current cpu.
120 * Shall clobber: x0-x17
121 * ---------------------------------------------------------------------
122 */
123func errata_a710_2055002_wa
124 /* Compare x0 against revision r2p0 */
125 mov x17, x30
126 bl check_errata_2055002
127 cbz x0, 1f
128 mrs x1, CORTEX_A710_CPUACTLR_EL1
129 orr x1, x1, CORTEX_A710_CPUACTLR_EL1_BIT_46
130 msr CORTEX_A710_CPUACTLR_EL1, x1
1311:
132 ret x17
133endfunc errata_a710_2055002_wa
134
135func check_errata_2055002
136 /* Applies to r1p0, r2p0 */
137 mov x1, #0x20
138 b cpu_rev_var_ls
139endfunc check_errata_2055002
140
Bipin Ravi87e1d282021-03-31 18:45:55 -0500141/* -------------------------------------------------------------
142 * Errata Workaround for Cortex-A710 Erratum 2017096.
143 * This applies to revisions r0p0, r1p0 and r2p0 of Cortex-A710.
144 * Inputs:
145 * x0: variant[4:7] and revision[0:3] of current cpu.
146 * Shall clobber: x0-x17
147 * -------------------------------------------------------------
148 */
149func errata_a710_2017096_wa
150 /* Compare x0 against revision r0p0 to r2p0 */
151 mov x17, x30
152 bl check_errata_2017096
153 cbz x0, 1f
154 mrs x1, CORTEX_A710_CPUECTLR_EL1
155 orr x1, x1, CORTEX_A710_CPUECTLR_EL1_PFSTIDIS_BIT
156 msr CORTEX_A710_CPUECTLR_EL1, x1
157
1581:
159 ret x17
160endfunc errata_a710_2017096_wa
161
162func check_errata_2017096
163 /* Applies to r0p0, r1p0, r2p0 */
164 mov x1, #0x20
165 b cpu_rev_var_ls
166endfunc check_errata_2017096
167
nayanpatel-arm0b338b42021-09-16 15:27:53 -0700168
169/* ---------------------------------------------------------------------
170 * Errata Workaround for Cortex-A710 Erratum 2083908.
171 * This applies to revision r2p0 of Cortex-A710 and is still open.
172 * Inputs:
173 * x0: variant[4:7] and revision[0:3] of current cpu.
174 * Shall clobber: x0-x17
175 * ---------------------------------------------------------------------
176 */
177func errata_a710_2083908_wa
178 /* Compare x0 against revision r2p0 */
179 mov x17, x30
180 bl check_errata_2083908
181 cbz x0, 1f
182 mrs x1, CORTEX_A710_CPUACTLR5_EL1
183 orr x1, x1, CORTEX_A710_CPUACTLR5_EL1_BIT_13
184 msr CORTEX_A710_CPUACTLR5_EL1, x1
1851:
186 ret x17
187endfunc errata_a710_2083908_wa
188
189func check_errata_2083908
190 /* Applies to r2p0 */
191 mov x1, #CPU_REV(2, 0)
192 mov x2, #CPU_REV(2, 0)
193 b cpu_rev_var_range
194endfunc check_errata_2083908
195
nayanpatel-armf2dce0e2021-09-22 12:35:03 -0700196/* ---------------------------------------------------------------------
197 * Errata Workaround for Cortex-A710 Erratum 2058056.
198 * This applies to revisions r0p0, r1p0 and r2p0 of Cortex-A710 and is still
199 * open.
200 * Inputs:
201 * x0: variant[4:7] and revision[0:3] of current cpu.
202 * Shall clobber: x0-x17
203 * ---------------------------------------------------------------------
204 */
205func errata_a710_2058056_wa
206 /* Compare x0 against revision r2p0 */
207 mov x17, x30
208 bl check_errata_2058056
209 cbz x0, 1f
210 mrs x1, CORTEX_A710_CPUECTLR2_EL1
211 mov x0, #CORTEX_A710_CPUECTLR2_EL1_PF_MODE_CNSRV
212 bfi x1, x0, #CPUECTLR2_EL1_PF_MODE_LSB, #CPUECTLR2_EL1_PF_MODE_WIDTH
213 msr CORTEX_A710_CPUECTLR2_EL1, x1
2141:
215 ret x17
216endfunc errata_a710_2058056_wa
217
218func check_errata_2058056
219 /* Applies to r0p0, r1p0 and r2p0 */
220 mov x1, #0x20
221 b cpu_rev_var_ls
222endfunc check_errata_2058056
223
Bipin Ravi32705b12022-02-06 02:32:54 -0600224/* --------------------------------------------------
225 * Errata Workaround for Cortex-A710 Erratum 2267065.
226 * This applies to revisions r0p0, r1p0 and r2p0.
227 * It is fixed in r2p1.
228 * Inputs:
229 * x0: variant[4:7] and revision[0:3] of current cpu.
230 * Shall clobber: x0-x1, x17
231 * --------------------------------------------------
232 */
233func errata_a710_2267065_wa
234 /* Compare x0 against revision r2p0 */
235 mov x17, x30
236 bl check_errata_2267065
237 cbz x0, 1f
238
239 /* Apply instruction patching sequence */
240 mrs x1, CORTEX_A710_CPUACTLR_EL1
241 orr x1, x1, CORTEX_A710_CPUACTLR_EL1_BIT_22
242 msr CORTEX_A710_CPUACTLR_EL1, x1
2431:
244 ret x17
245endfunc errata_a710_2267065_wa
246
247func check_errata_2267065
248 /* Applies to r0p0, r1p0 and r2p0 */
249 mov x1, #0x20
250 b cpu_rev_var_ls
251endfunc check_errata_2267065
252
Bipin Ravid53069b2022-02-06 03:11:44 -0600253/* ---------------------------------------------------------------
254 * Errata Workaround for Cortex-A710 Erratum 2136059.
255 * This applies to revision r0p0, r1p0 and r2p0.
256 * It is fixed in r2p1.
257 * Inputs:
258 * x0: variant[4:7] and revision[0:3] of current cpu.
259 * Shall clobber: x0-x17
260 * ---------------------------------------------------------------
261 */
262func errata_a710_2136059_wa
263 /* Compare x0 against revision r2p0 */
264 mov x17, x30
265 bl check_errata_2136059
266 cbz x0, 1f
267
268 /* Apply the workaround */
269 mrs x1, CORTEX_A710_CPUACTLR5_EL1
270 orr x1, x1, CORTEX_A710_CPUACTLR5_EL1_BIT_44
271 msr CORTEX_A710_CPUACTLR5_EL1, x1
272
2731:
274 ret x17
275endfunc errata_a710_2136059_wa
276
277func check_errata_2136059
278 /* Applies to r0p0, r1p0 and r2p0 */
279 mov x1, #0x20
280 b cpu_rev_var_ls
281endfunc check_errata_2136059
282
Akram Ahmad1714c1d2022-07-21 15:25:08 +0100283/* ----------------------------------------------------------------
284 * Errata workaround for Cortex-A710 Erratum 2147715.
285 * This applies to revision r2p0, and is fixed in r2p1.
286 * Inputs:
287 * x0: variant[4:7] and revision[0:3] of current cpu.
288 * Shall clobber: x0, x1, x17
289 * ----------------------------------------------------------------
290 */
291func errata_a710_2147715_wa
292 mov x17, x30
293 bl check_errata_2147715
294 cbz x0, 1f
295
296 /* Apply workaround; set CPUACTLR_EL1[22]
297 * to 1, which will cause the CFP instruction
298 * to invalidate all branch predictor resources
299 * regardless of context.
300 */
301 mrs x1, CORTEX_A710_CPUACTLR_EL1
302 orr x1, x1, CORTEX_A710_CPUACTLR_EL1_BIT_22
303 msr CORTEX_A710_CPUACTLR_EL1, x1
3041:
305 ret x17
306endfunc errata_a710_2147715_wa
307
308func check_errata_2147715
309 mov x1, #0x20
310 mov x2, #0x20
311 b cpu_rev_var_range
312endfunc check_errata_2147715
313
johpow017249fd02022-02-28 18:34:04 -0600314/* ---------------------------------------------------------------
Jayanth Dodderi Chidanandde4f5892022-09-01 22:09:54 +0100315 * Errata Workaround for Cortex-A710 Erratum 2216384.
316 * This applies to revision r0p0, r1p0 and r2p0.
317 * It is fixed in r2p1.
318 * Inputs:
319 * x0: variant[4:7] and revision[0:3] of current cpu.
320 * Shall clobber: x0-x17
321 * ---------------------------------------------------------------
322 */
323func errata_a710_2216384_wa
324 /* Compare x0 against revision r2p0 */
325 mov x17, x30
326 bl check_errata_2216384
327 cbz x0, 1f
328
329 /* Apply workaround: set CPUACTLR5_EL1[17]
330 * to 1 and the following instruction
331 * patching sequence.
332 */
333 mrs x1, CORTEX_A710_CPUACTLR5_EL1
334 orr x1, x1, CORTEX_A710_CPUACTLR5_EL1_BIT_17
335 msr CORTEX_A710_CPUACTLR5_EL1, x1
336
337 ldr x0,=0x5
338 msr CORTEX_A710_CPUPSELR_EL3, x0
339 ldr x0,=0x10F600E000
340 msr CORTEX_A710_CPUPOR_EL3, x0
341 ldr x0,=0x10FF80E000
342 msr CORTEX_A710_CPUPMR_EL3, x0
343 ldr x0,=0x80000000003FF
344 msr CORTEX_A710_CPUPCR_EL3, x0
345 isb
3461:
347 ret x17
348endfunc errata_a710_2216384_wa
349
350func check_errata_2216384
351 /* Applies to r0p0, r1p0 and r2p0 */
352 mov x1, #0x20
353 b cpu_rev_var_ls
354endfunc check_errata_2216384
355
356/* ---------------------------------------------------------------
johpow017249fd02022-02-28 18:34:04 -0600357 * Errata Workaround for Cortex-A710 Erratum 2282622.
358 * This applies to revision r0p0, r1p0 and r2p0.
359 * It is fixed in r2p1.
360 * Inputs:
361 * x0: variant[4:7] and revision[0:3] of current cpu.
362 * Shall clobber: x0, x1, x17
363 * ---------------------------------------------------------------
364 */
365func errata_a710_2282622_wa
366 /* Compare x0 against revision r2p0 */
367 mov x17, x30
368 bl check_errata_2282622
369 cbz x0, 1f
370
371 /* Apply the workaround */
372 mrs x1, CORTEX_A710_CPUACTLR2_EL1
373 orr x1, x1, BIT(0)
374 msr CORTEX_A710_CPUACTLR2_EL1, x1
375
3761:
377 ret x17
378endfunc errata_a710_2282622_wa
379
380func check_errata_2282622
381 /* Applies to r0p0, r1p0 and r2p0 */
382 mov x1, #0x20
383 b cpu_rev_var_ls
384endfunc check_errata_2282622
385
Boyan Karatotevf8de5352022-10-03 14:21:28 +0100386/* ------------------------------------------------------------------------
387 * Errata Workaround for Cortex-A710 Erratum 2291219 on power down request.
388 * This applies to revision <= r2p0 and is fixed in r2p1.
389 * Inputs:
390 * x0: variant[4:7] and revision[0:3] of current cpu.
391 * Shall clobber: x0-x1, x17
392 * ------------------------------------------------------------------------
393 */
394func errata_a710_2291219_wa
395 /* Check revision. */
396 mov x17, x30
397 bl check_errata_2291219
398 cbz x0, 1f
399
400 /* Set bit 36 in ACTLR2_EL1 */
401 mrs x1, CORTEX_A710_CPUACTLR2_EL1
402 orr x1, x1, #CORTEX_A710_CPUACTLR2_EL1_BIT_36
403 msr CORTEX_A710_CPUACTLR2_EL1, x1
4041:
405 ret x17
406endfunc errata_a710_2291219_wa
407
408func check_errata_2291219
409 /* Applies to <= r2p0. */
410 mov x1, #0x20
411 b cpu_rev_var_ls
412endfunc check_errata_2291219
413
johpow017d52a8f2022-03-09 16:23:04 -0600414/* ---------------------------------------------------------------
415 * Errata Workaround for Cortex-A710 Erratum 2008768.
416 * This applies to revision r0p0, r1p0 and r2p0.
417 * It is fixed in r2p1.
418 * Inputs:
419 * x0: variant[4:7] and revision[0:3] of current cpu.
420 * Shall clobber: x0, x1, x2, x17
421 * ---------------------------------------------------------------
422 */
423func errata_a710_2008768_wa
424 mov x17, x30
425 bl check_errata_2008768
426 cbz x0, 1f
427
428 /* Stash ERRSELR_EL1 in x2 */
429 mrs x2, ERRSELR_EL1
430
431 /* Select error record 0 and clear ED bit */
432 msr ERRSELR_EL1, xzr
433 mrs x1, ERXCTLR_EL1
434 bfi x1, xzr, #ERXCTLR_ED_SHIFT, #1
435 msr ERXCTLR_EL1, x1
436
437 /* Select error record 1 and clear ED bit */
438 mov x0, #1
439 msr ERRSELR_EL1, x0
440 mrs x1, ERXCTLR_EL1
441 bfi x1, xzr, #ERXCTLR_ED_SHIFT, #1
442 msr ERXCTLR_EL1, x1
443
444 /* Restore ERRSELR_EL1 from x2 */
445 msr ERRSELR_EL1, x2
446
4471:
448 ret x17
449endfunc errata_a710_2008768_wa
450
451func check_errata_2008768
452 /* Applies to r0p0, r1p0 and r2p0 */
453 mov x1, #0x20
454 b cpu_rev_var_ls
455endfunc check_errata_2008768
456
Bipin Ravi77eab292022-07-12 15:53:21 -0500457/* -------------------------------------------------------
458 * Errata Workaround for Cortex-A710 Erratum 2371105.
459 * This applies to revisions <= r2p0 and is fixed in r2p1.
460 * x0: variant[4:7] and revision[0:3] of current cpu.
461 * Shall clobber: x0-x17
462 * -------------------------------------------------------
463 */
464func errata_a710_2371105_wa
465 /* Check workaround compatibility. */
466 mov x17, x30
467 bl check_errata_2371105
468 cbz x0, 1f
469
470 /* Set bit 40 in CPUACTLR2_EL1 */
471 mrs x1, CORTEX_A710_CPUACTLR2_EL1
472 orr x1, x1, #CORTEX_A710_CPUACTLR2_EL1_BIT_40
473 msr CORTEX_A710_CPUACTLR2_EL1, x1
474 isb
4751:
476 ret x17
477endfunc errata_a710_2371105_wa
478
479func check_errata_2371105
480 /* Applies to <= r2p0. */
481 mov x1, #0x20
482 b cpu_rev_var_ls
483endfunc check_errata_2371105
484
Bipin Ravief9a1552022-12-07 13:32:35 -0600485/* ----------------------------------------------------
486 * Errata Workaround for Cortex-A710 Errata #2768515
487 * This applies to revisions <= r2p1 and is still open.
488 * x0: variant[4:7] and revision[0:3] of current cpu.
489 * Shall clobber: x0-x17
490 * ----------------------------------------------------
491 */
492func errata_a710_2768515_wa
493 mov x17, x30
494 bl check_errata_2768515
495 cbz x0, 1f
496
497 /* dsb before isb of power down sequence */
498 dsb sy
4991:
500 ret x17
501endfunc errata_a710_2768515_wa
502
503func check_errata_2768515
504 /* Applies to all revisions <= r2p1 */
505 mov x1, #0x21
506 b cpu_rev_var_ls
507endfunc check_errata_2768515
508
Bipin Ravi86499742022-01-18 01:59:06 -0600509func check_errata_cve_2022_23960
510#if WORKAROUND_CVE_2022_23960
511 mov x0, #ERRATA_APPLIES
512#else
513 mov x0, #ERRATA_MISSING
514#endif
515 ret
516endfunc check_errata_cve_2022_23960
517
johpow01a3810e82021-05-18 15:23:31 -0500518 /* ----------------------------------------------------
519 * HW will do the cache maintenance while powering down
520 * ----------------------------------------------------
521 */
522func cortex_a710_core_pwr_dwn
johpow017d52a8f2022-03-09 16:23:04 -0600523
524#if ERRATA_A710_2008768
525 mov x4, x30
526 bl cpu_get_rev_var
527 bl errata_a710_2008768_wa
528 mov x30, x4
529#endif
530
Boyan Karatotevf8de5352022-10-03 14:21:28 +0100531#if ERRATA_A710_2291219
532 mov x15, x30
533 bl cpu_get_rev_var
534 bl errata_a710_2291219_wa
535 mov x30, x15
536#endif /* ERRATA_A710_2291219 */
537
johpow01a3810e82021-05-18 15:23:31 -0500538 /* ---------------------------------------------------
539 * Enable CPU power down bit in power control register
540 * ---------------------------------------------------
541 */
542 mrs x0, CORTEX_A710_CPUPWRCTLR_EL1
543 orr x0, x0, #CORTEX_A710_CPUPWRCTLR_EL1_CORE_PWRDN_BIT
544 msr CORTEX_A710_CPUPWRCTLR_EL1, x0
Bipin Ravief9a1552022-12-07 13:32:35 -0600545#if ERRATA_A710_2768515
546 mov x15, x30
547 bl cpu_get_rev_var
548 bl errata_a710_2768515_wa
549 mov x30, x15
550#endif /* ERRATA_A710_2768515 */
johpow01a3810e82021-05-18 15:23:31 -0500551 isb
552 ret
553endfunc cortex_a710_core_pwr_dwn
554
Bipin Ravicd39b142021-03-31 16:45:40 -0500555#if REPORT_ERRATA
johpow01a3810e82021-05-18 15:23:31 -0500556 /*
Bipin Ravicd39b142021-03-31 16:45:40 -0500557 * Errata printing function for Cortex-A710. Must follow AAPCS.
johpow01a3810e82021-05-18 15:23:31 -0500558 */
johpow01a3810e82021-05-18 15:23:31 -0500559func cortex_a710_errata_report
nayanpatel-arme55d3252021-08-06 16:39:48 -0700560 stp x8, x30, [sp, #-16]!
561
562 bl cpu_get_rev_var
563 mov x8, x0
564
565 /*
566 * Report all errata. The revision-variant information is passed to
567 * checking functions of each errata.
568 */
569 report_errata ERRATA_A710_1987031, cortex_a710, 1987031
nayanpatel-arm7597d082021-08-25 17:35:15 -0700570 report_errata ERRATA_A710_2081180, cortex_a710, 2081180
Bipin Ravicd39b142021-03-31 16:45:40 -0500571 report_errata ERRATA_A710_2055002, cortex_a710, 2055002
Bipin Ravi87e1d282021-03-31 18:45:55 -0500572 report_errata ERRATA_A710_2017096, cortex_a710, 2017096
nayanpatel-arm0b338b42021-09-16 15:27:53 -0700573 report_errata ERRATA_A710_2083908, cortex_a710, 2083908
nayanpatel-armf2dce0e2021-09-22 12:35:03 -0700574 report_errata ERRATA_A710_2058056, cortex_a710, 2058056
Bipin Ravi32705b12022-02-06 02:32:54 -0600575 report_errata ERRATA_A710_2267065, cortex_a710, 2267065
Bipin Ravid53069b2022-02-06 03:11:44 -0600576 report_errata ERRATA_A710_2136059, cortex_a710, 2136059
johpow017249fd02022-02-28 18:34:04 -0600577 report_errata ERRATA_A710_2282622, cortex_a710, 2282622
johpow017d52a8f2022-03-09 16:23:04 -0600578 report_errata ERRATA_A710_2008768, cortex_a710, 2008768
Akram Ahmad1714c1d2022-07-21 15:25:08 +0100579 report_errata ERRATA_A710_2147715, cortex_a710, 2147715
Jayanth Dodderi Chidanandde4f5892022-09-01 22:09:54 +0100580 report_errata ERRATA_A710_2216384, cortex_a710, 2216384
Boyan Karatotevf8de5352022-10-03 14:21:28 +0100581 report_errata ERRATA_A710_2291219, cortex_a710, 2291219
Bipin Ravi77eab292022-07-12 15:53:21 -0500582 report_errata ERRATA_A710_2371105, cortex_a710, 2371105
Bipin Ravief9a1552022-12-07 13:32:35 -0600583 report_errata ERRATA_A710_2768515, cortex_a710, 2768515
Bipin Ravi86499742022-01-18 01:59:06 -0600584 report_errata WORKAROUND_CVE_2022_23960, cortex_a710, cve_2022_23960
Bipin Raviaf40d692021-12-22 14:35:21 -0600585 report_errata ERRATA_DSU_2313941, cortex_a710, dsu_2313941
nayanpatel-arme55d3252021-08-06 16:39:48 -0700586
587 ldp x8, x30, [sp], #16
johpow01a3810e82021-05-18 15:23:31 -0500588 ret
589endfunc cortex_a710_errata_report
590#endif
591
592func cortex_a710_reset_func
nayanpatel-arme55d3252021-08-06 16:39:48 -0700593 mov x19, x30
594
johpow01a3810e82021-05-18 15:23:31 -0500595 /* Disable speculative loads */
596 msr SSBS, xzr
nayanpatel-arme55d3252021-08-06 16:39:48 -0700597
598 bl cpu_get_rev_var
599 mov x18, x0
600
Bipin Raviaf40d692021-12-22 14:35:21 -0600601#if ERRATA_DSU_2313941
602 bl errata_dsu_2313941_wa
603#endif
604
nayanpatel-arme55d3252021-08-06 16:39:48 -0700605#if ERRATA_A710_1987031
606 mov x0, x18
607 bl errata_a710_1987031_wa
608#endif
609
nayanpatel-arm7597d082021-08-25 17:35:15 -0700610#if ERRATA_A710_2081180
611 mov x0, x18
612 bl errata_a710_2081180_wa
613#endif
614
Bipin Ravicd39b142021-03-31 16:45:40 -0500615#if ERRATA_A710_2055002
616 mov x0, x18
617 bl errata_a710_2055002_wa
618#endif
619
Bipin Ravi87e1d282021-03-31 18:45:55 -0500620#if ERRATA_A710_2017096
nayanpatel-arm0b338b42021-09-16 15:27:53 -0700621 mov x0, x18
622 bl errata_a710_2017096_wa
623#endif
624
625#if ERRATA_A710_2083908
626 mov x0, x18
627 bl errata_a710_2083908_wa
Bipin Ravi87e1d282021-03-31 18:45:55 -0500628#endif
nayanpatel-armf2dce0e2021-09-22 12:35:03 -0700629
630#if ERRATA_A710_2058056
631 mov x0, x18
632 bl errata_a710_2058056_wa
633#endif
Bipin Ravi32705b12022-02-06 02:32:54 -0600634
635#if ERRATA_A710_2267065
636 mov x0, x18
637 bl errata_a710_2267065_wa
638#endif
639
Bipin Ravid53069b2022-02-06 03:11:44 -0600640#if ERRATA_A710_2136059
641 mov x0, x18
642 bl errata_a710_2136059_wa
643#endif
644
Akram Ahmad1714c1d2022-07-21 15:25:08 +0100645#if ERRATA_A710_2147715
646 mov x0, x18
647 bl errata_a710_2147715_wa
648#endif
649
Jayanth Dodderi Chidanandde4f5892022-09-01 22:09:54 +0100650#if ERRATA_A710_2216384
651 mov x0, x18
652 bl errata_a710_2216384_wa
653#endif /* ERRATA_A710_2216384 */
654
johpow017249fd02022-02-28 18:34:04 -0600655#if ERRATA_A710_2282622
656 mov x0, x18
657 bl errata_a710_2282622_wa
658#endif
659
Bipin Ravi77eab292022-07-12 15:53:21 -0500660#if ERRATA_A710_2371105
661 mov x0, x18
662 bl errata_a710_2371105_wa
663#endif
664
Bipin Ravi86499742022-01-18 01:59:06 -0600665#if IMAGE_BL31 && WORKAROUND_CVE_2022_23960
666 /*
667 * The Cortex-A710 generic vectors are overridden to apply errata
Jayanth Dodderi Chidanandde4f5892022-09-01 22:09:54 +0100668 * mitigation on exception entry from lower ELs.
669 */
Bipin Ravi86499742022-01-18 01:59:06 -0600670 adr x0, wa_cve_vbar_cortex_a710
671 msr vbar_el3, x0
672#endif /* IMAGE_BL31 && WORKAROUND_CVE_2022_23960 */
673
johpow01a3810e82021-05-18 15:23:31 -0500674 isb
Bipin Ravicd39b142021-03-31 16:45:40 -0500675 ret x19
johpow01a3810e82021-05-18 15:23:31 -0500676endfunc cortex_a710_reset_func
677
678 /* ---------------------------------------------
679 * This function provides Cortex-A710 specific
680 * register information for crash reporting.
681 * It needs to return with x6 pointing to
682 * a list of register names in ascii and
683 * x8 - x15 having values of registers to be
684 * reported.
685 * ---------------------------------------------
686 */
687.section .rodata.cortex_a710_regs, "aS"
688cortex_a710_regs: /* The ascii list of register names to be reported */
689 .asciz "cpuectlr_el1", ""
690
691func cortex_a710_cpu_reg_dump
692 adr x6, cortex_a710_regs
693 mrs x8, CORTEX_A710_CPUECTLR_EL1
694 ret
695endfunc cortex_a710_cpu_reg_dump
696
697declare_cpu_ops cortex_a710, CORTEX_A710_MIDR, \
698 cortex_a710_reset_func, \
699 cortex_a710_core_pwr_dwn