@ -10,7 +10,50 @@
# include < cpuamu.h >
# include < cpuamu.h >
# include < cpu_macros.S >
# include < cpu_macros.S >
/ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Errata Workaround for Cortex-Ares Errata
* This applies to revision r0p0 and r1p0 of Cortex-Ares.
* Inputs:
* x0: variant [ 4 : 7 ] and revision [ 0 : 3 ] of current cpu.
* Shall clobber : x0-x17
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* /
func errata_ares_1043202_wa
/ * Compare x0 against revision r1p0 * /
mov x17 , x30
bl check_errata_1043202
cbz x0 , 1 f
/ * Apply instruction patching sequence * /
ldr x0 , = 0x0
msr CPUPSELR_EL3 , x0
ldr x0 , = 0xF3BF8F2F
msr CPUPOR_EL3 , x0
ldr x0 , = 0xFFFFFFFF
msr CPUPMR_EL3 , x0
ldr x0 , = 0x800200071
msr CPUPCR_EL3 , x0
isb
1 :
ret x17
endfunc errata_ares_1043202_wa
func check_errata_1043202
/ * Applies to r0p0 and r1p0 * /
mov x1 , # 0x10
b cpu_rev_var_ls
endfunc check_errata_1043202
func cortex_ares_reset_func
func cortex_ares_reset_func
mov x19 , x30
bl cpu_get_rev_var
mov x18 , x0
# if ERRATA_ARES_1043202
mov x0 , x18
bl errata_ares_1043202_wa
# endif
# if ENABLE_AMU
# if ENABLE_AMU
/ * Make sure accesses from EL0 / EL1 and EL2 are not trapped to EL3 * /
/ * Make sure accesses from EL0 / EL1 and EL2 are not trapped to EL3 * /
mrs x0 , actlr_el3
mrs x0 , actlr_el3
@ -29,7 +72,7 @@ func cortex_ares_reset_func
msr CPUAMCNTENSET_EL0 , x0
msr CPUAMCNTENSET_EL0 , x0
isb
isb
# endif
# endif
ret
ret x19
endfunc cortex_ares_reset_func
endfunc cortex_ares_reset_func
/ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -48,6 +91,27 @@ func cortex_ares_core_pwr_dwn
ret
ret
endfunc cortex_ares_core_pwr_dwn
endfunc cortex_ares_core_pwr_dwn
# if REPORT_ERRATA
/ *
* Errata printing function for Cortex-Ares. Must follow AAPCS.
* /
func cortex_a72_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_ARES_1043202 , cortex_ares , 1043202
ldp x8 , x30 , [ sp ], # 16
ret
endfunc cortex_a72_errata_report
# endif
/ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* This function provides cortex_ares specific
* This function provides cortex_ares specific
* register information for crash reporting.
* register information for crash reporting.