diff options
-rw-r--r-- | arch/arm/mach-tegra/flowctrl.h | 1 | ||||
-rw-r--r-- | arch/arm/mach-tegra/platsmp.c | 25 |
2 files changed, 25 insertions, 1 deletions
diff --git a/arch/arm/mach-tegra/flowctrl.h b/arch/arm/mach-tegra/flowctrl.h index 67eab56699bd..7a29bae799a7 100644 --- a/arch/arm/mach-tegra/flowctrl.h +++ b/arch/arm/mach-tegra/flowctrl.h | |||
@@ -25,6 +25,7 @@ | |||
25 | #define FLOW_CTRL_WAITEVENT (2 << 29) | 25 | #define FLOW_CTRL_WAITEVENT (2 << 29) |
26 | #define FLOW_CTRL_WAIT_FOR_INTERRUPT (4 << 29) | 26 | #define FLOW_CTRL_WAIT_FOR_INTERRUPT (4 << 29) |
27 | #define FLOW_CTRL_JTAG_RESUME (1 << 28) | 27 | #define FLOW_CTRL_JTAG_RESUME (1 << 28) |
28 | #define FLOW_CTRL_SCLK_RESUME (1 << 27) | ||
28 | #define FLOW_CTRL_HALT_CPU_IRQ (1 << 10) | 29 | #define FLOW_CTRL_HALT_CPU_IRQ (1 << 10) |
29 | #define FLOW_CTRL_HALT_CPU_FIQ (1 << 8) | 30 | #define FLOW_CTRL_HALT_CPU_FIQ (1 << 8) |
30 | #define FLOW_CTRL_CPU0_CSR 0x8 | 31 | #define FLOW_CTRL_CPU0_CSR 0x8 |
diff --git a/arch/arm/mach-tegra/platsmp.c b/arch/arm/mach-tegra/platsmp.c index fad4226ef710..554aedc98c9f 100644 --- a/arch/arm/mach-tegra/platsmp.c +++ b/arch/arm/mach-tegra/platsmp.c | |||
@@ -140,8 +140,31 @@ remove_clamps: | |||
140 | 140 | ||
141 | static int tegra114_boot_secondary(unsigned int cpu, struct task_struct *idle) | 141 | static int tegra114_boot_secondary(unsigned int cpu, struct task_struct *idle) |
142 | { | 142 | { |
143 | int ret = 0; | ||
144 | |||
143 | cpu = cpu_logical_map(cpu); | 145 | cpu = cpu_logical_map(cpu); |
144 | return tegra_pmc_cpu_power_on(cpu); | 146 | |
147 | if (cpumask_test_cpu(cpu, &tegra_cpu_init_mask)) { | ||
148 | /* | ||
149 | * Warm boot flow | ||
150 | * The flow controller in charge of the power state and | ||
151 | * control for each CPU. | ||
152 | */ | ||
153 | /* set SCLK as event trigger for flow controller */ | ||
154 | flowctrl_write_cpu_csr(cpu, 1); | ||
155 | flowctrl_write_cpu_halt(cpu, | ||
156 | FLOW_CTRL_WAITEVENT | FLOW_CTRL_SCLK_RESUME); | ||
157 | } else { | ||
158 | /* | ||
159 | * Cold boot flow | ||
160 | * The CPU is powered up by toggling PMC directly. It will | ||
161 | * also initial power state in flow controller. After that, | ||
162 | * the CPU's power state is maintained by flow controller. | ||
163 | */ | ||
164 | ret = tegra_pmc_cpu_power_on(cpu); | ||
165 | } | ||
166 | |||
167 | return ret; | ||
145 | } | 168 | } |
146 | 169 | ||
147 | static int __cpuinit tegra_boot_secondary(unsigned int cpu, | 170 | static int __cpuinit tegra_boot_secondary(unsigned int cpu, |