diff options
| author | Konrad Eisele <konrad@gaisler.com> | 2009-08-31 18:08:13 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2009-11-02 07:19:42 -0500 |
| commit | 8401707ff645521e9f21cbb8fe3b138f60e85680 (patch) | |
| tree | 114287cf273b57f96d0e132cd2274c7afe60b120 /arch/sparc/kernel/entry.S | |
| parent | b6727b12dd2ffb4a890eb5b13a298230c29ba45d (diff) | |
sparc,leon: Sparc-Leon SMP support
Support SMP for a Sparc-Leon multiprocessor system.
Add Leon specific SMP code to arch/sparc/kernel/leon_smp.c.
Signed-off-by: Konrad Eisele <konrad@gaisler.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/sparc/kernel/entry.S')
| -rw-r--r-- | arch/sparc/kernel/entry.S | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/arch/sparc/kernel/entry.S b/arch/sparc/kernel/entry.S index f41ecc5ac0b4..ec9c7bc67d21 100644 --- a/arch/sparc/kernel/entry.S +++ b/arch/sparc/kernel/entry.S | |||
| @@ -400,6 +400,39 @@ linux_trap_ipi15_sun4d: | |||
| 400 | /* FIXME */ | 400 | /* FIXME */ |
| 401 | 1: b,a 1b | 401 | 1: b,a 1b |
| 402 | 402 | ||
| 403 | #ifdef CONFIG_SPARC_LEON | ||
| 404 | |||
| 405 | .globl smpleon_ticker | ||
| 406 | /* SMP per-cpu ticker interrupts are handled specially. */ | ||
| 407 | smpleon_ticker: | ||
| 408 | SAVE_ALL | ||
| 409 | or %l0, PSR_PIL, %g2 | ||
| 410 | wr %g2, 0x0, %psr | ||
| 411 | WRITE_PAUSE | ||
| 412 | wr %g2, PSR_ET, %psr | ||
| 413 | WRITE_PAUSE | ||
| 414 | call leon_percpu_timer_interrupt | ||
| 415 | add %sp, STACKFRAME_SZ, %o0 | ||
| 416 | wr %l0, PSR_ET, %psr | ||
| 417 | WRITE_PAUSE | ||
| 418 | RESTORE_ALL | ||
| 419 | |||
| 420 | .align 4 | ||
| 421 | .globl linux_trap_ipi15_leon | ||
| 422 | linux_trap_ipi15_leon: | ||
| 423 | SAVE_ALL | ||
| 424 | or %l0, PSR_PIL, %l4 | ||
| 425 | wr %l4, 0x0, %psr | ||
| 426 | WRITE_PAUSE | ||
| 427 | wr %l4, PSR_ET, %psr | ||
| 428 | WRITE_PAUSE | ||
| 429 | call leon_cross_call_irq | ||
| 430 | nop | ||
| 431 | b ret_trap_lockless_ipi | ||
| 432 | clr %l6 | ||
| 433 | |||
| 434 | #endif /* CONFIG_SPARC_LEON */ | ||
| 435 | |||
| 403 | #endif /* CONFIG_SMP */ | 436 | #endif /* CONFIG_SMP */ |
| 404 | 437 | ||
| 405 | /* This routine handles illegal instructions and privileged | 438 | /* This routine handles illegal instructions and privileged |
