diff options
author | Lucas Stach <dev@lynxeye.de> | 2014-06-03 22:35:04 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2014-06-05 08:01:14 +0200 |
commit | 08f5fcbad6e0bc09b5321e381c379dc61566903b (patch) | |
tree | 3464548850aff126cdaffc120e6e1c6a3c5ec9f3 /arch/arm/mach-tegra | |
parent | 8dc05ab677970fdf28387b3452f3bce66ceb3f62 (diff) | |
download | barebox-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.c | 18 |
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)); |