Commit e70a4fa1 authored by Mark A. Greer's avatar Mark A. Greer Committed by Linus Torvalds

[PATCH] ppc32: mv64360_pic non-zero irq base

Add support for non-zero irq base to mv64360_pic code.

- Fix mv64360 pic code to handle non-zero mv64x60_irq_base
- Cleanup mv64360 entries in /proc/interrupts
Signed-off-by: default avatarJames Chapman <jchapman@katalix.com>
Signed-off-by: default avatarMark A. Greer <mgreer@mvista.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent b0a09f0c
...@@ -64,7 +64,7 @@ static irqreturn_t mv64360_pci_error_int_handler(int, void *, struct pt_regs *); ...@@ -64,7 +64,7 @@ static irqreturn_t mv64360_pci_error_int_handler(int, void *, struct pt_regs *);
/* ========================== local declarations =========================== */ /* ========================== local declarations =========================== */
struct hw_interrupt_type mv64360_pic = { struct hw_interrupt_type mv64360_pic = {
.typename = " mv64360_pic ", .typename = " mv64360 ",
.enable = mv64360_unmask_irq, .enable = mv64360_unmask_irq,
.disable = mv64360_mask_irq, .disable = mv64360_mask_irq,
.ack = mv64360_mask_irq, .ack = mv64360_mask_irq,
...@@ -155,9 +155,10 @@ mv64360_get_irq(struct pt_regs *regs) ...@@ -155,9 +155,10 @@ mv64360_get_irq(struct pt_regs *regs)
*/ */
int cpu_nr = smp_processor_id(); int cpu_nr = smp_processor_id();
if (cpu_nr == 1) { if (cpu_nr == 1) {
if (!(mv64x60_read(&bh, MV64360_IC_MAIN_CAUSE_LO) & (1 << 28))) if (!(mv64x60_read(&bh, MV64360_IC_MAIN_CAUSE_LO) &
(1 << MV64x60_IRQ_DOORBELL)))
return -1; return -1;
return 28; return mv64360_irq_base + MV64x60_IRQ_DOORBELL;
} }
#endif #endif
...@@ -171,7 +172,7 @@ mv64360_get_irq(struct pt_regs *regs) ...@@ -171,7 +172,7 @@ mv64360_get_irq(struct pt_regs *regs)
if (irq == -1) if (irq == -1)
irq = -2; /* bogus interrupt, should never happen */ irq = -2; /* bogus interrupt, should never happen */
else { else {
if ((irq >= 24) && (irq < 28)) { if ((irq >= 24) && (irq < MV64x60_IRQ_DOORBELL)) {
irq_gpp = mv64x60_read(&bh, irq_gpp = mv64x60_read(&bh,
MV64x60_GPP_INTR_CAUSE); MV64x60_GPP_INTR_CAUSE);
irq_gpp = __ilog2(irq_gpp & irq_gpp = __ilog2(irq_gpp &
...@@ -217,8 +218,9 @@ mv64360_unmask_irq(unsigned int irq) ...@@ -217,8 +218,9 @@ mv64360_unmask_irq(unsigned int irq)
{ {
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
/* second CPU gets only doorbell interrupts */ /* second CPU gets only doorbell interrupts */
if ((irq - mv64360_irq_base) == 28) { if ((irq - mv64360_irq_base) == MV64x60_IRQ_DOORBELL) {
mv64x60_set_bits(&bh, MV64360_IC_CPU1_INTR_MASK_LO, (1 << 28)); mv64x60_set_bits(&bh, MV64360_IC_CPU1_INTR_MASK_LO,
(1 << MV64x60_IRQ_DOORBELL));
return; return;
} }
#endif #endif
...@@ -257,8 +259,9 @@ static void ...@@ -257,8 +259,9 @@ static void
mv64360_mask_irq(unsigned int irq) mv64360_mask_irq(unsigned int irq)
{ {
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
if ((irq - mv64360_irq_base) == 28) { if ((irq - mv64360_irq_base) == MV64x60_IRQ_DOORBELL) {
mv64x60_clr_bits(&bh, MV64360_IC_CPU1_INTR_MASK_LO, (1 << 28)); mv64x60_clr_bits(&bh, MV64360_IC_CPU1_INTR_MASK_LO,
(1 << MV64x60_IRQ_DOORBELL));
return; return;
} }
#endif #endif
...@@ -371,7 +374,7 @@ mv64360_register_hdlrs(void) ...@@ -371,7 +374,7 @@ mv64360_register_hdlrs(void)
/* Clear old errors and register CPU interface error intr handler */ /* Clear old errors and register CPU interface error intr handler */
mv64x60_write(&bh, MV64x60_CPU_ERR_CAUSE, 0); mv64x60_write(&bh, MV64x60_CPU_ERR_CAUSE, 0);
if ((rc = request_irq(MV64x60_IRQ_CPU_ERR, if ((rc = request_irq(MV64x60_IRQ_CPU_ERR + mv64360_irq_base,
mv64360_cpu_error_int_handler, SA_INTERRUPT, CPU_INTR_STR, 0))) mv64360_cpu_error_int_handler, SA_INTERRUPT, CPU_INTR_STR, 0)))
printk(KERN_WARNING "Can't register cpu error handler: %d", rc); printk(KERN_WARNING "Can't register cpu error handler: %d", rc);
...@@ -380,7 +383,7 @@ mv64360_register_hdlrs(void) ...@@ -380,7 +383,7 @@ mv64360_register_hdlrs(void)
/* Clear old errors and register internal SRAM error intr handler */ /* Clear old errors and register internal SRAM error intr handler */
mv64x60_write(&bh, MV64360_SRAM_ERR_CAUSE, 0); mv64x60_write(&bh, MV64360_SRAM_ERR_CAUSE, 0);
if ((rc = request_irq(MV64360_IRQ_SRAM_PAR_ERR, if ((rc = request_irq(MV64360_IRQ_SRAM_PAR_ERR + mv64360_irq_base,
mv64360_sram_error_int_handler,SA_INTERRUPT,SRAM_INTR_STR, 0))) mv64360_sram_error_int_handler,SA_INTERRUPT,SRAM_INTR_STR, 0)))
printk(KERN_WARNING "Can't register SRAM error handler: %d",rc); printk(KERN_WARNING "Can't register SRAM error handler: %d",rc);
...@@ -397,7 +400,8 @@ mv64360_register_hdlrs(void) ...@@ -397,7 +400,8 @@ mv64360_register_hdlrs(void)
/* Clear old errors and register PCI 0 error intr handler */ /* Clear old errors and register PCI 0 error intr handler */
mv64x60_write(&bh, MV64x60_PCI0_ERR_CAUSE, 0); mv64x60_write(&bh, MV64x60_PCI0_ERR_CAUSE, 0);
if ((rc = request_irq(MV64360_IRQ_PCI0, mv64360_pci_error_int_handler, if ((rc = request_irq(MV64360_IRQ_PCI0 + mv64360_irq_base,
mv64360_pci_error_int_handler,
SA_INTERRUPT, PCI0_INTR_STR, (void *)0))) SA_INTERRUPT, PCI0_INTR_STR, (void *)0)))
printk(KERN_WARNING "Can't register pci 0 error handler: %d", printk(KERN_WARNING "Can't register pci 0 error handler: %d",
rc); rc);
...@@ -407,7 +411,8 @@ mv64360_register_hdlrs(void) ...@@ -407,7 +411,8 @@ mv64360_register_hdlrs(void)
/* Clear old errors and register PCI 1 error intr handler */ /* Clear old errors and register PCI 1 error intr handler */
mv64x60_write(&bh, MV64x60_PCI1_ERR_CAUSE, 0); mv64x60_write(&bh, MV64x60_PCI1_ERR_CAUSE, 0);
if ((rc = request_irq(MV64360_IRQ_PCI1, mv64360_pci_error_int_handler, if ((rc = request_irq(MV64360_IRQ_PCI1 + mv64360_irq_base,
mv64360_pci_error_int_handler,
SA_INTERRUPT, PCI1_INTR_STR, (void *)1))) SA_INTERRUPT, PCI1_INTR_STR, (void *)1)))
printk(KERN_WARNING "Can't register pci 1 error handler: %d", printk(KERN_WARNING "Can't register pci 1 error handler: %d",
rc); rc);
......
...@@ -45,6 +45,7 @@ ...@@ -45,6 +45,7 @@
#define MV64x60_IRQ_TIMER_2_3 9 #define MV64x60_IRQ_TIMER_2_3 9
#define MV64x60_IRQ_TIMER_4_5 10 #define MV64x60_IRQ_TIMER_4_5 10
#define MV64x60_IRQ_TIMER_6_7 11 #define MV64x60_IRQ_TIMER_6_7 11
#define MV64x60_IRQ_DOORBELL 28
#define MV64x60_IRQ_ETH_0 32 #define MV64x60_IRQ_ETH_0 32
#define MV64x60_IRQ_ETH_1 33 #define MV64x60_IRQ_ETH_1 33
#define MV64x60_IRQ_ETH_2 34 #define MV64x60_IRQ_ETH_2 34
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment