diff options
author | Daniel Hellstrom <daniel@gaisler.com> | 2011-05-02 00:08:52 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-05-16 13:07:43 -0700 |
commit | 1ca0c808c60f171c1949b0e7f3a4c0516855f7a0 (patch) | |
tree | f1183b243d2e8ed42006891d80e0d077cabaf5e1 /arch/sparc/kernel/entry.S | |
parent | d6d048192b1d22cb8f09da0cc936095ec2cb969c (diff) |
sparc32,leon: Implemented SMP IPIs for LEON CPU
This patch implements SMP IPIs on LEON using software generated
IRQs to signal between CPUs.
The IPI IRQ number is set by using the ipi_num property in the
device tree, or defaults to 13. LEON SMP systems should reserve
IRQ 13 (and IRQ 15) to Linux in order for the defaults to work.
Signed-off-by: Daniel Hellstrom <daniel@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 | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/arch/sparc/kernel/entry.S b/arch/sparc/kernel/entry.S index 1879739c958..d759cf31c8e 100644 --- a/arch/sparc/kernel/entry.S +++ b/arch/sparc/kernel/entry.S @@ -401,6 +401,22 @@ linux_trap_ipi15_sun4d: 1: b,a 1b #ifdef CONFIG_SPARC_LEON + .globl smpleon_ipi + .extern leon_ipi_interrupt + /* SMP per-cpu IPI interrupts are handled specially. */ +smpleon_ipi: + SAVE_ALL + or %l0, PSR_PIL, %g2 + wr %g2, 0x0, %psr + WRITE_PAUSE + wr %g2, PSR_ET, %psr + WRITE_PAUSE + call leonsmp_ipi_interrupt + add %sp, STACKFRAME_SZ, %o1 ! pt_regs + wr %l0, PSR_ET, %psr + WRITE_PAUSE + RESTORE_ALL + .align 4 .globl linux_trap_ipi15_leon linux_trap_ipi15_leon: |