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

Paul Kocialkowski
2015-02-22T11:36:34Z

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