aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mips/sibyte/sb1250/irq.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/mips/sibyte/sb1250/irq.c')
-rw-r--r--arch/mips/sibyte/sb1250/irq.c28
1 files changed, 13 insertions, 15 deletions
diff --git a/arch/mips/sibyte/sb1250/irq.c b/arch/mips/sibyte/sb1250/irq.c
index f9bd9f074517..f6d2e19592ea 100644
--- a/arch/mips/sibyte/sb1250/irq.c
+++ b/arch/mips/sibyte/sb1250/irq.c
@@ -254,8 +254,7 @@ void __init init_sb1250_irqs(void)
254} 254}
255 255
256 256
257static irqreturn_t sb1250_dummy_handler(int irq, void *dev_id, 257static irqreturn_t sb1250_dummy_handler(int irq, void *dev_id)
258 struct pt_regs *regs)
259{ 258{
260 return IRQ_NONE; 259 return IRQ_NONE;
261} 260}
@@ -403,7 +402,7 @@ void __init arch_init_irq(void)
403#define duart_out(reg, val) csr_out32(val, IOADDR(A_DUART_CHANREG(kgdb_port,reg))) 402#define duart_out(reg, val) csr_out32(val, IOADDR(A_DUART_CHANREG(kgdb_port,reg)))
404#define duart_in(reg) csr_in32(IOADDR(A_DUART_CHANREG(kgdb_port,reg))) 403#define duart_in(reg) csr_in32(IOADDR(A_DUART_CHANREG(kgdb_port,reg)))
405 404
406static void sb1250_kgdb_interrupt(struct pt_regs *regs) 405static void sb1250_kgdb_interrupt(void)
407{ 406{
408 /* 407 /*
409 * Clear break-change status (allow some time for the remote 408 * Clear break-change status (allow some time for the remote
@@ -414,16 +413,15 @@ static void sb1250_kgdb_interrupt(struct pt_regs *regs)
414 mdelay(500); 413 mdelay(500);
415 duart_out(R_DUART_CMD, V_DUART_MISC_CMD_RESET_BREAK_INT | 414 duart_out(R_DUART_CMD, V_DUART_MISC_CMD_RESET_BREAK_INT |
416 M_DUART_RX_EN | M_DUART_TX_EN); 415 M_DUART_RX_EN | M_DUART_TX_EN);
417 set_async_breakpoint(&regs->cp0_epc); 416 set_async_breakpoint(&get_irq_regs()->cp0_epc);
418} 417}
419 418
420#endif /* CONFIG_KGDB */ 419#endif /* CONFIG_KGDB */
421 420
422extern void sb1250_timer_interrupt(struct pt_regs *regs); 421extern void sb1250_timer_interrupt(void);
423extern void sb1250_mailbox_interrupt(struct pt_regs *regs); 422extern void sb1250_mailbox_interrupt(void);
424extern void sb1250_kgdb_interrupt(struct pt_regs *regs);
425 423
426asmlinkage void plat_irq_dispatch(struct pt_regs *regs) 424asmlinkage void plat_irq_dispatch(void)
427{ 425{
428 unsigned int pending; 426 unsigned int pending;
429 427
@@ -446,21 +444,21 @@ asmlinkage void plat_irq_dispatch(struct pt_regs *regs)
446 444
447#ifdef CONFIG_SIBYTE_SB1250_PROF 445#ifdef CONFIG_SIBYTE_SB1250_PROF
448 if (pending & CAUSEF_IP7) /* Cpu performance counter interrupt */ 446 if (pending & CAUSEF_IP7) /* Cpu performance counter interrupt */
449 sbprof_cpu_intr(exception_epc(regs)); 447 sbprof_cpu_intr();
450 else 448 else
451#endif 449#endif
452 450
453 if (pending & CAUSEF_IP4) 451 if (pending & CAUSEF_IP4)
454 sb1250_timer_interrupt(regs); 452 sb1250_timer_interrupt();
455 453
456#ifdef CONFIG_SMP 454#ifdef CONFIG_SMP
457 else if (pending & CAUSEF_IP3) 455 else if (pending & CAUSEF_IP3)
458 sb1250_mailbox_interrupt(regs); 456 sb1250_mailbox_interrupt();
459#endif 457#endif
460 458
461#ifdef CONFIG_KGDB 459#ifdef CONFIG_KGDB
462 else if (pending & CAUSEF_IP6) /* KGDB (uart 1) */ 460 else if (pending & CAUSEF_IP6) /* KGDB (uart 1) */
463 sb1250_kgdb_interrupt(regs); 461 sb1250_kgdb_interrupt();
464#endif 462#endif
465 463
466 else if (pending & CAUSEF_IP2) { 464 else if (pending & CAUSEF_IP2) {
@@ -475,9 +473,9 @@ asmlinkage void plat_irq_dispatch(struct pt_regs *regs)
475 mask = __raw_readq(IOADDR(A_IMR_REGISTER(smp_processor_id(), 473 mask = __raw_readq(IOADDR(A_IMR_REGISTER(smp_processor_id(),
476 R_IMR_INTERRUPT_STATUS_BASE))); 474 R_IMR_INTERRUPT_STATUS_BASE)));
477 if (mask) 475 if (mask)
478 do_IRQ(fls64(mask) - 1, regs); 476 do_IRQ(fls64(mask) - 1);
479 else 477 else
480 spurious_interrupt(regs); 478 spurious_interrupt();
481 } else 479 } else
482 spurious_interrupt(regs); 480 spurious_interrupt();
483} 481}