All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH] omap3: ARM Cortex-A8 errata workarounds config option
@ 2015-02-22 11:36 Paul Kocialkowski
  2015-02-22 12:06 ` Igor Grinberg
  0 siblings, 1 reply; 15+ messages in thread
From: Paul Kocialkowski @ 2015-02-22 11:36 UTC (permalink / raw)
  To: u-boot

Workarounds applied in omap3_setup_aux_cr are only necessary for ARM core
revisions prior to r3p2 (such as OMAP35xx but apparently not OMAP36xx and
DM37xx) and require similar workarounds in the kernel, or it will cause numerous
segmentation faults. This allows (when the option is not used) properly booting
kernels that do not include the workaround.

Follow-up to the discussion from July 2013:
http://lists.denx.de/pipermail/u-boot/2013-July/158377.html

Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
---
 README                             | 8 ++++++++
 arch/arm/cpu/armv7/omap3/board.c   | 2 ++
 include/configs/am3517_crane.h     | 2 ++
 include/configs/am3517_evm.h       | 2 ++
 include/configs/cm_t35.h           | 2 ++
 include/configs/cm_t3517.h         | 2 ++
 include/configs/dig297.h           | 2 ++
 include/configs/mcx.h              | 2 ++
 include/configs/nokia_rx51.h       | 2 ++
 include/configs/omap3_evm_common.h | 2 ++
 include/configs/omap3_logic.h      | 2 ++
 include/configs/omap3_mvblx.h      | 2 ++
 include/configs/omap3_pandora.h    | 2 ++
 include/configs/omap3_sdp3430.h    | 2 ++
 include/configs/omap3_zoom1.h      | 2 ++
 include/configs/tam3517-common.h   | 2 ++
 include/configs/tao3530.h          | 2 ++
 include/configs/ti_omap3_common.h  | 2 ++
 include/configs/tricorder.h        | 2 ++
 19 files changed, 44 insertions(+)

diff --git a/README b/README
index ba57dc5..a39420d 100644
--- a/README
+++ b/README
@@ -621,6 +621,14 @@ The following options need to be configured:
 		exists, unlike the similar options in the Linux kernel. Do not
 		set these options unless they apply!
 
+		CONFIG_SYS_ARM_CORTEXA8_ERRATA
+
+		Enables workarounds for ARM Cortex-A8 errata 454179, 430973
+		and 621766. This is only necessary for ARM core revisions prior
+		to r3p2. Enabling those workarounds requires to enable the same
+		workarounds in the kernel, or it will cause multiple
+		segmentation faults. This is currently only effective on OMAP3.
+
 - Driver Model
 		Driver model is a new framework for devices in U-Boot
 		introduced in early 2014. U-Boot is being progressively
diff --git a/arch/arm/cpu/armv7/omap3/board.c b/arch/arm/cpu/armv7/omap3/board.c
index 90d6ae7..813f35b 100644
--- a/arch/arm/cpu/armv7/omap3/board.c
+++ b/arch/arm/cpu/armv7/omap3/board.c
@@ -246,8 +246,10 @@ void s_init(void)
 
 	try_unlock_memory();
 
+#ifdef CONFIG_SYS_ARM_CORTEXA8_ERRATA
 	/* Errata workarounds */
 	omap3_setup_aux_cr();
+#endif
 
 #ifndef CONFIG_SYS_L2CACHE_OFF
 	/* Invalidate L2-cache from secure mode */
diff --git a/include/configs/am3517_crane.h b/include/configs/am3517_crane.h
index 09ee10c..2b98c8b 100644
--- a/include/configs/am3517_crane.h
+++ b/include/configs/am3517_crane.h
@@ -31,6 +31,8 @@
 #define CONFIG_DISPLAY_CPUINFO		1
 #define CONFIG_DISPLAY_BOARDINFO	1
 
+#define CONFIG_SYS_ARM_CORTEXA8_ERRATA
+
 /* Clock Defines */
 #define V_OSCK			26000000	/* Clock output from T2 */
 #define V_SCLK			(V_OSCK >> 1)
diff --git a/include/configs/am3517_evm.h b/include/configs/am3517_evm.h
index 190ef0e..63dda70 100644
--- a/include/configs/am3517_evm.h
+++ b/include/configs/am3517_evm.h
@@ -31,6 +31,8 @@
 #define CONFIG_DISPLAY_CPUINFO		1
 #define CONFIG_DISPLAY_BOARDINFO	1
 
+#define CONFIG_SYS_ARM_CORTEXA8_ERRATA
+
 /* Clock Defines */
 #define V_OSCK			26000000	/* Clock output from T2 */
 #define V_SCLK			(V_OSCK >> 1)
diff --git a/include/configs/cm_t35.h b/include/configs/cm_t35.h
index b2a9f35..150b419 100644
--- a/include/configs/cm_t35.h
+++ b/include/configs/cm_t35.h
@@ -38,6 +38,8 @@
 #define CONFIG_DISPLAY_CPUINFO
 #define CONFIG_DISPLAY_BOARDINFO
 
+#define CONFIG_SYS_ARM_CORTEXA8_ERRATA
+
 /* Clock Defines */
 #define V_OSCK			26000000	/* Clock output from T2 */
 #define V_SCLK			(V_OSCK >> 1)
diff --git a/include/configs/cm_t3517.h b/include/configs/cm_t3517.h
index 918032b..ff80e12 100644
--- a/include/configs/cm_t3517.h
+++ b/include/configs/cm_t3517.h
@@ -38,6 +38,8 @@
 #define CONFIG_DISPLAY_CPUINFO
 #define CONFIG_DISPLAY_BOARDINFO
 
+#define CONFIG_SYS_ARM_CORTEXA8_ERRATA
+
 /* Clock Defines */
 #define V_OSCK			26000000	/* Clock output from T2 */
 #define V_SCLK			(V_OSCK >> 1)
diff --git a/include/configs/dig297.h b/include/configs/dig297.h
index c8739ed..f396a2e 100644
--- a/include/configs/dig297.h
+++ b/include/configs/dig297.h
@@ -44,6 +44,8 @@
 #define CONFIG_DISPLAY_CPUINFO
 #define CONFIG_DISPLAY_BOARDINFO
 
+#define CONFIG_SYS_ARM_CORTEXA8_ERRATA
+
 /* Clock Defines */
 #define V_OSCK			26000000	/* Clock output from T2 */
 #define V_SCLK			(V_OSCK >> 1)
diff --git a/include/configs/mcx.h b/include/configs/mcx.h
index 26eb220..c353505 100644
--- a/include/configs/mcx.h
+++ b/include/configs/mcx.h
@@ -43,6 +43,8 @@
 #define CONFIG_DISPLAY_CPUINFO
 #define CONFIG_DISPLAY_BOARDINFO
 
+#define CONFIG_SYS_ARM_CORTEXA8_ERRATA
+
 /* Clock Defines */
 #define V_OSCK			26000000	/* Clock output from T2 */
 #define V_SCLK			(V_OSCK >> 1)
diff --git a/include/configs/nokia_rx51.h b/include/configs/nokia_rx51.h
index 46fc91e..8400aa6 100644
--- a/include/configs/nokia_rx51.h
+++ b/include/configs/nokia_rx51.h
@@ -52,6 +52,8 @@
 #define CONFIG_DISPLAY_CPUINFO
 #define CONFIG_DISPLAY_BOARDINFO
 
+#define CONFIG_SYS_ARM_CORTEXA8_ERRATA
+
 /* Clock Defines */
 #define V_OSCK			26000000	/* Clock output from T2 */
 #define V_SCLK			(V_OSCK >> 1)
diff --git a/include/configs/omap3_evm_common.h b/include/configs/omap3_evm_common.h
index 8885e17..edf8f48 100644
--- a/include/configs/omap3_evm_common.h
+++ b/include/configs/omap3_evm_common.h
@@ -21,6 +21,8 @@
 #define CONFIG_OMAP3_EVM		/* This is a OMAP3 EVM */
 #define CONFIG_TWL4030_POWER		/* with TWL4030 PMIC */
 
+#define CONFIG_SYS_ARM_CORTEXA8_ERRATA
+
 /*
  * Clock related definitions
  */
diff --git a/include/configs/omap3_logic.h b/include/configs/omap3_logic.h
index aeb385f..0389e30 100644
--- a/include/configs/omap3_logic.h
+++ b/include/configs/omap3_logic.h
@@ -32,6 +32,8 @@
 #define CONFIG_DISPLAY_CPUINFO
 #define CONFIG_DISPLAY_BOARDINFO
 
+#define CONFIG_SYS_ARM_CORTEXA8_ERRATA
+
 /* Clock Defines */
 #define V_OSCK			26000000	/* Clock output from T2 */
 #define V_SCLK			(V_OSCK >> 1)
diff --git a/include/configs/omap3_mvblx.h b/include/configs/omap3_mvblx.h
index bf1d34d..535943c 100644
--- a/include/configs/omap3_mvblx.h
+++ b/include/configs/omap3_mvblx.h
@@ -35,6 +35,8 @@
 #define CONFIG_DISPLAY_CPUINFO		1
 #define CONFIG_DISPLAY_BOARDINFO	1
 
+#define CONFIG_SYS_ARM_CORTEXA8_ERRATA
+
 /* Clock Defines */
 #define V_OSCK			26000000	/* Clock output from T2 */
 #define V_SCLK			(V_OSCK >> 1)
diff --git a/include/configs/omap3_pandora.h b/include/configs/omap3_pandora.h
index 45feeb5..184d63f 100644
--- a/include/configs/omap3_pandora.h
+++ b/include/configs/omap3_pandora.h
@@ -29,6 +29,8 @@
 #define CONFIG_DISPLAY_CPUINFO		1
 #define CONFIG_DISPLAY_BOARDINFO	1
 
+#define CONFIG_SYS_ARM_CORTEXA8_ERRATA
+
 /* Clock Defines */
 #define V_OSCK			26000000	/* Clock output from T2 */
 #define V_SCLK			(V_OSCK >> 1)
diff --git a/include/configs/omap3_sdp3430.h b/include/configs/omap3_sdp3430.h
index ac307eb..8a7617a 100644
--- a/include/configs/omap3_sdp3430.h
+++ b/include/configs/omap3_sdp3430.h
@@ -41,6 +41,8 @@
 #define CONFIG_DISPLAY_CPUINFO		1
 #define CONFIG_DISPLAY_BOARDINFO	1
 
+#define CONFIG_SYS_ARM_CORTEXA8_ERRATA
+
 /* Clock Defines */
 #define V_OSCK			26000000	/* Clock output from T2 */
 #define V_SCLK			(V_OSCK >> 1)
diff --git a/include/configs/omap3_zoom1.h b/include/configs/omap3_zoom1.h
index c5d742c..0b0016e 100644
--- a/include/configs/omap3_zoom1.h
+++ b/include/configs/omap3_zoom1.h
@@ -38,6 +38,8 @@
 #define CONFIG_DISPLAY_CPUINFO		1
 #define CONFIG_DISPLAY_BOARDINFO	1
 
+#define CONFIG_SYS_ARM_CORTEXA8_ERRATA
+
 #define CONFIG_MISC_INIT_R
 
 #define CONFIG_REVISION_TAG		1
diff --git a/include/configs/tam3517-common.h b/include/configs/tam3517-common.h
index 9fbe68a..7ade643 100644
--- a/include/configs/tam3517-common.h
+++ b/include/configs/tam3517-common.h
@@ -33,6 +33,8 @@
 #define CONFIG_DISPLAY_CPUINFO
 #define CONFIG_DISPLAY_BOARDINFO
 
+#define CONFIG_SYS_ARM_CORTEXA8_ERRATA
+
 /* Clock Defines */
 #define V_OSCK			26000000	/* Clock output from T2 */
 #define V_SCLK			(V_OSCK >> 1)
diff --git a/include/configs/tao3530.h b/include/configs/tao3530.h
index 7d2c0d2..9d123b1 100644
--- a/include/configs/tao3530.h
+++ b/include/configs/tao3530.h
@@ -35,6 +35,8 @@
 #define CONFIG_DISPLAY_CPUINFO
 #define CONFIG_DISPLAY_BOARDINFO
 
+#define CONFIG_SYS_ARM_CORTEXA8_ERRATA
+
 /* Clock Defines */
 #define V_OSCK			26000000	/* Clock output from T2 */
 #define V_SCLK			(V_OSCK >> 1)
diff --git a/include/configs/ti_omap3_common.h b/include/configs/ti_omap3_common.h
index 840e108..0b06593 100644
--- a/include/configs/ti_omap3_common.h
+++ b/include/configs/ti_omap3_common.h
@@ -25,6 +25,8 @@
 /* The chip has SDRC controller */
 #define CONFIG_SDRC
 
+#define CONFIG_SYS_ARM_CORTEXA8_ERRATA
+
 /* Clock Defines */
 #define V_OSCK			26000000	/* Clock output from T2 */
 #define V_SCLK			(V_OSCK >> 1)
diff --git a/include/configs/tricorder.h b/include/configs/tricorder.h
index 36621a5..f1f1ae8 100644
--- a/include/configs/tricorder.h
+++ b/include/configs/tricorder.h
@@ -43,6 +43,8 @@
 #define CONFIG_SILENT_CONSOLE
 #define CONFIG_ZERO_BOOTDELAY_CHECK
 
+#define CONFIG_SYS_ARM_CORTEXA8_ERRATA
+
 /* Clock Defines */
 #define V_OSCK				26000000 /* Clock output from T2 */
 #define V_SCLK				(V_OSCK >> 1)
-- 
1.9.1

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

* [U-Boot] [PATCH] omap3: ARM Cortex-A8 errata workarounds config option
  2015-02-22 11:36 [U-Boot] [PATCH] omap3: ARM Cortex-A8 errata workarounds config option Paul Kocialkowski
@ 2015-02-22 12:06 ` Igor Grinberg
  2015-02-22 15:45   ` Paul Kocialkowski
  0 siblings, 1 reply; 15+ messages in thread
From: Igor Grinberg @ 2015-02-22 12:06 UTC (permalink / raw)
  To: u-boot

Hi Paul,

On 02/22/15 13:36, Paul Kocialkowski wrote:
> Workarounds applied in omap3_setup_aux_cr are only necessary for ARM core
> revisions prior to r3p2 (such as OMAP35xx but apparently not OMAP36xx and
> DM37xx)

If this is true, I can see some (potential) problems with the patch.
Please, check out my thoughts on this below.

> and require similar workarounds in the kernel, or it will cause numerous
> segmentation faults. This allows (when the option is not used) properly booting
> kernels that do not include the workaround.
> 
> Follow-up to the discussion from July 2013:
> http://lists.denx.de/pipermail/u-boot/2013-July/158377.html
> 
> Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
> ---
>  README                             | 8 ++++++++
>  arch/arm/cpu/armv7/omap3/board.c   | 2 ++
>  include/configs/am3517_crane.h     | 2 ++
>  include/configs/am3517_evm.h       | 2 ++
>  include/configs/cm_t35.h           | 2 ++
>  include/configs/cm_t3517.h         | 2 ++
>  include/configs/dig297.h           | 2 ++
>  include/configs/mcx.h              | 2 ++
>  include/configs/nokia_rx51.h       | 2 ++
>  include/configs/omap3_evm_common.h | 2 ++
>  include/configs/omap3_logic.h      | 2 ++
>  include/configs/omap3_mvblx.h      | 2 ++
>  include/configs/omap3_pandora.h    | 2 ++
>  include/configs/omap3_sdp3430.h    | 2 ++
>  include/configs/omap3_zoom1.h      | 2 ++
>  include/configs/tam3517-common.h   | 2 ++
>  include/configs/tao3530.h          | 2 ++
>  include/configs/ti_omap3_common.h  | 2 ++
>  include/configs/tricorder.h        | 2 ++
>  19 files changed, 44 insertions(+)
> 
> diff --git a/README b/README
> index ba57dc5..a39420d 100644
> --- a/README
> +++ b/README
> @@ -621,6 +621,14 @@ The following options need to be configured:
>  		exists, unlike the similar options in the Linux kernel. Do not
>  		set these options unless they apply!
>  
> +		CONFIG_SYS_ARM_CORTEXA8_ERRATA
> +
> +		Enables workarounds for ARM Cortex-A8 errata 454179, 430973
> +		and 621766. This is only necessary for ARM core revisions prior
> +		to r3p2. Enabling those workarounds requires to enable the same
> +		workarounds in the kernel, or it will cause multiple
> +		segmentation faults. This is currently only effective on OMAP3.
> +
>  - Driver Model
>  		Driver model is a new framework for devices in U-Boot
>  		introduced in early 2014. U-Boot is being progressively
> diff --git a/arch/arm/cpu/armv7/omap3/board.c b/arch/arm/cpu/armv7/omap3/board.c
> index 90d6ae7..813f35b 100644
> --- a/arch/arm/cpu/armv7/omap3/board.c
> +++ b/arch/arm/cpu/armv7/omap3/board.c
> @@ -246,8 +246,10 @@ void s_init(void)
>  
>  	try_unlock_memory();
>  
> +#ifdef CONFIG_SYS_ARM_CORTEXA8_ERRATA
>  	/* Errata workarounds */
>  	omap3_setup_aux_cr();

Can we have the revision dynamically checked instead of/along with
introducing a config option?
We have boards, OMAP3 based, which are supported by the same board file
and the same config file, see below.

> +#endif
>  
>  #ifndef CONFIG_SYS_L2CACHE_OFF
>  	/* Invalidate L2-cache from secure mode */

[...]

> diff --git a/include/configs/cm_t35.h b/include/configs/cm_t35.h
> index b2a9f35..150b419 100644
> --- a/include/configs/cm_t35.h
> +++ b/include/configs/cm_t35.h
> @@ -38,6 +38,8 @@
>  #define CONFIG_DISPLAY_CPUINFO
>  #define CONFIG_DISPLAY_BOARDINFO
>  
> +#define CONFIG_SYS_ARM_CORTEXA8_ERRATA

This config file is used for both cm-t35 and cm-t3730.
cm-t35 has OMAP3530, but cm-t3730 has DM3730. 
The same U-Boot binary is used for both boards.

> +
>  /* Clock Defines */
>  #define V_OSCK			26000000	/* Clock output from T2 */
>  #define V_SCLK			(V_OSCK >> 1)

[...]

-- 
Regards,
Igor.

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

* [U-Boot] [PATCH] omap3: ARM Cortex-A8 errata workarounds config option
  2015-02-22 12:06 ` Igor Grinberg
@ 2015-02-22 15:45   ` Paul Kocialkowski
  2015-02-22 15:55     ` Paul Kocialkowski
  2015-02-22 16:02     ` Paul Kocialkowski
  0 siblings, 2 replies; 15+ messages in thread
From: Paul Kocialkowski @ 2015-02-22 15:45 UTC (permalink / raw)
  To: u-boot

> > Workarounds applied in omap3_setup_aux_cr are only necessary for ARM core
> > revisions prior to r3p2 (such as OMAP35xx but apparently not OMAP36xx and
> > DM37xx)
> 
> If this is true, I can see some (potential) problems with the patch.
> Please, check out my thoughts on this below.

In any case, those workarounds were already enabled before, so it won't
cause any regression. As it is now, the patch doesn't change anything,
it just opens up the possibility of not using
CONFIG_SYS_ARM_CORTEXA8_ERRATA for a board that doesn't need the
workarounds and has them disabled in the kernel.

> > and require similar workarounds in the kernel, or it will cause numerous
> > segmentation faults. This allows (when the option is not used) properly booting
> > kernels that do not include the workaround.
> > 
> > Follow-up to the discussion from July 2013:
> > http://lists.denx.de/pipermail/u-boot/2013-July/158377.html
> > 
> > Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
> > ---
> >  README                             | 8 ++++++++
> >  arch/arm/cpu/armv7/omap3/board.c   | 2 ++
> >  include/configs/am3517_crane.h     | 2 ++
> >  include/configs/am3517_evm.h       | 2 ++
> >  include/configs/cm_t35.h           | 2 ++
> >  include/configs/cm_t3517.h         | 2 ++
> >  include/configs/dig297.h           | 2 ++
> >  include/configs/mcx.h              | 2 ++
> >  include/configs/nokia_rx51.h       | 2 ++
> >  include/configs/omap3_evm_common.h | 2 ++
> >  include/configs/omap3_logic.h      | 2 ++
> >  include/configs/omap3_mvblx.h      | 2 ++
> >  include/configs/omap3_pandora.h    | 2 ++
> >  include/configs/omap3_sdp3430.h    | 2 ++
> >  include/configs/omap3_zoom1.h      | 2 ++
> >  include/configs/tam3517-common.h   | 2 ++
> >  include/configs/tao3530.h          | 2 ++
> >  include/configs/ti_omap3_common.h  | 2 ++
> >  include/configs/tricorder.h        | 2 ++
> >  19 files changed, 44 insertions(+)
> > 
> > diff --git a/README b/README
> > index ba57dc5..a39420d 100644
> > --- a/README
> > +++ b/README
> > @@ -621,6 +621,14 @@ The following options need to be configured:
> >  		exists, unlike the similar options in the Linux kernel. Do not
> >  		set these options unless they apply!
> >  
> > +		CONFIG_SYS_ARM_CORTEXA8_ERRATA
> > +
> > +		Enables workarounds for ARM Cortex-A8 errata 454179, 430973
> > +		and 621766. This is only necessary for ARM core revisions prior
> > +		to r3p2. Enabling those workarounds requires to enable the same
> > +		workarounds in the kernel, or it will cause multiple
> > +		segmentation faults. This is currently only effective on OMAP3.
> > +
> >  - Driver Model
> >  		Driver model is a new framework for devices in U-Boot
> >  		introduced in early 2014. U-Boot is being progressively
> > diff --git a/arch/arm/cpu/armv7/omap3/board.c b/arch/arm/cpu/armv7/omap3/board.c
> > index 90d6ae7..813f35b 100644
> > --- a/arch/arm/cpu/armv7/omap3/board.c
> > +++ b/arch/arm/cpu/armv7/omap3/board.c
> > @@ -246,8 +246,10 @@ void s_init(void)
> >  
> >  	try_unlock_memory();
> >  
> > +#ifdef CONFIG_SYS_ARM_CORTEXA8_ERRATA
> >  	/* Errata workarounds */
> >  	omap3_setup_aux_cr();
> 
> Can we have the revision dynamically checked instead of/along with
> introducing a config option?
> We have boards, OMAP3 based, which are supported by the same board file
> and the same config file, see below.

After carefully looking at it, I think dynamically checking the revision
might be the cleanest way to do this.

I was afraid that, in the case where the workarounds are disabled in
u-boot but enabled in Linux, the same various segmentation faults would
happen, but they apparently don't, as I just tested.

Thus, checking the revision should work best. According to the code in
Linux, this only affects r1p* ARM core revisions, so that's what I'll be
checking against.

Thanks for your comments!

> > +#endif
> >  
> >  #ifndef CONFIG_SYS_L2CACHE_OFF
> >  	/* Invalidate L2-cache from secure mode */
> 
> [...]
> 
> > diff --git a/include/configs/cm_t35.h b/include/configs/cm_t35.h
> > index b2a9f35..150b419 100644
> > --- a/include/configs/cm_t35.h
> > +++ b/include/configs/cm_t35.h
> > @@ -38,6 +38,8 @@
> >  #define CONFIG_DISPLAY_CPUINFO
> >  #define CONFIG_DISPLAY_BOARDINFO
> >  
> > +#define CONFIG_SYS_ARM_CORTEXA8_ERRATA
> 
> This config file is used for both cm-t35 and cm-t3730.
> cm-t35 has OMAP3530, but cm-t3730 has DM3730. 
> The same U-Boot binary is used for both boards.
> 
> > +
> >  /* Clock Defines */
> >  #define V_OSCK			26000000	/* Clock output from T2 */
> >  #define V_SCLK			(V_OSCK >> 1)
> 
> [...]
> 

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20150222/4a3247fc/attachment.sig>

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

* [U-Boot] [PATCH] omap3: ARM Cortex-A8 errata workarounds config option
  2015-02-22 15:45   ` Paul Kocialkowski
@ 2015-02-22 15:55     ` Paul Kocialkowski
  2015-02-22 16:02     ` Paul Kocialkowski
  1 sibling, 0 replies; 15+ messages in thread
From: Paul Kocialkowski @ 2015-02-22 15:55 UTC (permalink / raw)
  To: u-boot

Le dimanche 22 f?vrier 2015 ? 16:45 +0100, Paul Kocialkowski a ?crit :
> > > Workarounds applied in omap3_setup_aux_cr are only necessary for ARM core
> > > revisions prior to r3p2 (such as OMAP35xx but apparently not OMAP36xx and
> > > DM37xx)
> > 
> > If this is true, I can see some (potential) problems with the patch.
> > Please, check out my thoughts on this below.
> 
> In any case, those workarounds were already enabled before, so it won't
> cause any regression. As it is now, the patch doesn't change anything,
> it just opens up the possibility of not using
> CONFIG_SYS_ARM_CORTEXA8_ERRATA for a board that doesn't need the
> workarounds and has them disabled in the kernel.
> 
> > > and require similar workarounds in the kernel, or it will cause numerous
> > > segmentation faults. This allows (when the option is not used) properly booting
> > > kernels that do not include the workaround.
> > > 
> > > Follow-up to the discussion from July 2013:
> > > http://lists.denx.de/pipermail/u-boot/2013-July/158377.html
> > > 
> > > Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
> > > ---
> > >  README                             | 8 ++++++++
> > >  arch/arm/cpu/armv7/omap3/board.c   | 2 ++
> > >  include/configs/am3517_crane.h     | 2 ++
> > >  include/configs/am3517_evm.h       | 2 ++
> > >  include/configs/cm_t35.h           | 2 ++
> > >  include/configs/cm_t3517.h         | 2 ++
> > >  include/configs/dig297.h           | 2 ++
> > >  include/configs/mcx.h              | 2 ++
> > >  include/configs/nokia_rx51.h       | 2 ++
> > >  include/configs/omap3_evm_common.h | 2 ++
> > >  include/configs/omap3_logic.h      | 2 ++
> > >  include/configs/omap3_mvblx.h      | 2 ++
> > >  include/configs/omap3_pandora.h    | 2 ++
> > >  include/configs/omap3_sdp3430.h    | 2 ++
> > >  include/configs/omap3_zoom1.h      | 2 ++
> > >  include/configs/tam3517-common.h   | 2 ++
> > >  include/configs/tao3530.h          | 2 ++
> > >  include/configs/ti_omap3_common.h  | 2 ++
> > >  include/configs/tricorder.h        | 2 ++
> > >  19 files changed, 44 insertions(+)
> > > 
> > > diff --git a/README b/README
> > > index ba57dc5..a39420d 100644
> > > --- a/README
> > > +++ b/README
> > > @@ -621,6 +621,14 @@ The following options need to be configured:
> > >  		exists, unlike the similar options in the Linux kernel. Do not
> > >  		set these options unless they apply!
> > >  
> > > +		CONFIG_SYS_ARM_CORTEXA8_ERRATA
> > > +
> > > +		Enables workarounds for ARM Cortex-A8 errata 454179, 430973
> > > +		and 621766. This is only necessary for ARM core revisions prior
> > > +		to r3p2. Enabling those workarounds requires to enable the same
> > > +		workarounds in the kernel, or it will cause multiple
> > > +		segmentation faults. This is currently only effective on OMAP3.
> > > +
> > >  - Driver Model
> > >  		Driver model is a new framework for devices in U-Boot
> > >  		introduced in early 2014. U-Boot is being progressively
> > > diff --git a/arch/arm/cpu/armv7/omap3/board.c b/arch/arm/cpu/armv7/omap3/board.c
> > > index 90d6ae7..813f35b 100644
> > > --- a/arch/arm/cpu/armv7/omap3/board.c
> > > +++ b/arch/arm/cpu/armv7/omap3/board.c
> > > @@ -246,8 +246,10 @@ void s_init(void)
> > >  
> > >  	try_unlock_memory();
> > >  
> > > +#ifdef CONFIG_SYS_ARM_CORTEXA8_ERRATA
> > >  	/* Errata workarounds */
> > >  	omap3_setup_aux_cr();
> > 
> > Can we have the revision dynamically checked instead of/along with
> > introducing a config option?
> > We have boards, OMAP3 based, which are supported by the same board file
> > and the same config file, see below.
> 
> After carefully looking at it, I think dynamically checking the revision
> might be the cleanest way to do this.
> 
> I was afraid that, in the case where the workarounds are disabled in
> u-boot but enabled in Linux, the same various segmentation faults would
> happen, but they apparently don't, as I just tested.
> 
> Thus, checking the revision should work best. According to the code in
> Linux, this only affects r1p* ARM core revisions, so that's what I'll be
> checking against.

Looking at the Linux code more closely, it shows that erratum 430973
only affects r1p* and erratum 458693 only affects r2p0.

Now in U-Boot, everything is mixed together and while erratum 458693 is
not mentionned, it does set the L1NEON bit to 1 like the workaround for
erratum 458693 does in Linux.

What do you think I should do here? Follow the Linux way (split it up)
or settle on applying both things for revisions <= r2p0.

> Thanks for your comments!
> 
> > > +#endif
> > >  
> > >  #ifndef CONFIG_SYS_L2CACHE_OFF
> > >  	/* Invalidate L2-cache from secure mode */
> > 
> > [...]
> > 
> > > diff --git a/include/configs/cm_t35.h b/include/configs/cm_t35.h
> > > index b2a9f35..150b419 100644
> > > --- a/include/configs/cm_t35.h
> > > +++ b/include/configs/cm_t35.h
> > > @@ -38,6 +38,8 @@
> > >  #define CONFIG_DISPLAY_CPUINFO
> > >  #define CONFIG_DISPLAY_BOARDINFO
> > >  
> > > +#define CONFIG_SYS_ARM_CORTEXA8_ERRATA
> > 
> > This config file is used for both cm-t35 and cm-t3730.
> > cm-t35 has OMAP3530, but cm-t3730 has DM3730. 
> > The same U-Boot binary is used for both boards.
> > 
> > > +
> > >  /* Clock Defines */
> > >  #define V_OSCK			26000000	/* Clock output from T2 */
> > >  #define V_SCLK			(V_OSCK >> 1)
> > 
> > [...]
> > 
> 
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20150222/5a781468/attachment.sig>

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

* [U-Boot] [PATCH] omap3: ARM Cortex-A8 errata workarounds config option
  2015-02-22 15:45   ` Paul Kocialkowski
  2015-02-22 15:55     ` Paul Kocialkowski
@ 2015-02-22 16:02     ` Paul Kocialkowski
  2015-02-22 16:42       ` [U-Boot] [PATCH v2] omap3: Variant and revision checks for ARM Cortex-A8 errata workarounds Paul Kocialkowski
  1 sibling, 1 reply; 15+ messages in thread
From: Paul Kocialkowski @ 2015-02-22 16:02 UTC (permalink / raw)
  To: u-boot

Le dimanche 22 f?vrier 2015 ? 16:45 +0100, Paul Kocialkowski a ?crit :
> > > Workarounds applied in omap3_setup_aux_cr are only necessary for ARM core
> > > revisions prior to r3p2 (such as OMAP35xx but apparently not OMAP36xx and
> > > DM37xx)
> > 
> > If this is true, I can see some (potential) problems with the patch.
> > Please, check out my thoughts on this below.
> 
> In any case, those workarounds were already enabled before, so it won't
> cause any regression. As it is now, the patch doesn't change anything,
> it just opens up the possibility of not using
> CONFIG_SYS_ARM_CORTEXA8_ERRATA for a board that doesn't need the
> workarounds and has them disabled in the kernel.
> 
> > > and require similar workarounds in the kernel, or it will cause numerous
> > > segmentation faults. This allows (when the option is not used) properly booting
> > > kernels that do not include the workaround.
> > > 
> > > Follow-up to the discussion from July 2013:
> > > http://lists.denx.de/pipermail/u-boot/2013-July/158377.html
> > > 
> > > Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
> > > ---
> > >  README                             | 8 ++++++++
> > >  arch/arm/cpu/armv7/omap3/board.c   | 2 ++
> > >  include/configs/am3517_crane.h     | 2 ++
> > >  include/configs/am3517_evm.h       | 2 ++
> > >  include/configs/cm_t35.h           | 2 ++
> > >  include/configs/cm_t3517.h         | 2 ++
> > >  include/configs/dig297.h           | 2 ++
> > >  include/configs/mcx.h              | 2 ++
> > >  include/configs/nokia_rx51.h       | 2 ++
> > >  include/configs/omap3_evm_common.h | 2 ++
> > >  include/configs/omap3_logic.h      | 2 ++
> > >  include/configs/omap3_mvblx.h      | 2 ++
> > >  include/configs/omap3_pandora.h    | 2 ++
> > >  include/configs/omap3_sdp3430.h    | 2 ++
> > >  include/configs/omap3_zoom1.h      | 2 ++
> > >  include/configs/tam3517-common.h   | 2 ++
> > >  include/configs/tao3530.h          | 2 ++
> > >  include/configs/ti_omap3_common.h  | 2 ++
> > >  include/configs/tricorder.h        | 2 ++
> > >  19 files changed, 44 insertions(+)
> > > 
> > > diff --git a/README b/README
> > > index ba57dc5..a39420d 100644
> > > --- a/README
> > > +++ b/README
> > > @@ -621,6 +621,14 @@ The following options need to be configured:
> > >  		exists, unlike the similar options in the Linux kernel. Do not
> > >  		set these options unless they apply!
> > >  
> > > +		CONFIG_SYS_ARM_CORTEXA8_ERRATA
> > > +
> > > +		Enables workarounds for ARM Cortex-A8 errata 454179, 430973
> > > +		and 621766. This is only necessary for ARM core revisions prior
> > > +		to r3p2. Enabling those workarounds requires to enable the same
> > > +		workarounds in the kernel, or it will cause multiple
> > > +		segmentation faults. This is currently only effective on OMAP3.
> > > +
> > >  - Driver Model
> > >  		Driver model is a new framework for devices in U-Boot
> > >  		introduced in early 2014. U-Boot is being progressively
> > > diff --git a/arch/arm/cpu/armv7/omap3/board.c b/arch/arm/cpu/armv7/omap3/board.c
> > > index 90d6ae7..813f35b 100644
> > > --- a/arch/arm/cpu/armv7/omap3/board.c
> > > +++ b/arch/arm/cpu/armv7/omap3/board.c
> > > @@ -246,8 +246,10 @@ void s_init(void)
> > >  
> > >  	try_unlock_memory();
> > >  
> > > +#ifdef CONFIG_SYS_ARM_CORTEXA8_ERRATA
> > >  	/* Errata workarounds */
> > >  	omap3_setup_aux_cr();
> > 
> > Can we have the revision dynamically checked instead of/along with
> > introducing a config option?
> > We have boards, OMAP3 based, which are supported by the same board file
> > and the same config file, see below.
> 
> After carefully looking at it, I think dynamically checking the revision
> might be the cleanest way to do this.
> 
> I was afraid that, in the case where the workarounds are disabled in
> u-boot but enabled in Linux, the same various segmentation faults would
> happen, but they apparently don't, as I just tested.
> 
> Thus, checking the revision should work best. According to the code in
> Linux, this only affects r1p* ARM core revisions, so that's what I'll be
> checking against.

Looking at the Linux code more closely, it shows that erratum 430973
only affects r1p* and erratum 458693 only affects r2p0.

Now in U-Boot, everything is mixed together and while erratum 458693 is
not mentionned, it does set the L1NEON bit to 1 like the workaround for
erratum 458693 does in Linux.

What do you think I should do here? Follow the Linux way (split it up)
or settle on applying both things for revisions <= r2p0.

> Thanks for your comments!
> 
> > > +#endif
> > >  
> > >  #ifndef CONFIG_SYS_L2CACHE_OFF
> > >  	/* Invalidate L2-cache from secure mode */
> > 
> > [...]
> > 
> > > diff --git a/include/configs/cm_t35.h b/include/configs/cm_t35.h
> > > index b2a9f35..150b419 100644
> > > --- a/include/configs/cm_t35.h
> > > +++ b/include/configs/cm_t35.h
> > > @@ -38,6 +38,8 @@
> > >  #define CONFIG_DISPLAY_CPUINFO
> > >  #define CONFIG_DISPLAY_BOARDINFO
> > >  
> > > +#define CONFIG_SYS_ARM_CORTEXA8_ERRATA
> > 
> > This config file is used for both cm-t35 and cm-t3730.
> > cm-t35 has OMAP3530, but cm-t3730 has DM3730. 
> > The same U-Boot binary is used for both boards.
> > 
> > > +
> > >  /* Clock Defines */
> > >  #define V_OSCK			26000000	/* Clock output from T2 */
> > >  #define V_SCLK			(V_OSCK >> 1)
> > 
> > [...]
> > 
> 
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20150222/1572486e/attachment.sig>

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

* [U-Boot] [PATCH v2] omap3: Variant and revision checks for ARM Cortex-A8 errata workarounds
  2015-02-22 16:02     ` Paul Kocialkowski
@ 2015-02-22 16:42       ` Paul Kocialkowski
  2015-02-23 11:09         ` Igor Grinberg
  0 siblings, 1 reply; 15+ messages in thread
From: Paul Kocialkowski @ 2015-02-22 16:42 UTC (permalink / raw)
  To: u-boot

Not every version and revision of the Cortex-A8 ARM core requires the same
errata workarounds. In addition, enabling those requires to have similar
workarounds enabled in the kernel or it will cause numerous segmentation faults.

This enables those workarounds when they are needed, according to what is done
in Linux.

Follow-up to the discussion from July 2013:
http://lists.denx.de/pipermail/u-boot/2013-July/158377.html
---
 arch/arm/cpu/armv7/omap3/board.c | 27 +++++++++++++++++++++------
 1 file changed, 21 insertions(+), 6 deletions(-)

diff --git a/arch/arm/cpu/armv7/omap3/board.c b/arch/arm/cpu/armv7/omap3/board.c
index 90d6ae7..a87dd2a 100644
--- a/arch/arm/cpu/armv7/omap3/board.c
+++ b/arch/arm/cpu/armv7/omap3/board.c
@@ -431,14 +431,29 @@ static void omap3_update_aux_cr_secure(u32 set_bits, u32 clear_bits)
 
 static void omap3_setup_aux_cr(void)
 {
-	/* Workaround for Cortex-A8 errata: #454179 #430973
-	 *	Set "IBE" bit
-	 *	Set "Disable Branch Size Mispredicts" bit
-	 * Workaround for erratum #621766
+	u32 id, revision, variant;
+	u32 bits = 0;
+
+	asm volatile ("mrc p15, 0, %0, c0, c0, 0" : "=r" (id));
+
+	variant = (id & 0xf00000) >> 20;
+	revision = id & 0x0f;
+
+	/* Workaround for Cortex-A8 erratum: #454179 #430973
+	 *	Set IBE bit
+	 *	Set Disable Branch Size Mispredicts (DBSM) bit
+	 */
+	if (variant < 2)
+		bits |= (1 << 6) | (1 << 7);
+
+	/* Workaround for Cortex-A8 erratum #621766
 	 *	Enable L1NEON bit
-	 * ACR |= (IBE | DBSM | L1NEON) => ACR |= 0xE0
 	 */
-	omap3_update_aux_cr_secure(0xE0, 0);
+	if (variant == 2 && revision == 0)
+		bits |= (1 << 5);
+
+	if (bits != 0)
+		omap3_update_aux_cr_secure(bits, 0);
 }
 
 #ifndef CONFIG_SYS_L2CACHE_OFF
-- 
1.9.1

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

* [U-Boot] [PATCH v2] omap3: Variant and revision checks for ARM Cortex-A8 errata workarounds
  2015-02-22 16:42       ` [U-Boot] [PATCH v2] omap3: Variant and revision checks for ARM Cortex-A8 errata workarounds Paul Kocialkowski
@ 2015-02-23 11:09         ` Igor Grinberg
  2015-02-23 15:07           ` Paul Kocialkowski
  0 siblings, 1 reply; 15+ messages in thread
From: Igor Grinberg @ 2015-02-23 11:09 UTC (permalink / raw)
  To: u-boot

Hi Paul,

On 02/22/15 18:42, Paul Kocialkowski wrote:
> Not every version and revision of the Cortex-A8 ARM core requires the same
> errata workarounds. In addition, enabling those requires to have similar
> workarounds enabled in the kernel or it will cause numerous segmentation faults.
> 
> This enables those workarounds when they are needed, according to what is done
> in Linux.

Conceptually, I'm fine with the patch, but I did not look down into the
erratas and how it should be handled...

> 
> Follow-up to the discussion from July 2013:
> http://lists.denx.de/pipermail/u-boot/2013-July/158377.html

You've missed the s-o-b.

> ---
>  arch/arm/cpu/armv7/omap3/board.c | 27 +++++++++++++++++++++------
>  1 file changed, 21 insertions(+), 6 deletions(-)
> 
> diff --git a/arch/arm/cpu/armv7/omap3/board.c b/arch/arm/cpu/armv7/omap3/board.c
> index 90d6ae7..a87dd2a 100644
> --- a/arch/arm/cpu/armv7/omap3/board.c
> +++ b/arch/arm/cpu/armv7/omap3/board.c
> @@ -431,14 +431,29 @@ static void omap3_update_aux_cr_secure(u32 set_bits, u32 clear_bits)
>  
>  static void omap3_setup_aux_cr(void)
>  {
> -	/* Workaround for Cortex-A8 errata: #454179 #430973
> -	 *	Set "IBE" bit
> -	 *	Set "Disable Branch Size Mispredicts" bit
> -	 * Workaround for erratum #621766
> +	u32 id, revision, variant;
> +	u32 bits = 0;
> +
> +	asm volatile ("mrc p15, 0, %0, c0, c0, 0" : "=r" (id));
> +
> +	variant = (id & 0xf00000) >> 20;
> +	revision = id & 0x0f;
> +
> +	/* Workaround for Cortex-A8 erratum: #454179 #430973

While on this, I would also fix the multi-line comment...

> +	 *	Set IBE bit
> +	 *	Set Disable Branch Size Mispredicts (DBSM) bit
> +	 */
> +	if (variant < 2)
> +		bits |= (1 << 6) | (1 << 7);
> +
> +	/* Workaround for Cortex-A8 erratum #621766

Also here.

>  	 *	Enable L1NEON bit
> -	 * ACR |= (IBE | DBSM | L1NEON) => ACR |= 0xE0
>  	 */
> -	omap3_update_aux_cr_secure(0xE0, 0);
> +	if (variant == 2 && revision == 0)
> +		bits |= (1 << 5);
> +
> +	if (bits != 0)
> +		omap3_update_aux_cr_secure(bits, 0);
>  }
>  
>  #ifndef CONFIG_SYS_L2CACHE_OFF
> 

-- 
Regards,
Igor.

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

* [U-Boot] [PATCH v2] omap3: Variant and revision checks for ARM Cortex-A8 errata workarounds
  2015-02-23 11:09         ` Igor Grinberg
@ 2015-02-23 15:07           ` Paul Kocialkowski
  2015-02-23 19:16             ` [U-Boot] [PATCH] " Paul Kocialkowski
  0 siblings, 1 reply; 15+ messages in thread
From: Paul Kocialkowski @ 2015-02-23 15:07 UTC (permalink / raw)
  To: u-boot

Le lundi 23 f?vrier 2015 ? 13:09 +0200, Igor Grinberg a ?crit :
> Hi Paul,
> 
> On 02/22/15 18:42, Paul Kocialkowski wrote:
> > Not every version and revision of the Cortex-A8 ARM core requires the same
> > errata workarounds. In addition, enabling those requires to have similar
> > workarounds enabled in the kernel or it will cause numerous segmentation faults.
> > 
> > This enables those workarounds when they are needed, according to what is done
> > in Linux.
> 
> Conceptually, I'm fine with the patch, but I did not look down into the
> erratas and how it should be handled...

I was only able to find information about erratum 430973 which according
to the kernel sources only affects r1p* (arch/arm/mm/proc-v7.S) but
nothing regarding 454179 (disable branch size mispredicts) and 621766.

However, for 621766, the same L1NEON bit is set in the workaround for
erratum 458693 as found on the kernel tree (arch/arm/mm/proc-v7.S) which
is said to only affect r2p0.

It seems like information about those errata is not really accessible to
the public, or I just couldn't find it.

I would appreciate it if someone could test this on an omap35xx board
(supposedly with an ARM core id different than mine) just to check that
it's running fine.

Then again, I did not change the workarounds for these errata (with
regard to the code currently in U-Boot), only excluded cases were they
should not be necessary. The reason why these workarounds are necessary
is out of the scope of this patch.
 
> > Follow-up to the discussion from July 2013:
> > http://lists.denx.de/pipermail/u-boot/2013-July/158377.html
> 
> You've missed the s-o-b.

I will make a v3 anyways.

> > ---
> >  arch/arm/cpu/armv7/omap3/board.c | 27 +++++++++++++++++++++------
> >  1 file changed, 21 insertions(+), 6 deletions(-)
> > 
> > diff --git a/arch/arm/cpu/armv7/omap3/board.c b/arch/arm/cpu/armv7/omap3/board.c
> > index 90d6ae7..a87dd2a 100644
> > --- a/arch/arm/cpu/armv7/omap3/board.c
> > +++ b/arch/arm/cpu/armv7/omap3/board.c
> > @@ -431,14 +431,29 @@ static void omap3_update_aux_cr_secure(u32 set_bits, u32 clear_bits)
> >  
> >  static void omap3_setup_aux_cr(void)
> >  {
> > -	/* Workaround for Cortex-A8 errata: #454179 #430973
> > -	 *	Set "IBE" bit
> > -	 *	Set "Disable Branch Size Mispredicts" bit
> > -	 * Workaround for erratum #621766
> > +	u32 id, revision, variant;
> > +	u32 bits = 0;
> > +
> > +	asm volatile ("mrc p15, 0, %0, c0, c0, 0" : "=r" (id));
> > +
> > +	variant = (id & 0xf00000) >> 20;
> > +	revision = id & 0x0f;
> > +
> > +	/* Workaround for Cortex-A8 erratum: #454179 #430973
> 
> While on this, I would also fix the multi-line comment...

Will do.

> > +	 *	Set IBE bit
> > +	 *	Set Disable Branch Size Mispredicts (DBSM) bit
> > +	 */
> > +	if (variant < 2)
> > +		bits |= (1 << 6) | (1 << 7);
> > +
> > +	/* Workaround for Cortex-A8 erratum #621766
> 
> Also here.
> 
> >  	 *	Enable L1NEON bit
> > -	 * ACR |= (IBE | DBSM | L1NEON) => ACR |= 0xE0
> >  	 */
> > -	omap3_update_aux_cr_secure(0xE0, 0);
> > +	if (variant == 2 && revision == 0)
> > +		bits |= (1 << 5);
> > +
> > +	if (bits != 0)
> > +		omap3_update_aux_cr_secure(bits, 0);
> >  }
> >  
> >  #ifndef CONFIG_SYS_L2CACHE_OFF
> > 
> 

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20150223/da00e89a/attachment.sig>

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

* [U-Boot] [PATCH] omap3: Variant and revision checks for ARM Cortex-A8 errata workarounds
  2015-02-23 15:07           ` Paul Kocialkowski
@ 2015-02-23 19:16             ` Paul Kocialkowski
  2015-02-23 22:21               ` Tom Rini
  0 siblings, 1 reply; 15+ messages in thread
From: Paul Kocialkowski @ 2015-02-23 19:16 UTC (permalink / raw)
  To: u-boot

Not every version and revision of the Cortex-A8 ARM core requires the same
errata workarounds. In addition, enabling those requires to have similar
workarounds enabled in the kernel or it will cause numerous segmentation faults.

This enables those workarounds when they are needed, according to what is done
in Linux.

Follow-up to the discussion from July 2013:
http://lists.denx.de/pipermail/u-boot/2013-July/158377.html

Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
---
 arch/arm/cpu/armv7/omap3/board.c | 29 +++++++++++++++++++++++------
 1 file changed, 23 insertions(+), 6 deletions(-)

diff --git a/arch/arm/cpu/armv7/omap3/board.c b/arch/arm/cpu/armv7/omap3/board.c
index 90d6ae7..3c198fc 100644
--- a/arch/arm/cpu/armv7/omap3/board.c
+++ b/arch/arm/cpu/armv7/omap3/board.c
@@ -431,14 +431,31 @@ static void omap3_update_aux_cr_secure(u32 set_bits, u32 clear_bits)
 
 static void omap3_setup_aux_cr(void)
 {
-	/* Workaround for Cortex-A8 errata: #454179 #430973
-	 *	Set "IBE" bit
-	 *	Set "Disable Branch Size Mispredicts" bit
-	 * Workaround for erratum #621766
+	u32 id, revision, variant;
+	u32 bits = 0;
+
+	asm volatile ("mrc p15, 0, %0, c0, c0, 0" : "=r" (id));
+
+	variant = (id & 0xf00000) >> 20;
+	revision = id & 0x0f;
+
+	/*
+	 * Workaround for Cortex-A8 errata #454179, #430973
+	 *	Set IBE bit
+	 *	Set Disable Branch Size Mispredicts (DBSM) bit
+	 */
+	if (variant < 2)
+		bits |= (1 << 6) | (1 << 7);
+
+	/*
+	 * Workaround for Cortex-A8 erratum #621766
 	 *	Enable L1NEON bit
-	 * ACR |= (IBE | DBSM | L1NEON) => ACR |= 0xE0
 	 */
-	omap3_update_aux_cr_secure(0xE0, 0);
+	if (variant == 2 && revision == 0)
+		bits |= (1 << 5);
+
+	if (bits != 0)
+		omap3_update_aux_cr_secure(bits, 0);
 }
 
 #ifndef CONFIG_SYS_L2CACHE_OFF
-- 
1.9.1

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

* [U-Boot] [PATCH] omap3: Variant and revision checks for ARM Cortex-A8 errata workarounds
  2015-02-23 19:16             ` [U-Boot] [PATCH] " Paul Kocialkowski
@ 2015-02-23 22:21               ` Tom Rini
  2015-02-23 22:43                 ` Nishanth Menon
  0 siblings, 1 reply; 15+ messages in thread
From: Tom Rini @ 2015-02-23 22:21 UTC (permalink / raw)
  To: u-boot

On Mon, Feb 23, 2015 at 08:16:44PM +0100, Paul Kocialkowski wrote:

> Not every version and revision of the Cortex-A8 ARM core requires the same
> errata workarounds. In addition, enabling those requires to have similar
> workarounds enabled in the kernel or it will cause numerous segmentation faults.
> 
> This enables those workarounds when they are needed, according to what is done
> in Linux.
> 
> Follow-up to the discussion from July 2013:
> http://lists.denx.de/pipermail/u-boot/2013-July/158377.html
> 
> Signed-off-by: Paul Kocialkowski <contact@paulk.fr>

Nishanth, any comments here, since you've been thinking about errata
stuff lately?  Thanks!

Reviewed-by: Tom Rini <trini@ti.com>

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20150223/90fa0b94/attachment.sig>

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

* [U-Boot] [PATCH] omap3: Variant and revision checks for ARM Cortex-A8 errata workarounds
  2015-02-23 22:21               ` Tom Rini
@ 2015-02-23 22:43                 ` Nishanth Menon
  2015-02-24 12:02                   ` Paul Kocialkowski
  0 siblings, 1 reply; 15+ messages in thread
From: Nishanth Menon @ 2015-02-23 22:43 UTC (permalink / raw)
  To: u-boot

On Mon, Feb 23, 2015 at 4:21 PM, Tom Rini <trini@ti.com> wrote:
> On Mon, Feb 23, 2015 at 08:16:44PM +0100, Paul Kocialkowski wrote:
>
>> Not every version and revision of the Cortex-A8 ARM core requires the same
>> errata workarounds. In addition, enabling those requires to have similar
>> workarounds enabled in the kernel or it will cause numerous segmentation faults.
>>
>> This enables those workarounds when they are needed, according to what is done
>> in Linux.
>>
>> Follow-up to the discussion from July 2013:
>> http://lists.denx.de/pipermail/u-boot/2013-July/158377.html
>>
>> Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
>
> Nishanth, any comments here, since you've been thinking about errata
> stuff lately?  Thanks!
>
> Reviewed-by: Tom Rini <trini@ti.com>
>

I would probably go with v7 start code triggering the logic. even
though the secure logic is probably unique..

something like CONFIG_ARM_ARCH_CP15_ERRATA or like


-- 
---
Regards,
Nishanth Menon

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

* [U-Boot] [PATCH] omap3: Variant and revision checks for ARM Cortex-A8 errata workarounds
  2015-02-23 22:43                 ` Nishanth Menon
@ 2015-02-24 12:02                   ` Paul Kocialkowski
  2015-02-24 15:22                     ` Nishanth Menon
  0 siblings, 1 reply; 15+ messages in thread
From: Paul Kocialkowski @ 2015-02-24 12:02 UTC (permalink / raw)
  To: u-boot

Le lundi 23 f?vrier 2015 ? 16:43 -0600, Nishanth Menon a ?crit :
> On Mon, Feb 23, 2015 at 4:21 PM, Tom Rini <trini@ti.com> wrote:
> > On Mon, Feb 23, 2015 at 08:16:44PM +0100, Paul Kocialkowski wrote:
> >
> >> Not every version and revision of the Cortex-A8 ARM core requires the same
> >> errata workarounds. In addition, enabling those requires to have similar
> >> workarounds enabled in the kernel or it will cause numerous segmentation faults.
> >>
> >> This enables those workarounds when they are needed, according to what is done
> >> in Linux.
> >>
> >> Follow-up to the discussion from July 2013:
> >> http://lists.denx.de/pipermail/u-boot/2013-July/158377.html
> >>
> >> Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
> >
> > Nishanth, any comments here, since you've been thinking about errata
> > stuff lately?  Thanks!
> >
> > Reviewed-by: Tom Rini <trini@ti.com>
> >
> 
> I would probably go with v7 start code triggering the logic. even
> though the secure logic is probably unique..

It does seem like the secure logic is specific to the OMAP, even though
the GP part (omap3_gp_romcode_call) seems to be generic.

I don't think it would fit well in common v7 code and overall, I don't
think I have sufficient knowledge of those issues to take the decision
to move that code around.

Hence, I'll keep my proposal to what it is now, and let someone else
move the code around in the future if they feel the need to.

> something like CONFIG_ARM_ARCH_CP15_ERRATA or like

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20150224/72d4782e/attachment.sig>

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

* [U-Boot] [PATCH] omap3: Variant and revision checks for ARM Cortex-A8 errata workarounds
  2015-02-24 12:02                   ` Paul Kocialkowski
@ 2015-02-24 15:22                     ` Nishanth Menon
  2015-02-24 16:09                       ` Paul Kocialkowski
  0 siblings, 1 reply; 15+ messages in thread
From: Nishanth Menon @ 2015-02-24 15:22 UTC (permalink / raw)
  To: u-boot

On Tue, Feb 24, 2015 at 6:02 AM, Paul Kocialkowski <contact@paulk.fr> wrote:
> Le lundi 23 f?vrier 2015 ? 16:43 -0600, Nishanth Menon a ?crit :
>> On Mon, Feb 23, 2015 at 4:21 PM, Tom Rini <trini@ti.com> wrote:
>> > On Mon, Feb 23, 2015 at 08:16:44PM +0100, Paul Kocialkowski wrote:
>> >
>> >> Not every version and revision of the Cortex-A8 ARM core requires the same
>> >> errata workarounds. In addition, enabling those requires to have similar
>> >> workarounds enabled in the kernel or it will cause numerous segmentation faults.
>> >>
>> >> This enables those workarounds when they are needed, according to what is done
>> >> in Linux.
>> >>
>> >> Follow-up to the discussion from July 2013:
>> >> http://lists.denx.de/pipermail/u-boot/2013-July/158377.html
>> >>
>> >> Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
>> >
>> > Nishanth, any comments here, since you've been thinking about errata
>> > stuff lately?  Thanks!
>> >
>> > Reviewed-by: Tom Rini <trini@ti.com>
>> >
>>
>> I would probably go with v7 start code triggering the logic. even
>> though the secure logic is probably unique..
>
> It does seem like the secure logic is specific to the OMAP, even though
> the GP part (omap3_gp_romcode_call) seems to be generic.
>
> I don't think it would fit well in common v7 code and overall, I don't
> think I have sufficient knowledge of those issues to take the decision
> to move that code around.
>
> Hence, I'll keep my proposal to what it is now, and let someone else
> move the code around in the future if they feel the need to.

Do you mind if i took a shot at it? would be great if you could test the same.

-- 
---
Regards,
Nishanth Menon

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

* [U-Boot] [PATCH] omap3: Variant and revision checks for ARM Cortex-A8 errata workarounds
  2015-02-24 15:22                     ` Nishanth Menon
@ 2015-02-24 16:09                       ` Paul Kocialkowski
  2015-02-24 23:02                         ` Nishanth Menon
  0 siblings, 1 reply; 15+ messages in thread
From: Paul Kocialkowski @ 2015-02-24 16:09 UTC (permalink / raw)
  To: u-boot

Le mardi 24 f?vrier 2015 ? 09:22 -0600, Nishanth Menon a ?crit :
> On Tue, Feb 24, 2015 at 6:02 AM, Paul Kocialkowski <contact@paulk.fr> wrote:
> > Le lundi 23 f?vrier 2015 ? 16:43 -0600, Nishanth Menon a ?crit :
> >> On Mon, Feb 23, 2015 at 4:21 PM, Tom Rini <trini@ti.com> wrote:
> >> > On Mon, Feb 23, 2015 at 08:16:44PM +0100, Paul Kocialkowski wrote:
> >> >
> >> >> Not every version and revision of the Cortex-A8 ARM core requires the same
> >> >> errata workarounds. In addition, enabling those requires to have similar
> >> >> workarounds enabled in the kernel or it will cause numerous segmentation faults.
> >> >>
> >> >> This enables those workarounds when they are needed, according to what is done
> >> >> in Linux.
> >> >>
> >> >> Follow-up to the discussion from July 2013:
> >> >> http://lists.denx.de/pipermail/u-boot/2013-July/158377.html
> >> >>
> >> >> Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
> >> >
> >> > Nishanth, any comments here, since you've been thinking about errata
> >> > stuff lately?  Thanks!
> >> >
> >> > Reviewed-by: Tom Rini <trini@ti.com>
> >> >
> >>
> >> I would probably go with v7 start code triggering the logic. even
> >> though the secure logic is probably unique..
> >
> > It does seem like the secure logic is specific to the OMAP, even though
> > the GP part (omap3_gp_romcode_call) seems to be generic.
> >
> > I don't think it would fit well in common v7 code and overall, I don't
> > think I have sufficient knowledge of those issues to take the decision
> > to move that code around.
> >
> > Hence, I'll keep my proposal to what it is now, and let someone else
> > move the code around in the future if they feel the need to.
> 
> Do you mind if i took a shot at it? would be great if you could test the same.

Alright, please go ahead! I'm available to test any patch on my omap
3630 device.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20150224/fd7d65d7/attachment.sig>

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

* [U-Boot] [PATCH] omap3: Variant and revision checks for ARM Cortex-A8 errata workarounds
  2015-02-24 16:09                       ` Paul Kocialkowski
@ 2015-02-24 23:02                         ` Nishanth Menon
  0 siblings, 0 replies; 15+ messages in thread
From: Nishanth Menon @ 2015-02-24 23:02 UTC (permalink / raw)
  To: u-boot

On 02/24/2015 10:09 AM, Paul Kocialkowski wrote:
> Le mardi 24 f?vrier 2015 ? 09:22 -0600, Nishanth Menon a ?crit :
>> On Tue, Feb 24, 2015 at 6:02 AM, Paul Kocialkowski <contact@paulk.fr> wrote:
>>> Le lundi 23 f?vrier 2015 ? 16:43 -0600, Nishanth Menon a ?crit :
>>>> On Mon, Feb 23, 2015 at 4:21 PM, Tom Rini <trini@ti.com> wrote:
>>>>> On Mon, Feb 23, 2015 at 08:16:44PM +0100, Paul Kocialkowski wrote:
>>>>>
>>>>>> Not every version and revision of the Cortex-A8 ARM core requires the same
>>>>>> errata workarounds. In addition, enabling those requires to have similar
>>>>>> workarounds enabled in the kernel or it will cause numerous segmentation faults.
>>>>>>
>>>>>> This enables those workarounds when they are needed, according to what is done
>>>>>> in Linux.
>>>>>>
>>>>>> Follow-up to the discussion from July 2013:
>>>>>> http://lists.denx.de/pipermail/u-boot/2013-July/158377.html
>>>>>>
>>>>>> Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
>>>>>
>>>>> Nishanth, any comments here, since you've been thinking about errata
>>>>> stuff lately?  Thanks!
>>>>>
>>>>> Reviewed-by: Tom Rini <trini@ti.com>
>>>>>
>>>>
>>>> I would probably go with v7 start code triggering the logic. even
>>>> though the secure logic is probably unique..
>>>
>>> It does seem like the secure logic is specific to the OMAP, even though
>>> the GP part (omap3_gp_romcode_call) seems to be generic.
>>>
>>> I don't think it would fit well in common v7 code and overall, I don't
>>> think I have sufficient knowledge of those issues to take the decision
>>> to move that code around.
>>>
>>> Hence, I'll keep my proposal to what it is now, and let someone else
>>> move the code around in the future if they feel the need to.
>>
>> Do you mind if i took a shot at it? would be great if you could test the same.
> 
> Alright, please go ahead! I'm available to test any patch on my omap
> 3630 device.
> 

Alright, the series should now include OMAP3 as well.. Sorry about
confusion when list blocked me for too many cc folks etc.. anyways..

https://patchwork.ozlabs.org/patch/443261/
https://patchwork.ozlabs.org/patch/443264/
https://patchwork.ozlabs.org/patch/443268/
https://patchwork.ozlabs.org/patch/443265/
https://patchwork.ozlabs.org/patch/443263/
https://patchwork.ozlabs.org/patch/443262/
https://patchwork.ozlabs.org/patch/443267/
https://patchwork.ozlabs.org/patch/443266/
https://patchwork.ozlabs.org/patch/443260/

-- 
Regards,
Nishanth Menon

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

end of thread, other threads:[~2015-02-24 23:02 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-02-22 11:36 [U-Boot] [PATCH] omap3: ARM Cortex-A8 errata workarounds config option Paul Kocialkowski
2015-02-22 12:06 ` Igor Grinberg
2015-02-22 15:45   ` Paul Kocialkowski
2015-02-22 15:55     ` Paul Kocialkowski
2015-02-22 16:02     ` Paul Kocialkowski
2015-02-22 16:42       ` [U-Boot] [PATCH v2] omap3: Variant and revision checks for ARM Cortex-A8 errata workarounds Paul Kocialkowski
2015-02-23 11:09         ` Igor Grinberg
2015-02-23 15:07           ` Paul Kocialkowski
2015-02-23 19:16             ` [U-Boot] [PATCH] " Paul Kocialkowski
2015-02-23 22:21               ` Tom Rini
2015-02-23 22:43                 ` Nishanth Menon
2015-02-24 12:02                   ` Paul Kocialkowski
2015-02-24 15:22                     ` Nishanth Menon
2015-02-24 16:09                       ` Paul Kocialkowski
2015-02-24 23:02                         ` Nishanth Menon

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.