diff options
Diffstat (limited to 'arch/sparc/kernel/entry.S')
-rw-r--r-- | arch/sparc/kernel/entry.S | 40 |
1 files changed, 20 insertions, 20 deletions
diff --git a/arch/sparc/kernel/entry.S b/arch/sparc/kernel/entry.S index 68689facaaae..faf9ccd9ef5d 100644 --- a/arch/sparc/kernel/entry.S +++ b/arch/sparc/kernel/entry.S | |||
@@ -272,17 +272,18 @@ smp4m_ticker: | |||
272 | */ | 272 | */ |
273 | maybe_smp4m_msg: | 273 | maybe_smp4m_msg: |
274 | GET_PROCESSOR4M_ID(o3) | 274 | GET_PROCESSOR4M_ID(o3) |
275 | set sun4m_interrupts, %l5 | 275 | sethi %hi(sun4m_irq_percpu), %l5 |
276 | ld [%l5], %o5 | 276 | sll %o3, 2, %o3 |
277 | or %l5, %lo(sun4m_irq_percpu), %o5 | ||
277 | sethi %hi(0x40000000), %o2 | 278 | sethi %hi(0x40000000), %o2 |
278 | sll %o3, 12, %o3 | ||
279 | ld [%o5 + %o3], %o1 | 279 | ld [%o5 + %o3], %o1 |
280 | andcc %o1, %o2, %g0 | 280 | ld [%o1 + 0x00], %o3 ! sun4m_irq_percpu[cpu]->pending |
281 | andcc %o3, %o2, %g0 | ||
281 | be,a smp4m_ticker | 282 | be,a smp4m_ticker |
282 | cmp %l7, 14 | 283 | cmp %l7, 14 |
283 | st %o2, [%o5 + 0x4] | 284 | st %o2, [%o1 + 0x04] ! sun4m_irq_percpu[cpu]->clear=0x40000000 |
284 | WRITE_PAUSE | 285 | WRITE_PAUSE |
285 | ld [%o5], %g0 | 286 | ld [%o1 + 0x00], %g0 ! sun4m_irq_percpu[cpu]->pending |
286 | WRITE_PAUSE | 287 | WRITE_PAUSE |
287 | or %l0, PSR_PIL, %l4 | 288 | or %l0, PSR_PIL, %l4 |
288 | wr %l4, 0x0, %psr | 289 | wr %l4, 0x0, %psr |
@@ -300,16 +301,16 @@ linux_trap_ipi15_sun4m: | |||
300 | SAVE_ALL | 301 | SAVE_ALL |
301 | sethi %hi(0x80000000), %o2 | 302 | sethi %hi(0x80000000), %o2 |
302 | GET_PROCESSOR4M_ID(o0) | 303 | GET_PROCESSOR4M_ID(o0) |
303 | set sun4m_interrupts, %l5 | 304 | sethi %hi(sun4m_irq_percpu), %l5 |
304 | ld [%l5], %o5 | 305 | or %l5, %lo(sun4m_irq_percpu), %o5 |
305 | sll %o0, 12, %o0 | 306 | sll %o0, 2, %o0 |
306 | add %o5, %o0, %o5 | 307 | ld [%o5 + %o0], %o5 |
307 | ld [%o5], %o3 | 308 | ld [%o5 + 0x00], %o3 ! sun4m_irq_percpu[cpu]->pending |
308 | andcc %o3, %o2, %g0 | 309 | andcc %o3, %o2, %g0 |
309 | be 1f ! Must be an NMI async memory error | 310 | be 1f ! Must be an NMI async memory error |
310 | st %o2, [%o5 + 4] | 311 | st %o2, [%o5 + 0x04] ! sun4m_irq_percpu[cpu]->clear=0x80000000 |
311 | WRITE_PAUSE | 312 | WRITE_PAUSE |
312 | ld [%o5], %g0 | 313 | ld [%o5 + 0x00], %g0 ! sun4m_irq_percpu[cpu]->pending |
313 | WRITE_PAUSE | 314 | WRITE_PAUSE |
314 | or %l0, PSR_PIL, %l4 | 315 | or %l0, PSR_PIL, %l4 |
315 | wr %l4, 0x0, %psr | 316 | wr %l4, 0x0, %psr |
@@ -323,12 +324,11 @@ linux_trap_ipi15_sun4m: | |||
323 | 1: | 324 | 1: |
324 | /* NMI async memory error handling. */ | 325 | /* NMI async memory error handling. */ |
325 | sethi %hi(0x80000000), %l4 | 326 | sethi %hi(0x80000000), %l4 |
326 | sethi %hi(0x4000), %o3 | 327 | sethi %hi(sun4m_irq_global), %o5 |
327 | sub %o5, %o0, %o5 | 328 | ld [%o5 + %lo(sun4m_irq_global)], %l5 |
328 | add %o5, %o3, %l5 | 329 | st %l4, [%l5 + 0x0c] ! sun4m_irq_global->mask_set=0x80000000 |
329 | st %l4, [%l5 + 0xc] | ||
330 | WRITE_PAUSE | 330 | WRITE_PAUSE |
331 | ld [%l5], %g0 | 331 | ld [%l5 + 0x00], %g0 ! sun4m_irq_global->pending |
332 | WRITE_PAUSE | 332 | WRITE_PAUSE |
333 | or %l0, PSR_PIL, %l4 | 333 | or %l0, PSR_PIL, %l4 |
334 | wr %l4, 0x0, %psr | 334 | wr %l4, 0x0, %psr |
@@ -337,9 +337,9 @@ linux_trap_ipi15_sun4m: | |||
337 | WRITE_PAUSE | 337 | WRITE_PAUSE |
338 | call sun4m_nmi | 338 | call sun4m_nmi |
339 | nop | 339 | nop |
340 | st %l4, [%l5 + 0x8] | 340 | st %l4, [%l5 + 0x08] ! sun4m_irq_global->mask_clear=0x80000000 |
341 | WRITE_PAUSE | 341 | WRITE_PAUSE |
342 | ld [%l5], %g0 | 342 | ld [%l5 + 0x00], %g0 ! sun4m_irq_global->pending |
343 | WRITE_PAUSE | 343 | WRITE_PAUSE |
344 | RESTORE_ALL | 344 | RESTORE_ALL |
345 | 345 | ||