summaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-tegra
diff options
context:
space:
mode:
authorJoseph Lo <josephl@nvidia.com>2013-02-26 17:28:07 +0100
committerStephen Warren <swarren@nvidia.com>2013-03-11 21:30:58 +0100
commite562b86581d2ccf3faaf55b1235b4e6438cb7712 (patch)
tree9ff3b10029796a3eb8e94c901abd8efd494fcaa3 /arch/arm/mach-tegra
parentARM: tegra: replace the CPU power on function with PMC call (diff)
downloadlinux-e562b86581d2ccf3faaf55b1235b4e6438cb7712.tar.xz
linux-e562b86581d2ccf3faaf55b1235b4e6438cb7712.zip
ARM: tegra: bring up secondary CPU for Tegra114
The secondary CPU can be brought up by toggling the power in PMC. Then the flow controller will release CPU to go by clearing the reset and clamp signal automatically. Based on the work by: Bo Yan <byan@nvidia.com> Signed-off-by: Joseph Lo <josephl@nvidia.com> Signed-off-by: Stephen Warren <swarren@nvidia.com>
Diffstat (limited to 'arch/arm/mach-tegra')
-rw-r--r--arch/arm/mach-tegra/platsmp.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/arch/arm/mach-tegra/platsmp.c b/arch/arm/mach-tegra/platsmp.c
index 601bd0c3f983..516aab28fe34 100644
--- a/arch/arm/mach-tegra/platsmp.c
+++ b/arch/arm/mach-tegra/platsmp.c
@@ -146,6 +146,12 @@ remove_clamps:
return 0;
}
+static int tegra114_boot_secondary(unsigned int cpu, struct task_struct *idle)
+{
+ cpu = cpu_logical_map(cpu);
+ return tegra_pmc_cpu_power_on(cpu);
+}
+
static int __cpuinit tegra_boot_secondary(unsigned int cpu,
struct task_struct *idle)
{
@@ -153,6 +159,8 @@ static int __cpuinit tegra_boot_secondary(unsigned int cpu,
return tegra20_boot_secondary(cpu, idle);
if (IS_ENABLED(CONFIG_ARCH_TEGRA_3x_SOC) && tegra_chip_id == TEGRA30)
return tegra30_boot_secondary(cpu, idle);
+ if (IS_ENABLED(CONFIG_ARCH_TEGRA_114_SOC) && tegra_chip_id == TEGRA114)
+ return tegra114_boot_secondary(cpu, idle);
return -EINVAL;
}