diff mbox

[U-Boot] omap3: ARM Cortex-A8 errata workarounds config option

Message ID 1424604994-31875-1-git-send-email-contact@paulk.fr
State Superseded
Delegated to: Tom Rini
Headers show

Commit Message

Paul Kocialkowski Feb. 22, 2015, 11:36 a.m. UTC
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(+)

Comments

Igor Grinberg Feb. 22, 2015, 12:06 p.m. UTC | #1
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)

[...]
Paul Kocialkowski Feb. 22, 2015, 3:45 p.m. UTC | #2
> > 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)
> 
> [...]
>
Paul Kocialkowski Feb. 22, 2015, 3:55 p.m. UTC | #3
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@lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
Paul Kocialkowski Feb. 22, 2015, 4:02 p.m. UTC | #4
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@lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
diff mbox

Patch

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)