Merge "fix(errata): workaround for Cortex X2 erratum 2002765" into integration

This commit is contained in:
Bipin Ravi 2021-12-22 01:12:32 +01:00 committed by TrustedFirmware Code Review
commit 47833abd77
3 changed files with 52 additions and 0 deletions

View File

@ -443,6 +443,10 @@ For Neoverse N2, the following errata build flags are defined :
For Cortex-X2, the following errata build flags are defined : For Cortex-X2, the following errata build flags are defined :
- ``ERRATA_X2_2002765``: This applies errata 2002765 workaround to Cortex-X2
CPU. This needs to be enabled for revisions r0p0, r1p0, and r2p0 of the CPU,
it is still open.
- ``ERRATA_X2_2083908``: This applies errata 2083908 workaround to Cortex-X2 - ``ERRATA_X2_2083908``: This applies errata 2083908 workaround to Cortex-X2
CPU. This needs to be enabled for revision r2p0 of the CPU, it is still open. CPU. This needs to be enabled for revision r2p0 of the CPU, it is still open.

View File

@ -21,6 +21,40 @@
#error "Cortex X2 supports only AArch64. Compile with CTX_INCLUDE_AARCH32_REGS=0" #error "Cortex X2 supports only AArch64. Compile with CTX_INCLUDE_AARCH32_REGS=0"
#endif #endif
/* --------------------------------------------------
* Errata Workaround for Cortex X2 Errata #2002765.
* This applies to revisions r0p0, r1p0, and r2p0 and
* is open.
* x0: variant[4:7] and revision[0:3] of current cpu.
* Shall clobber: x0, x1, x17
* --------------------------------------------------
*/
func errata_cortex_x2_2002765_wa
/* Check workaround compatibility. */
mov x17, x30
bl check_errata_2002765
cbz x0, 1f
ldr x0, =0x6
msr S3_6_C15_C8_0, x0 /* CPUPSELR_EL3 */
ldr x0, =0xF3A08002
msr S3_6_C15_C8_2, x0 /* CPUPOR_EL3 */
ldr x0, =0xFFF0F7FE
msr S3_6_C15_C8_3, x0 /* CPUPMR_EL3 */
ldr x0, =0x40000001003ff
msr S3_6_C15_C8_1, x0 /* CPUPCR_EL3 */
isb
1:
ret x17
endfunc errata_cortex_x2_2002765_wa
func check_errata_2002765
/* Applies to r0p0 - r2p0 */
mov x1, #0x20
b cpu_rev_var_ls
endfunc check_errata_2002765
/* -------------------------------------------------- /* --------------------------------------------------
* Errata Workaround for Cortex X2 Errata #2083908. * Errata Workaround for Cortex X2 Errata #2083908.
* This applies to revision r2p0 and is open. * This applies to revision r2p0 and is open.
@ -80,6 +114,7 @@ func cortex_x2_errata_report
* Report all errata. The revision-variant information is passed to * Report all errata. The revision-variant information is passed to
* checking functions of each errata. * checking functions of each errata.
*/ */
report_errata ERRATA_X2_2002765, cortex_x2, 2002765
report_errata ERRATA_X2_2083908, cortex_x2, 2083908 report_errata ERRATA_X2_2083908, cortex_x2, 2083908
ldp x8, x30, [sp], #16 ldp x8, x30, [sp], #16
@ -98,6 +133,11 @@ func cortex_x2_reset_func
bl cpu_get_rev_var bl cpu_get_rev_var
mov x18, x0 mov x18, x0
#if ERRATA_X2_2002765
mov x0, x18
bl errata_cortex_x2_2002765_wa
#endif
#if ERRATA_X2_2083908 #if ERRATA_X2_2083908
mov x0, x18 mov x0, x18
bl errata_cortex_x2_2083908_wa bl errata_cortex_x2_2083908_wa

View File

@ -495,6 +495,10 @@ ERRATA_A710_2055002 ?=0
# to revision r0p0, r1p0 and r2p0 of the Cortex-A710 cpu and is still open. # to revision r0p0, r1p0 and r2p0 of the Cortex-A710 cpu and is still open.
ERRATA_A710_2017096 ?=0 ERRATA_A710_2017096 ?=0
# Flag to apply erratum 2002765 workaround during reset. This erratum applies
# to revisions r0p0, r1p0, and r2p0 of the Cortex-X2 cpu and is still open.
ERRATA_X2_2002765 ?=0
# Flag to apply erratum 2083908 workaround during reset. This erratum applies # Flag to apply erratum 2083908 workaround during reset. This erratum applies
# to revision r2p0 of the Cortex-X2 cpu and is still open. # to revision r2p0 of the Cortex-X2 cpu and is still open.
ERRATA_X2_2083908 ?=0 ERRATA_X2_2083908 ?=0
@ -924,6 +928,10 @@ $(eval $(call add_define,ERRATA_A710_2055002))
$(eval $(call assert_boolean,ERRATA_A710_2017096)) $(eval $(call assert_boolean,ERRATA_A710_2017096))
$(eval $(call add_define,ERRATA_A710_2017096)) $(eval $(call add_define,ERRATA_A710_2017096))
# Process ERRATA_X2_2002765 flag
$(eval $(call assert_boolean,ERRATA_X2_2002765))
$(eval $(call add_define,ERRATA_X2_2002765))
# Process ERRATA_X2_2083908 flag # Process ERRATA_X2_2083908 flag
$(eval $(call assert_boolean,ERRATA_X2_2083908)) $(eval $(call assert_boolean,ERRATA_X2_2083908))
$(eval $(call add_define,ERRATA_X2_2083908)) $(eval $(call add_define,ERRATA_X2_2083908))