summaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-tegra
diff options
context:
space:
mode:
authorLucas Stach <dev@lynxeye.de>2014-06-03 22:35:04 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2014-06-05 08:01:14 +0200
commit08f5fcbad6e0bc09b5321e381c379dc61566903b (patch)
tree3464548850aff126cdaffc120e6e1c6a3c5ec9f3 /arch/arm/mach-tegra
parent8dc05ab677970fdf28387b3452f3bce66ceb3f62 (diff)
downloadbarebox-08f5fcbad6e0bc09b5321e381c379dc61566903b.tar.gz
barebox-08f5fcbad6e0bc09b5321e381c379dc61566903b.tar.xz
tegra: hardcode entry address for main cluster
I don't know why get_runtime_offset fails on T124 yet, but this is a safe workaround, with the nice side-effect of fixing second stage barebox loading. Signed-off-by: Lucas Stach <dev@lynxeye.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_avp_init.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/arch/arm/mach-tegra/tegra_avp_init.c b/arch/arm/mach-tegra/tegra_avp_init.c
index 63ccfb521e..619fecf4c3 100644
--- a/arch/arm/mach-tegra/tegra_avp_init.c
+++ b/arch/arm/mach-tegra/tegra_avp_init.c
@@ -260,6 +260,10 @@ static void tegra_cluster_switch_hp(void)
void tegra_avp_reset_vector(uint32_t boarddata)
{
int num_cores;
+ unsigned int entry_address = 0;
+
+ if (tegra_cpu_is_maincomplex())
+ tegra_maincomplex_entry();
/* we want to bring up the high performance CPU complex */
if (tegra_get_chiptype() >= TEGRA30)
@@ -274,8 +278,18 @@ void tegra_avp_reset_vector(uint32_t boarddata)
stop_maincomplex_clocks(num_cores);
/* set start address for the main CPU complex processors */
- writel(tegra_maincomplex_entry - get_runtime_offset(),
- TEGRA_EXCEPTION_VECTORS_BASE + 0x100);
+ switch (tegra_get_chiptype()) {
+ case TEGRA20:
+ entry_address = 0x108000;
+ break;
+ case TEGRA30:
+ case TEGRA124:
+ entry_address = 0x80108000;
+ break;
+ default:
+ break;
+ }
+ writel(entry_address, TEGRA_EXCEPTION_VECTORS_BASE + 0x100);
/* put boarddata in scratch reg, for main CPU to fetch after startup */
writel(boarddata, TEGRA_PMC_BASE + PMC_SCRATCH(10));