All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH v2] armv8: errata: Implement workaround for Cortex-A53 Erratum 855873
@ 2017-07-21  8:00 Alison Wang
  2017-07-23 20:20 ` André Przywara
  0 siblings, 1 reply; 3+ messages in thread
From: Alison Wang @ 2017-07-21  8:00 UTC (permalink / raw)
  To: u-boot

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.wang@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.

 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
+	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
-- 
2.1.0.27.g96db324

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [U-Boot] [PATCH v2] armv8: errata: Implement workaround for Cortex-A53 Erratum 855873
  2017-07-21  8:00 [U-Boot] [PATCH v2] armv8: errata: Implement workaround for Cortex-A53 Erratum 855873 Alison Wang
@ 2017-07-23 20:20 ` André Przywara
  2017-07-24  9:24   ` Alison Wang
  0 siblings, 1 reply; 3+ messages in thread
From: André Przywara @ 2017-07-23 20:20 UTC (permalink / raw)
  To: u-boot

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.wang@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
> 

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [U-Boot] [PATCH v2] armv8: errata: Implement workaround for Cortex-A53 Erratum 855873
  2017-07-23 20:20 ` André Przywara
@ 2017-07-24  9:24   ` Alison Wang
  0 siblings, 0 replies; 3+ messages in thread
From: Alison Wang @ 2017-07-24  9:24 UTC (permalink / raw)
  To: u-boot

> 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.wang@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.
> 
[Alison Wang] I have checked Revision >=3. Do you mean to check variant bit[23:20] >= 0 too?

Best Regards,
Alison Wang

> > +	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
> >

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2017-07-24  9:24 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-07-21  8:00 [U-Boot] [PATCH v2] armv8: errata: Implement workaround for Cortex-A53 Erratum 855873 Alison Wang
2017-07-23 20:20 ` André Przywara
2017-07-24  9:24   ` Alison Wang

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.