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>
This commit is contained in:
parent
8dc05ab677
commit
08f5fcbad6
|
@ -260,6 +260,10 @@ static void tegra_cluster_switch_hp(void)
|
||||||
void tegra_avp_reset_vector(uint32_t boarddata)
|
void tegra_avp_reset_vector(uint32_t boarddata)
|
||||||
{
|
{
|
||||||
int num_cores;
|
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 */
|
/* we want to bring up the high performance CPU complex */
|
||||||
if (tegra_get_chiptype() >= TEGRA30)
|
if (tegra_get_chiptype() >= TEGRA30)
|
||||||
|
@ -274,8 +278,18 @@ void tegra_avp_reset_vector(uint32_t boarddata)
|
||||||
stop_maincomplex_clocks(num_cores);
|
stop_maincomplex_clocks(num_cores);
|
||||||
|
|
||||||
/* set start address for the main CPU complex processors */
|
/* set start address for the main CPU complex processors */
|
||||||
writel(tegra_maincomplex_entry - get_runtime_offset(),
|
switch (tegra_get_chiptype()) {
|
||||||
TEGRA_EXCEPTION_VECTORS_BASE + 0x100);
|
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 */
|
/* put boarddata in scratch reg, for main CPU to fetch after startup */
|
||||||
writel(boarddata, TEGRA_PMC_BASE + PMC_SCRATCH(10));
|
writel(boarddata, TEGRA_PMC_BASE + PMC_SCRATCH(10));
|
||||||
|
|
Loading…
Reference in New Issue