diff options
Diffstat (limited to 'arch/blackfin/mach-bf561/secondary.S')
-rw-r--r-- | arch/blackfin/mach-bf561/secondary.S | 50 |
1 files changed, 48 insertions, 2 deletions
diff --git a/arch/blackfin/mach-bf561/secondary.S b/arch/blackfin/mach-bf561/secondary.S index 8e6050369c06..4624eebbf9c4 100644 --- a/arch/blackfin/mach-bf561/secondary.S +++ b/arch/blackfin/mach-bf561/secondary.S | |||
@@ -11,6 +11,7 @@ | |||
11 | #include <linux/init.h> | 11 | #include <linux/init.h> |
12 | #include <asm/blackfin.h> | 12 | #include <asm/blackfin.h> |
13 | #include <asm/asm-offsets.h> | 13 | #include <asm/asm-offsets.h> |
14 | #include <asm/trace.h> | ||
14 | 15 | ||
15 | __INIT | 16 | __INIT |
16 | 17 | ||
@@ -62,6 +63,8 @@ ENTRY(_coreb_trampoline_start) | |||
62 | M2 = r0; | 63 | M2 = r0; |
63 | M3 = r0; | 64 | M3 = r0; |
64 | 65 | ||
66 | trace_buffer_init(p0,r0); | ||
67 | |||
65 | /* Turn off the icache */ | 68 | /* Turn off the icache */ |
66 | p0.l = LO(IMEM_CONTROL); | 69 | p0.l = LO(IMEM_CONTROL); |
67 | p0.h = HI(IMEM_CONTROL); | 70 | p0.h = HI(IMEM_CONTROL); |
@@ -159,6 +162,41 @@ ENTRY(_coreb_trampoline_start) | |||
159 | ENDPROC(_coreb_trampoline_start) | 162 | ENDPROC(_coreb_trampoline_start) |
160 | ENTRY(_coreb_trampoline_end) | 163 | ENTRY(_coreb_trampoline_end) |
161 | 164 | ||
165 | .section ".text" | ||
166 | ENTRY(_set_sicb_iwr) | ||
167 | P0.H = hi(SICB_IWR0); | ||
168 | P0.L = lo(SICB_IWR0); | ||
169 | P1.H = hi(SICB_IWR1); | ||
170 | P1.L = lo(SICB_IWR1); | ||
171 | [P0] = R0; | ||
172 | [P1] = R1; | ||
173 | SSYNC; | ||
174 | RTS; | ||
175 | ENDPROC(_set_sicb_iwr) | ||
176 | |||
177 | ENTRY(_coreb_sleep) | ||
178 | sp.l = lo(INITIAL_STACK); | ||
179 | sp.h = hi(INITIAL_STACK); | ||
180 | fp = sp; | ||
181 | usp = sp; | ||
182 | |||
183 | call _set_sicb_iwr; | ||
184 | |||
185 | CLI R2; | ||
186 | SSYNC; | ||
187 | IDLE; | ||
188 | STI R2; | ||
189 | |||
190 | R0 = IWR_DISABLE_ALL; | ||
191 | R1 = IWR_DISABLE_ALL; | ||
192 | call _set_sicb_iwr; | ||
193 | |||
194 | p0.h = hi(COREB_L1_CODE_START); | ||
195 | p0.l = lo(COREB_L1_CODE_START); | ||
196 | jump (p0); | ||
197 | ENDPROC(_coreb_sleep) | ||
198 | |||
199 | __CPUINIT | ||
162 | ENTRY(_coreb_start) | 200 | ENTRY(_coreb_start) |
163 | [--sp] = reti; | 201 | [--sp] = reti; |
164 | 202 | ||
@@ -176,12 +214,20 @@ ENTRY(_coreb_start) | |||
176 | sp = [p0]; | 214 | sp = [p0]; |
177 | usp = sp; | 215 | usp = sp; |
178 | fp = sp; | 216 | fp = sp; |
217 | #ifdef CONFIG_HOTPLUG_CPU | ||
218 | p0.l = _hotplug_coreb; | ||
219 | p0.h = _hotplug_coreb; | ||
220 | r0 = [p0]; | ||
221 | cc = BITTST(r0, 0); | ||
222 | if cc jump 3f; | ||
223 | #endif | ||
179 | sp += -12; | 224 | sp += -12; |
180 | call _init_pda | 225 | call _init_pda |
181 | sp += 12; | 226 | sp += 12; |
227 | #ifdef CONFIG_HOTPLUG_CPU | ||
228 | 3: | ||
229 | #endif | ||
182 | call _secondary_start_kernel; | 230 | call _secondary_start_kernel; |
183 | .L_exit: | 231 | .L_exit: |
184 | jump.s .L_exit; | 232 | jump.s .L_exit; |
185 | ENDPROC(_coreb_start) | 233 | ENDPROC(_coreb_start) |
186 | |||
187 | __FINIT | ||