@ -26,22 +26,7 @@
wa_cve_2022_23960_bhb_vector_table CORTEX_A710_BHB_LOOP_COUNT , cortex_a710
wa_cve_2022_23960_bhb_vector_table CORTEX_A710_BHB_LOOP_COUNT , cortex_a710
# endif / * WORKAROUND_CVE_2022_23960 * /
# endif / * WORKAROUND_CVE_2022_23960 * /
/ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
workaround_reset_start cortex_a710 , ERRATUM ( 1987031 ), ERRATA_A710_1987031
* Errata Workaround for Cortex-A710 Erratum 1987031 .
* This applies to revision r0p0 , r1p0 and r2p0 of Cortex-A710. It is still
* open.
* Inputs:
* x0: variant [ 4 : 7 ] and revision [ 0 : 3 ] of current cpu.
* Shall clobber : x0-x17
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* /
func errata_a710_1987031_wa
/ * Check revision. * /
mov x17 , x30
bl check_errata_1987031
cbz x0 , 1 f
/ * Apply instruction patching sequence * /
ldr x0 , = 0x6
ldr x0 , = 0x6
msr S3_6_c15_c8_0 , x0
msr S3_6_c15_c8_0 , x0
ldr x0 , = 0xF3A08002
ldr x0 , = 0xF3A08002
@ -58,31 +43,11 @@ func errata_a710_1987031_wa
msr S3_6_c15_c8_3 , x0
msr S3_6_c15_c8_3 , x0
ldr x0 , = 0x40000001003f3
ldr x0 , = 0x40000001003f3
msr S3_6_c15_c8_1 , x0
msr S3_6_c15_c8_1 , x0
isb
workaround_reset_end cortex_a710 , ERRATUM ( 1987031 )
1 :
ret x17
check_erratum_ls cortex_a710 , ERRATUM ( 1987031 ), CPU_REV ( 2 , 0 )
endfunc errata_a710_1987031_wa
func check_errata_1987031
/ * Applies to r0p0 , r1p0 and r2p0 * /
mov x1 , # 0x20
b cpu_rev_var_ls
endfunc check_errata_1987031
/ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Errata Workaround for Cortex-A710 Erratum 2008768 .
* This applies to revision r0p0 , r1p0 and r2p0.
* It is fixed in r2p1.
* Inputs:
* x0: variant [ 4 : 7 ] and revision [ 0 : 3 ] of current cpu.
* Shall clobber : x0 , x1 , x2 , x17
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* /
func errata_a710_2008768_wa
mov x17 , x30
bl check_errata_2008768
cbz x0 , 1 f
workaround_runtime_start cortex_a710 , ERRATUM ( 2008768 ), ERRATA_A710_2008768
/ * Stash ERRSELR_EL1 in x2 * /
/ * Stash ERRSELR_EL1 in x2 * /
mrs x2 , ERRSELR_EL1
mrs x2 , ERRSELR_EL1
@ -101,114 +66,36 @@ func errata_a710_2008768_wa
/ * Restore ERRSELR_EL1 from x2 * /
/ * Restore ERRSELR_EL1 from x2 * /
msr ERRSELR_EL1 , x2
msr ERRSELR_EL1 , x2
workaround_runtime_end cortex_a710 , ERRATUM ( 2008768 ), NO_ISB
1 :
check_erratum_ls cortex_a710 , ERRATUM ( 2008768 ), CPU_REV ( 2 , 0 )
ret x17
endfunc errata_a710_2008768_wa
workaround_reset_start cortex_a710 , ERRATUM ( 2017096 ), ERRATA_A710_2017096
func check_errata_2008768
/ * Applies to r0p0 , r1p0 and r2p0 * /
mov x1 , # 0x20
b cpu_rev_var_ls
endfunc check_errata_2008768
/ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Errata Workaround for Cortex-A710 Erratum 2017096 .
* This applies to revisions r0p0 , r1p0 and r2p0 of Cortex-A710.
* Inputs:
* x0: variant [ 4 : 7 ] and revision [ 0 : 3 ] of current cpu.
* Shall clobber : x0-x17
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* /
func errata_a710_2017096_wa
/ * Compare x0 against revision r0p0 to r2p0 * /
mov x17 , x30
bl check_errata_2017096
cbz x0 , 1 f
mrs x1 , CORTEX_A710_CPUECTLR_EL1
mrs x1 , CORTEX_A710_CPUECTLR_EL1
orr x1 , x1 , CORTEX_A710_CPUECTLR_EL1_PFSTIDIS_BIT
orr x1 , x1 , CORTEX_A710_CPUECTLR_EL1_PFSTIDIS_BIT
msr CORTEX_A710_CPUECTLR_EL1 , x1
msr CORTEX_A710_CPUECTLR_EL1 , x1
workaround_reset_end cortex_a710 , ERRATUM ( 2017096 )
1 :
check_erratum_ls cortex_a710 , ERRATUM ( 2017096 ), CPU_REV ( 2 , 0 )
ret x17
endfunc errata_a710_2017096_wa
workaround_reset_start cortex_a710 , ERRATUM ( 2055002 ), ERRATA_A710_2055002
func check_errata_2017096
/ * Applies to r0p0 , r1p0 , r2p0 * /
mov x1 , # 0x20
b cpu_rev_var_ls
endfunc check_errata_2017096
/ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Errata Workaround for Cortex-A710 Erratum 2055002 .
* This applies to revision r1p0 , r2p0 of Cortex-A710 and is still open.
* Inputs:
* x0: variant [ 4 : 7 ] and revision [ 0 : 3 ] of current cpu.
* Shall clobber : x0-x17
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* /
func errata_a710_2055002_wa
/ * Compare x0 against revision r2p0 * /
mov x17 , x30
bl check_errata_2055002
cbz x0 , 1 f
mrs x1 , CORTEX_A710_CPUACTLR_EL1
mrs x1 , CORTEX_A710_CPUACTLR_EL1
orr x1 , x1 , CORTEX_A710_CPUACTLR_EL1_BIT_46
orr x1 , x1 , CORTEX_A710_CPUACTLR_EL1_BIT_46
msr CORTEX_A710_CPUACTLR_EL1 , x1
msr CORTEX_A710_CPUACTLR_EL1 , x1
1 :
workaround_reset_end cortex_a710 , ERRATUM ( 2055002 )
ret x17
endfunc errata_a710_2055002_wa
check_erratum_ls cortex_a710 , ERRATUM ( 2055002 ), CPU_REV ( 2 , 0 )
func check_errata_2055002
workaround_reset_start cortex_a710 , ERRATUM ( 2058056 ), ERRATA_A710_2058056
/ * Applies to r1p0 , r2p0 * /
mov x1 , # 0x20
b cpu_rev_var_ls
endfunc check_errata_2055002
/ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Errata Workaround for Cortex-A710 Erratum 2058056 .
* This applies to revisions r0p0 , r1p0 and r2p0 of Cortex-A710 and is still
* open.
* Inputs:
* x0: variant [ 4 : 7 ] and revision [ 0 : 3 ] of current cpu.
* Shall clobber : x0-x17
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* /
func errata_a710_2058056_wa
/ * Compare x0 against revision r2p0 * /
mov x17 , x30
bl check_errata_2058056
cbz x0 , 1 f
mrs x1 , CORTEX_A710_CPUECTLR2_EL1
mrs x1 , CORTEX_A710_CPUECTLR2_EL1
mov x0 , # CORTEX_A710_CPUECTLR2_EL1_PF_MODE_CNSRV
mov x0 , # CORTEX_A710_CPUECTLR2_EL1_PF_MODE_CNSRV
bfi x1 , x0 , # CPUECTLR2_EL1_PF_MODE_LSB , # CPUECTLR2_EL1_PF_MODE_WIDTH
bfi x1 , x0 , # CPUECTLR2_EL1_PF_MODE_LSB , # CPUECTLR2_EL1_PF_MODE_WIDTH
msr CORTEX_A710_CPUECTLR2_EL1 , x1
msr CORTEX_A710_CPUECTLR2_EL1 , x1
1 :
workaround_reset_end cortex_a710 , ERRATUM ( 2058056 )
ret x17
endfunc errata_a710_2058056_wa
check_erratum_ls cortex_a710 , ERRATUM ( 2058056 ), CPU_REV ( 2 , 0 )
func check_errata_2058056
/ * Applies to r0p0 , r1p0 and r2p0 * /
mov x1 , # 0x20
b cpu_rev_var_ls
endfunc check_errata_2058056
/ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Errata Workaround for Cortex-A710 Erratum 2081180 .
* This applies to revision r0p0 , r1p0 and r2p0 of Cortex-A710.
* It is still open.
* Inputs:
* x0: variant [ 4 : 7 ] and revision [ 0 : 3 ] of current cpu.
* Shall clobber : x0-x17
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* /
func errata_a710_2081180_wa
/ * Check revision. * /
mov x17 , x30
bl check_errata_2081180
cbz x0 , 1 f
/ * Apply instruction patching sequence * /
workaround_reset_start cortex_a710 , ERRATUM ( 2081180 ), ERRATA_A710_2081180
ldr x0 , = 0x3
ldr x0 , = 0x3
msr S3_6_c15_c8_0 , x0
msr S3_6_c15_c8_0 , x0
ldr x0 , = 0xF3A08002
ldr x0 , = 0xF3A08002
@ -225,125 +112,35 @@ func errata_a710_2081180_wa
msr S3_6_c15_c8_3 , x0
msr S3_6_c15_c8_3 , x0
ldr x0 , = 0x10002001003F3
ldr x0 , = 0x10002001003F3
msr S3_6_c15_c8_1 , x0
msr S3_6_c15_c8_1 , x0
isb
workaround_reset_end cortex_a710 , ERRATUM ( 2081180 )
1 :
ret x17
check_erratum_ls cortex_a710 , ERRATUM ( 2081180 ), CPU_REV ( 2 , 0 )
endfunc errata_a710_2081180_wa
workaround_reset_start cortex_a710 , ERRATUM ( 2083908 ), ERRATA_A710_2083908
func check_errata_2081180
/ * Applies to r0p0 , r1p0 and r2p0 * /
mov x1 , # 0x20
b cpu_rev_var_ls
endfunc check_errata_2081180
/ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Errata Workaround for Cortex-A710 Erratum 2083908 .
* This applies to revision r2p0 of Cortex-A710 and is still open.
* Inputs:
* x0: variant [ 4 : 7 ] and revision [ 0 : 3 ] of current cpu.
* Shall clobber : x0-x17
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* /
func errata_a710_2083908_wa
/ * Compare x0 against revision r2p0 * /
mov x17 , x30
bl check_errata_2083908
cbz x0 , 1 f
mrs x1 , CORTEX_A710_CPUACTLR5_EL1
mrs x1 , CORTEX_A710_CPUACTLR5_EL1
orr x1 , x1 , CORTEX_A710_CPUACTLR5_EL1_BIT_13
orr x1 , x1 , CORTEX_A710_CPUACTLR5_EL1_BIT_13
msr CORTEX_A710_CPUACTLR5_EL1 , x1
msr CORTEX_A710_CPUACTLR5_EL1 , x1
1 :
workaround_reset_end cortex_a710 , ERRATUM ( 2083908 )
ret x17
endfunc errata_a710_2083908_wa
check_erratum_range cortex_a710 , ERRATUM ( 2083908 ), CPU_REV ( 2 , 0 ), CPU_REV ( 2 , 0 )
func check_errata_2083908
/ * Applies to r2p0 * /
mov x1 , # CPU_REV ( 2 , 0 )
mov x2 , # CPU_REV ( 2 , 0 )
b cpu_rev_var_range
endfunc check_errata_2083908
/ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Errata Workaround for Cortex-A710 Erratum 2136059 .
* This applies to revision r0p0 , r1p0 and r2p0.
* It is fixed in r2p1.
* Inputs:
* x0: variant [ 4 : 7 ] and revision [ 0 : 3 ] of current cpu.
* Shall clobber : x0-x17
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* /
func errata_a710_2136059_wa
/ * Compare x0 against revision r2p0 * /
mov x17 , x30
bl check_errata_2136059
cbz x0 , 1 f
/ * Apply the workaround * /
workaround_reset_start cortex_a710 , ERRATUM ( 2136059 ), ERRATA_A710_2136059
mrs x1 , CORTEX_A710_CPUACTLR5_EL1
mrs x1 , CORTEX_A710_CPUACTLR5_EL1
orr x1 , x1 , CORTEX_A710_CPUACTLR5_EL1_BIT_44
orr x1 , x1 , CORTEX_A710_CPUACTLR5_EL1_BIT_44
msr CORTEX_A710_CPUACTLR5_EL1 , x1
msr CORTEX_A710_CPUACTLR5_EL1 , x1
workaround_reset_end cortex_a710 , ERRATUM ( 2136059 )
1 :
check_erratum_ls cortex_a710 , ERRATUM ( 2136059 ), CPU_REV ( 2 , 0 )
ret x17
endfunc errata_a710_2136059_wa
workaround_reset_start cortex_a710 , ERRATUM ( 2147715 ), ERRATA_A710_2147715
func check_errata_2136059
/ * Applies to r0p0 , r1p0 and r2p0 * /
mov x1 , # 0x20
b cpu_rev_var_ls
endfunc check_errata_2136059
/ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Errata workaround for Cortex-A710 Erratum 2147715 .
* This applies to revision r2p0 , and is fixed in r2p1.
* Inputs:
* x0: variant [ 4 : 7 ] and revision [ 0 : 3 ] of current cpu.
* Shall clobber : x0 , x1 , x17
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* /
func errata_a710_2147715_wa
mov x17 , x30
bl check_errata_2147715
cbz x0 , 1 f
/ * Apply workaround ; set CPUACTLR_EL1 [ 22 ]
* to 1 , which will cause the CFP instruction
* to invalidate all branch predictor resources
* regardless of context.
* /
mrs x1 , CORTEX_A710_CPUACTLR_EL1
mrs x1 , CORTEX_A710_CPUACTLR_EL1
orr x1 , x1 , CORTEX_A710_CPUACTLR_EL1_BIT_22
orr x1 , x1 , CORTEX_A710_CPUACTLR_EL1_BIT_22
msr CORTEX_A710_CPUACTLR_EL1 , x1
msr CORTEX_A710_CPUACTLR_EL1 , x1
1 :
workaround_reset_end cortex_a710 , ERRATUM ( 2147715 )
ret x17
endfunc errata_a710_2147715_wa
check_erratum_range cortex_a710 , ERRATUM ( 2147715 ), CPU_REV ( 2 , 0 ), CPU_REV ( 2 , 0 )
func check_errata_2147715
workaround_reset_start cortex_a710 , ERRATUM ( 2216384 ), ERRATA_A710_2216384
mov x1 , # 0x20
mov x2 , # 0x20
b cpu_rev_var_range
endfunc check_errata_2147715
/ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Errata Workaround for Cortex-A710 Erratum 2216384 .
* This applies to revision r0p0 , r1p0 and r2p0.
* It is fixed in r2p1.
* Inputs:
* x0: variant [ 4 : 7 ] and revision [ 0 : 3 ] of current cpu.
* Shall clobber : x0-x17
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* /
func errata_a710_2216384_wa
/ * Compare x0 against revision r2p0 * /
mov x17 , x30
bl check_errata_2216384
cbz x0 , 1 f
/ * Apply workaround : set CPUACTLR5_EL1 [ 17 ]
* to 1 and the following instruction
* patching sequence.
* /
mrs x1 , CORTEX_A710_CPUACTLR5_EL1
mrs x1 , CORTEX_A710_CPUACTLR5_EL1
orr x1 , x1 , CORTEX_A710_CPUACTLR5_EL1_BIT_17
orr x1 , x1 , CORTEX_A710_CPUACTLR5_EL1_BIT_17
msr CORTEX_A710_CPUACTLR5_EL1 , x1
msr CORTEX_A710_CPUACTLR5_EL1 , x1
@ -356,324 +153,97 @@ func errata_a710_2216384_wa
msr CORTEX_A710_CPUPMR_EL3 , x0
msr CORTEX_A710_CPUPMR_EL3 , x0
ldr x0 , = 0x80000000003FF
ldr x0 , = 0x80000000003FF
msr CORTEX_A710_CPUPCR_EL3 , x0
msr CORTEX_A710_CPUPCR_EL3 , x0
isb
workaround_reset_end cortex_a710 , ERRATUM ( 2216384 )
1 :
ret x17
check_erratum_ls cortex_a710 , ERRATUM ( 2216384 ), CPU_REV ( 2 , 0 )
endfunc errata_a710_2216384_wa
func check_errata_2216384
/ * Applies to r0p0 , r1p0 and r2p0 * /
mov x1 , # 0x20
b cpu_rev_var_ls
endfunc check_errata_2216384
/ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Errata Workaround for Cortex-A710 Erratum 2267065 .
* This applies to revisions r0p0 , r1p0 and r2p0.
* It is fixed in r2p1.
* Inputs:
* x0: variant [ 4 : 7 ] and revision [ 0 : 3 ] of current cpu.
* Shall clobber : x0-x1 , x17
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* /
func errata_a710_2267065_wa
/ * Compare x0 against revision r2p0 * /
mov x17 , x30
bl check_errata_2267065
cbz x0 , 1 f
/ * Apply instruction patching sequence * /
workaround_reset_start cortex_a710 , ERRATUM ( 2267065 ), ERRATA_A710_2267065
mrs x1 , CORTEX_A710_CPUACTLR_EL1
mrs x1 , CORTEX_A710_CPUACTLR_EL1
orr x1 , x1 , CORTEX_A710_CPUACTLR_EL1_BIT_22
orr x1 , x1 , CORTEX_A710_CPUACTLR_EL1_BIT_22
msr CORTEX_A710_CPUACTLR_EL1 , x1
msr CORTEX_A710_CPUACTLR_EL1 , x1
1 :
workaround_reset_end cortex_a710 , ERRATUM ( 2267065 )
ret x17
endfunc errata_a710_2267065_wa
check_erratum_ls cortex_a710 , ERRATUM ( 2267065 ), CPU_REV ( 2 , 0 )
func check_errata_2267065
/ * Applies to r0p0 , r1p0 and r2p0 * /
mov x1 , # 0x20
b cpu_rev_var_ls
endfunc check_errata_2267065
/ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Errata Workaround for Cortex-A710 Erratum 2282622 .
* This applies to revision r0p0 , r1p0 , r2p0 and r2p1.
* It is still open.
* Inputs:
* x0: variant [ 4 : 7 ] and revision [ 0 : 3 ] of current cpu.
* Shall clobber : x0 , x1 , x17
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* /
func errata_a710_2282622_wa
/ * Compare x0 against revision r2p1 * /
mov x17 , x30
bl check_errata_2282622
cbz x0 , 1 f
/ * Apply the workaround * /
workaround_reset_start cortex_a710 , ERRATUM ( 2282622 ), ERRATA_A710_2282622
mrs x1 , CORTEX_A710_CPUACTLR2_EL1
mrs x1 , CORTEX_A710_CPUACTLR2_EL1
orr x1 , x1 , # BIT ( 0 )
orr x1 , x1 , # BIT ( 0 )
msr CORTEX_A710_CPUACTLR2_EL1 , x1
msr CORTEX_A710_CPUACTLR2_EL1 , x1
workaround_reset_end cortex_a710 , ERRATUM ( 2282622 )
1 :
check_erratum_ls cortex_a710 , ERRATUM ( 2282622 ), CPU_REV ( 2 , 1 )
ret x17
endfunc errata_a710_2282622_wa
func check_errata_2282622
/ * Applies to r0p0 , r1p0 , r2p0 and r2p1 * /
mov x1 , # 0x21
b cpu_rev_var_ls
endfunc check_errata_2282622
/ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Errata Workaround for Cortex-A710 Erratum 2291219 on power down request.
* This applies to revision < = r2p0 and is fixed in r2p1.
* Inputs:
* x0: variant [ 4 : 7 ] and revision [ 0 : 3 ] of current cpu.
* Shall clobber : x0-x1 , x17
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* /
func errata_a710_2291219_wa
/ * Check revision. * /
mov x17 , x30
bl check_errata_2291219
cbz x0 , 1 f
workaround_runtime_start cortex_a710 , ERRATUM ( 2291219 ), ERRATA_A710_2291219
/ * Set bit 36 in ACTLR2_EL1 * /
/ * Set bit 36 in ACTLR2_EL1 * /
mrs x1 , CORTEX_A710_CPUACTLR2_EL1
mrs x1 , CORTEX_A710_CPUACTLR2_EL1
orr x1 , x1 , # CORTEX_A710_CPUACTLR2_EL1_BIT_36
orr x1 , x1 , # CORTEX_A710_CPUACTLR2_EL1_BIT_36
msr CORTEX_A710_CPUACTLR2_EL1 , x1
msr CORTEX_A710_CPUACTLR2_EL1 , x1
1 :
workaround_runtime_end cortex_a710 , ERRATUM ( 2291219 ), NO_ISB
ret x17
endfunc errata_a710_2291219_wa
check_erratum_ls cortex_a710 , ERRATUM ( 2291219 ), CPU_REV ( 2 , 0 )
func check_errata_2291219
/ *
/ * Applies to < = r2p0. * /
* ERRATA_DSU_2313941 is defined in dsu_helpers.S but applies to Cortex-A710 as
mov x1 , # 0x20
* well. Create a symbollic link to existing errata workaround to get them
b cpu_rev_var_ls
* registered under the Errata Framework.
endfunc check_errata_2291219
/ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Errata Workaround for Cortex-A710 Erratum 2371105 .
* This applies to revisions < = r2p0 and is fixed in r2p1.
* x0: variant [ 4 : 7 ] and revision [ 0 : 3 ] of current cpu.
* Shall clobber : x0-x17
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* /
* /
func errata_a710_2371105_wa
.equ check_erratum_cortex_a710_2313941 , check_errata_dsu_2313941
/ * Check workaround compatibility. * /
.equ erratum_cortex_a710_2313941_wa , errata_dsu_2313941_wa
mov x17 , x30
add_erratum_entry cortex_a710 , ERRATUM ( 2313941 ), ERRATA_DSU_2313941 , APPLY_AT_RESET
bl check_errata_2371105
cbz x0 , 1 f
workaround_reset_start cortex_a710 , ERRATUM ( 2371105 ), ERRATA_A710_2371105
/ * Set bit 40 in CPUACTLR2_EL1 * /
/ * Set bit 40 in CPUACTLR2_EL1 * /
mrs x1 , CORTEX_A710_CPUACTLR2_EL1
mrs x1 , CORTEX_A710_CPUACTLR2_EL1
orr x1 , x1 , # CORTEX_A710_CPUACTLR2_EL1_BIT_40
orr x1 , x1 , # CORTEX_A710_CPUACTLR2_EL1_BIT_40
msr CORTEX_A710_CPUACTLR2_EL1 , x1
msr CORTEX_A710_CPUACTLR2_EL1 , x1
isb
workaround_reset_end cortex_a710 , ERRATUM ( 2371105 )
1 :
ret x17
check_erratum_ls cortex_a710 , ERRATUM ( 2371105 ), CPU_REV ( 2 , 0 )
endfunc errata_a710_2371105_wa
func check_errata_2371105
/ * Applies to < = r2p0. * /
mov x1 , # 0x20
b cpu_rev_var_ls
endfunc check_errata_2371105
/ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Errata Workaround for Cortex-A710 Errata # 2768515
* This applies to revisions < = r2p1 and is still open.
* x0: variant [ 4 : 7 ] and revision [ 0 : 3 ] of current cpu.
* Shall clobber : x0-x17
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* /
func errata_a710_2768515_wa
mov x17 , x30
bl check_errata_2768515
cbz x0 , 1 f
workaround_runtime_start cortex_a710 , ERRATUM ( 2768515 ), ERRATA_A710_2768515
/ * dsb before isb of power down sequence * /
/ * dsb before isb of power down sequence * /
dsb sy
dsb sy
1 :
workaround_runtime_end cortex_a710 , ERRATUM ( 2768515 ), NO_ISB
ret x17
endfunc errata_a710_2768515_wa
func check_errata_2768515
check_erratum_ls cortex_a710 , ERRATUM ( 2768515 ), CPU_REV ( 2 , 1 )
/ * Applies to all revisions < = r2p1 * /
mov x1 , # 0x21
b cpu_rev_var_ls
endfunc check_errata_2768515
func check_errata_cve_2022_23960
workaround_reset_start cortex_a710 , CVE ( 2022 , 23960 ), WORKAROUND_CVE_2022_23960
# if WORKAROUND_CVE_2022_23960
# if IMAGE_BL31
mov x0 , # ERRATA_APPLIES
/ *
# else
* The Cortex-A710 generic vectors are overridden to apply errata
mov x0 , # ERRATA_MISSING
* mitigation on exception entry from lower ELs.
# endif
* /
ret
adr x0 , wa_cve_vbar_cortex_a710
endfunc check_errata_cve_2022_23960
msr vbar_el3 , x0
# endif / * IMAGE_BL31 * /
workaround_reset_end cortex_a710 , CVE ( 2022 , 23960 )
check_erratum_chosen cortex_a710 , CVE ( 2022 , 23960 ), WORKAROUND_CVE_2022_23960
/ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* HW will do the cache maintenance while powering down
* HW will do the cache maintenance while powering down
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* /
* /
func cortex_a710_core_pwr_dwn
func cortex_a710_core_pwr_dwn
apply_erratum cortex_a710 , ERRATUM ( 2008768 ), ERRATA_A710_2008768
# if ERRATA_A710_2008768
apply_erratum cortex_a710 , ERRATUM ( 2291219 ), ERRATA_A710_2291219 , NO_GET_CPU_REV
mov x4 , x30
bl cpu_get_rev_var
bl errata_a710_2008768_wa
mov x30 , x4
# endif
# if ERRATA_A710_2291219
mov x15 , x30
bl cpu_get_rev_var
bl errata_a710_2291219_wa
mov x30 , x15
# endif / * ERRATA_A710_2291219 * /
/ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Enable CPU power down bit in power control register
* Enable CPU power down bit in power control register
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* /
* /
mrs x0 , CORTEX_A710_CPUPWRCTLR_EL1
sysreg_bit_set CORTEX_A710_CPUPWRCTLR_EL1 , CORTEX_A710_CPUPWRCTLR_EL1_CORE_PWRDN_BIT
orr x0 , x0 , # CORTEX_A710_CPUPWRCTLR_EL1_CORE_PWRDN_BIT
apply_erratum cortex_a710 , ERRATUM ( 2768515 ), ERRATA_A710_2768515 , NO_GET_CPU_REV
msr CORTEX_A710_CPUPWRCTLR_EL1 , x0
# if ERRATA_A710_2768515
mov x15 , x30
bl cpu_get_rev_var
bl errata_a710_2768515_wa
mov x30 , x15
# endif / * ERRATA_A710_2768515 * /
isb
isb
ret
ret
endfunc cortex_a710_core_pwr_dwn
endfunc cortex_a710_core_pwr_dwn
# if REPORT_ERRATA
errata_report_shim cortex_a710
/ *
* Errata printing function for Cortex-A710. Must follow AAPCS.
* /
func cortex_a710_errata_report
stp x8 , x30 , [ sp , # - 16 ]!
bl cpu_get_rev_var
mov x8 , x0
/ *
* Report all errata. The revision-variant information is passed to
* checking functions of each errata.
* /
rep ort_errata ERRATA_A710_1987031 , cortex_a710 , 1987031
rep ort_errata ERRATA_A710_2081180 , cortex_a710 , 2081180
rep ort_errata ERRATA_A710_2055002 , cortex_a710 , 2055002
rep ort_errata ERRATA_A710_2017096 , cortex_a710 , 2017096
rep ort_errata ERRATA_A710_2083908 , cortex_a710 , 2083908
rep ort_errata ERRATA_A710_2058056 , cortex_a710 , 2058056
rep ort_errata ERRATA_A710_2267065 , cortex_a710 , 2267065
rep ort_errata ERRATA_A710_2136059 , cortex_a710 , 2136059
rep ort_errata ERRATA_A710_2282622 , cortex_a710 , 2282622
rep ort_errata ERRATA_A710_2008768 , cortex_a710 , 2008768
rep ort_errata ERRATA_A710_2147715 , cortex_a710 , 2147715
rep ort_errata ERRATA_A710_2216384 , cortex_a710 , 2216384
rep ort_errata ERRATA_A710_2291219 , cortex_a710 , 2291219
rep ort_errata ERRATA_A710_2371105 , cortex_a710 , 2371105
rep ort_errata ERRATA_A710_2768515 , cortex_a710 , 2768515
rep ort_errata WORKAROUND_CVE_2022_23960 , cortex_a710 , cve_2022_23960
rep ort_errata ERRATA_DSU_2313941 , cortex_a710 , dsu_2313941
ldp x8 , x30 , [ sp ], # 16
ret
endfunc cortex_a710_errata_report
# endif
func cortex_a710_reset_func
mov x19 , x30
cpu_reset_func_start cortex_a710
/ * Disable speculative loads * /
/ * Disable speculative loads * /
msr SSBS , xzr
msr SSBS , xzr
cpu_reset_func_end cortex_a710
bl cpu_get_rev_var
mov x18 , x0
# if ERRATA_DSU_2313941
bl errata_dsu_2313941_wa
# endif
# if ERRATA_A710_1987031
mov x0 , x18
bl errata_a710_1987031_wa
# endif
# if ERRATA_A710_2081180
mov x0 , x18
bl errata_a710_2081180_wa
# endif
# if ERRATA_A710_2055002
mov x0 , x18
bl errata_a710_2055002_wa
# endif
# if ERRATA_A710_2017096
mov x0 , x18
bl errata_a710_2017096_wa
# endif
# if ERRATA_A710_2083908
mov x0 , x18
bl errata_a710_2083908_wa
# endif
# if ERRATA_A710_2058056
mov x0 , x18
bl errata_a710_2058056_wa
# endif
# if ERRATA_A710_2267065
mov x0 , x18
bl errata_a710_2267065_wa
# endif
# if ERRATA_A710_2136059
mov x0 , x18
bl errata_a710_2136059_wa
# endif
# if ERRATA_A710_2147715
mov x0 , x18
bl errata_a710_2147715_wa
# endif
# if ERRATA_A710_2216384
mov x0 , x18
bl errata_a710_2216384_wa
# endif / * ERRATA_A710_2216384 * /
# if ERRATA_A710_2282622
mov x0 , x18
bl errata_a710_2282622_wa
# endif
# if ERRATA_A710_2371105
mov x0 , x18
bl errata_a710_2371105_wa
# endif
# if IMAGE_BL31 & & WORKAROUND_CVE_2022_23960
/ *
* The Cortex-A710 generic vectors are overridden to apply errata
* mitigation on exception entry from lower ELs.
* /
adr x0 , wa_cve_vbar_cortex_a710
msr vbar_el3 , x0
# endif / * IMAGE_BL31 & & WORKAROUND_CVE_2022_23960 * /
isb
ret x19
endfunc cortex_a710_reset_func
/ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* This function provides Cortex-A710 specific
* This function provides Cortex-A710 specific