summaryrefslogtreecommitdiff
path: root/arch/arm/mach-tegra/platsmp.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-tegra/platsmp.c')
-rw-r--r--arch/arm/mach-tegra/platsmp.c14
1 files changed, 6 insertions, 8 deletions
diff --git a/arch/arm/mach-tegra/platsmp.c b/arch/arm/mach-tegra/platsmp.c
index 7ac69866c4c8..46c6bd5d1d94 100644
--- a/arch/arm/mach-tegra/platsmp.c
+++ b/arch/arm/mach-tegra/platsmp.c
@@ -237,7 +237,6 @@ fail:
static int tegra11x_power_up_cpu(unsigned int cpu)
{
- int ret;
unsigned long timeout;
BUG_ON(cpu == smp_processor_id());
@@ -250,6 +249,7 @@ static int tegra11x_power_up_cpu(unsigned int cpu)
/* set SCLK as event trigger for flow conroller */
flowctrl_write_cpu_csr(cpu, 0x1);
flowctrl_write_cpu_halt(cpu, 0x48000000);
+ return 0;
} else {
u32 reg;
@@ -258,16 +258,14 @@ static int tegra11x_power_up_cpu(unsigned int cpu)
pmc_writel(reg, PWRGATE_TOGGLE);
}
- ret = -ETIMEDOUT;
-
/* Wait for the power to come up. */
- timeout = jiffies + msecs_to_jiffies(2000);
+ timeout = jiffies + msecs_to_jiffies(100);
do {
- if (is_cpu_powered(cpu) && is_clamp_removed(cpu)) {
+ if ((is_cpu_powered(cpu) && is_clamp_removed(cpu)) ||
+ cpu_online(cpu)) {
cpumask_set_cpu(cpu, tegra_cpu_power_mask);
wmb();
- ret = 0;
- break;
+ return 0;
}
udelay(10);
} while (time_before(jiffies, timeout));
@@ -275,7 +273,7 @@ static int tegra11x_power_up_cpu(unsigned int cpu)
/* Clear flow controller CSR. */
flowctrl_write_cpu_csr(cpu, 0);
- return ret;
+ return -ETIMEDOUT;
}
static int __cpuinit tegra_boot_secondary(unsigned int cpu, struct task_struct *idle)