On 21/07/17 09:00, Alison Wang wrote:

Hi,

> 855873: An eviction might overtake a cache clean operation
> Workaround: The erratum can be avoided by upgrading cache clean by
> address operations to cache clean and invalidate operations. For
> Cortex-A53 r0p3 and later release, this can be achieved by setting
> CPUACTLR.ENDCCASCI to 1.
> 
> This patch is to implement the workaround for this erratum.
> 
> Signed-off-by: Alison Wang <alison.w...@nxp.com>
> ---
> Changes in v2:
> - Check the revision of Cortex-A53 and apply the erratum to r0p3 and later 
> release.
> - Fix the mistake in the commit description.

Thanks for those fixes, this looks much better now.
One thing below ....

>  arch/arm/Kconfig                          |  3 +++
>  arch/arm/cpu/armv8/fsl-layerscape/Kconfig |  2 ++
>  arch/arm/cpu/armv8/start.S                | 20 +++++++++++++++++++-
>  3 files changed, 24 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
> index d43aaac..4a885a3 100644
> --- a/arch/arm/Kconfig
> +++ b/arch/arm/Kconfig
> @@ -103,6 +103,9 @@ config ARM_ERRATA_852421
>  config ARM_ERRATA_852423
>       bool
>  
> +config ARM_ERRATA_855873
> +     bool
> +
>  config CPU_ARM720T
>       bool
>       select SYS_CACHE_SHIFT_5
> diff --git a/arch/arm/cpu/armv8/fsl-layerscape/Kconfig 
> b/arch/arm/cpu/armv8/fsl-layerscape/Kconfig
> index 5825f9b..63658b5 100644
> --- a/arch/arm/cpu/armv8/fsl-layerscape/Kconfig
> +++ b/arch/arm/cpu/armv8/fsl-layerscape/Kconfig
> @@ -1,6 +1,7 @@
>  config ARCH_LS1012A
>       bool
>       select ARMV8_SET_SMPEN
> +     select ARM_ERRATA_855873
>       select FSL_LSCH2
>       select SYS_FSL_DDR_BE
>       select SYS_FSL_MMDC
> @@ -11,6 +12,7 @@ config ARCH_LS1012A
>  config ARCH_LS1043A
>       bool
>       select ARMV8_SET_SMPEN
> +     select ARM_ERRATA_855873
>       select FSL_LSCH2
>       select SYS_FSL_DDR
>       select SYS_FSL_DDR_BE
> diff --git a/arch/arm/cpu/armv8/start.S b/arch/arm/cpu/armv8/start.S
> index 5c500be..6ca054b 100644
> --- a/arch/arm/cpu/armv8/start.S
> +++ b/arch/arm/cpu/armv8/start.S
> @@ -170,7 +170,10 @@ reset_sctrl:
>  WEAK(apply_core_errata)
>  
>       mov     x29, lr                 /* Save LR */
> -     /* For now, we support Cortex-A57 specific errata only */
> +     /* For now, we support Cortex-A53, Cortex-A57 specific errata */
> +
> +     /* Check if we are running on a Cortex-A53 core */
> +     branch_if_a53_core x0, apply_a53_core_errata
>  
>       /* Check if we are running on a Cortex-A57 core */
>       branch_if_a57_core x0, apply_a57_core_errata
> @@ -178,6 +181,21 @@ WEAK(apply_core_errata)
>       mov     lr, x29                 /* Restore LR */
>       ret
>  
> +apply_a53_core_errata:
> +
> +#ifdef CONFIG_ARM_ERRATA_855873
> +     mrs     x0, midr_el1
> +     and     x0, x0, #0xf
> +     cmp     x0, #3

This only checks for the revision field being 3 (which is correct), but
the condition is really >= r0p3, so you have to check bits 23:20
("variant") as well, by concatenating the two fields to end up comparing
against 0x03. It's a few more instructions only.

The rest of the patch is fine.

Thanks,
Andre.

> +     b.lt    0b
> +
> +     mrs     x0, S3_1_c15_c2_0       /* cpuactlr_el1 */
> +     /* Enable data cache clean as data cache clean/invalidate */
> +     orr     x0, x0, #1 << 44
> +     msr     S3_1_c15_c2_0, x0       /* cpuactlr_el1 */
> +#endif
> +     b 0b
> +
>  apply_a57_core_errata:
>  
>  #ifdef CONFIG_ARM_ERRATA_828024
> 

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to