summaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-tegra
diff options
context:
space:
mode:
authorLucas Stach <l.stach@pengutronix.de>2014-06-25 09:18:21 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2014-06-26 08:05:21 +0200
commitdb158af8cd9191136ede6abfb34e0e986b8c904c (patch)
tree2df0b1426c49f15cdae5a7e916aeda8f2bb55edb /arch/arm/mach-tegra
parent3acaa78fd839359045b6e202cc326860d2b47da8 (diff)
downloadbarebox-db158af8cd9191136ede6abfb34e0e986b8c904c.tar.gz
barebox-db158af8cd9191136ede6abfb34e0e986b8c904c.tar.xz
arm: tegra: enable ARM errata workarounds
Signed-off-by: Lucas Stach <l.stach@pengutronix.de> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch/arm/mach-tegra')
-rw-r--r--arch/arm/mach-tegra/tegra_maincomplex_init.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/arch/arm/mach-tegra/tegra_maincomplex_init.c b/arch/arm/mach-tegra/tegra_maincomplex_init.c
index 17490a425a..4a362ddba3 100644
--- a/arch/arm/mach-tegra/tegra_maincomplex_init.c
+++ b/arch/arm/mach-tegra/tegra_maincomplex_init.c
@@ -18,6 +18,7 @@
#include <sizes.h>
#include <asm/barebox-arm-head.h>
#include <asm/barebox-arm.h>
+#include <asm/errata.h>
#include <mach/lowlevel.h>
#include <mach/tegra20-pmc.h>
#include <mach/tegra20-car.h>
@@ -30,6 +31,23 @@ void tegra_maincomplex_entry(void)
arm_cpu_lowlevel_init();
+ chiptype = tegra_get_chiptype();
+
+ /* enable ARM errata workarounds early */
+ switch (chiptype) {
+ case TEGRA20:
+ enable_arm_errata_716044_war();
+ enable_arm_errata_742230_war();
+ enable_arm_errata_751472_war();
+ break;
+ case TEGRA30:
+ enable_arm_errata_743622_war();
+ enable_arm_errata_751472_war();
+ break;
+ default:
+ break;
+ }
+
/* switch to PLLX */
writel(CRC_CCLK_BURST_POLICY_SYS_STATE_RUN <<
CRC_CCLK_BURST_POLICY_SYS_STATE_SHIFT |
@@ -38,8 +56,6 @@ void tegra_maincomplex_entry(void)
TEGRA_CLK_RESET_BASE + CRC_CCLK_BURST_POLICY);
writel(CRC_SUPER_CDIV_ENB, TEGRA_CLK_RESET_BASE + CRC_SUPER_CCLK_DIV);
- chiptype = tegra_get_chiptype();
-
if (chiptype >= TEGRA114) {
asm("mrc p15, 1, %0, c9, c0, 2" : : "r" (reg));
reg &= ~7;
@@ -51,6 +67,7 @@ void tegra_maincomplex_entry(void)
case TEGRA20:
rambase = 0x0;
ramsize = tegra20_get_ramsize();
+
break;
case TEGRA30:
case TEGRA124: