aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/arm/mach-realview/platsmp.c44
-rw-r--r--arch/arm/mach-tegra/platsmp.c7
2 files changed, 12 insertions, 39 deletions
diff --git a/arch/arm/mach-realview/platsmp.c b/arch/arm/mach-realview/platsmp.c
index 6595e875fb2f..ef3cc86f5140 100644
--- a/arch/arm/mach-realview/platsmp.c
+++ b/arch/arm/mach-realview/platsmp.c
@@ -99,14 +99,9 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
99 flush_cache_all(); 99 flush_cache_all();
100 100
101 /* 101 /*
102 * XXX 102 * Send the secondary CPU a soft interrupt, thereby causing
103 * 103 * the boot monitor to read the system wide flags register,
104 * This is a later addition to the booting protocol: the 104 * and branch to the address found there.
105 * bootMonitor now puts secondary cores into WFI, so
106 * poke_milo() no longer gets the cores moving; we need
107 * to send a soft interrupt to wake the secondary core.
108 * Use smp_cross_call() for this, since there's little
109 * point duplicating the code here
110 */ 105 */
111 smp_cross_call(cpumask_of(cpu), 1); 106 smp_cross_call(cpumask_of(cpu), 1);
112 107
@@ -128,22 +123,6 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
128 return pen_release != -1 ? -ENOSYS : 0; 123 return pen_release != -1 ? -ENOSYS : 0;
129} 124}
130 125
131static void __init poke_milo(void)
132{
133 /* nobody is to be released from the pen yet */
134 pen_release = -1;
135
136 /*
137 * Write the address of secondary startup into the system-wide flags
138 * register. The BootMonitor waits for this register to become
139 * non-zero.
140 */
141 __raw_writel(BSYM(virt_to_phys(realview_secondary_startup)),
142 __io_address(REALVIEW_SYS_FLAGSSET));
143
144 mb();
145}
146
147/* 126/*
148 * Initialise the CPU possible map early - this describes the CPUs 127 * Initialise the CPU possible map early - this describes the CPUs
149 * which may be present or become present in the system. 128 * which may be present or become present in the system.
@@ -189,13 +168,6 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
189 for (i = 0; i < max_cpus; i++) 168 for (i = 0; i < max_cpus; i++)
190 set_cpu_present(i, true); 169 set_cpu_present(i, true);
191 170
192 /*
193 * Initialise the SCU if there are more than one CPU and let
194 * them know where to start. Note that, on modern versions of
195 * MILO, the "poke" doesn't actually do anything until each
196 * individual core is sent a soft interrupt to get it out of
197 * WFI
198 */
199 if (max_cpus > 1) { 171 if (max_cpus > 1) {
200 /* 172 /*
201 * Enable the local timer or broadcast device for the 173 * Enable the local timer or broadcast device for the
@@ -204,6 +176,14 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
204 percpu_timer_setup(); 176 percpu_timer_setup();
205 177
206 scu_enable(scu_base_addr()); 178 scu_enable(scu_base_addr());
207 poke_milo(); 179
180 /*
181 * Write the address of secondary startup into the
182 * system-wide flags register. The BootMonitor waits
183 * until it receives a soft interrupt, and then the
184 * secondary CPU branches to this address.
185 */
186 __raw_writel(BSYM(virt_to_phys(realview_secondary_startup)),
187 __io_address(REALVIEW_SYS_FLAGSSET));
208 } 188 }
209} 189}
diff --git a/arch/arm/mach-tegra/platsmp.c b/arch/arm/mach-tegra/platsmp.c
index 5b194dd815a8..66d0634e7a96 100644
--- a/arch/arm/mach-tegra/platsmp.c
+++ b/arch/arm/mach-tegra/platsmp.c
@@ -148,13 +148,6 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
148 for (i = 0; i < max_cpus; i++) 148 for (i = 0; i < max_cpus; i++)
149 set_cpu_present(i, true); 149 set_cpu_present(i, true);
150 150
151 /*
152 * Initialise the SCU if there are more than one CPU and let
153 * them know where to start. Note that, on modern versions of
154 * MILO, the "poke" doesn't actually do anything until each
155 * individual core is sent a soft interrupt to get it out of
156 * WFI
157 */
158 if (max_cpus > 1) { 151 if (max_cpus > 1) {
159 percpu_timer_setup(); 152 percpu_timer_setup();
160 scu_enable(scu_base); 153 scu_enable(scu_base);