diff options
-rw-r--r-- | arch/arm/mach-realview/platsmp.c | 44 | ||||
-rw-r--r-- | arch/arm/mach-tegra/platsmp.c | 7 |
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 | ||
131 | static 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); |