diff options
Diffstat (limited to 'arch/mips/lasat/interrupt.c')
| -rw-r--r-- | arch/mips/lasat/interrupt.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/arch/mips/lasat/interrupt.c b/arch/mips/lasat/interrupt.c index 852a41901a5e..2d3472b21ebb 100644 --- a/arch/mips/lasat/interrupt.c +++ b/arch/mips/lasat/interrupt.c | |||
| @@ -27,14 +27,13 @@ | |||
| 27 | #include <asm/bootinfo.h> | 27 | #include <asm/bootinfo.h> |
| 28 | #include <asm/irq.h> | 28 | #include <asm/irq.h> |
| 29 | #include <asm/lasat/lasatint.h> | 29 | #include <asm/lasat/lasatint.h> |
| 30 | #include <asm/time.h> | ||
| 30 | #include <asm/gdb-stub.h> | 31 | #include <asm/gdb-stub.h> |
| 31 | 32 | ||
| 32 | static volatile int *lasat_int_status = NULL; | 33 | static volatile int *lasat_int_status = NULL; |
| 33 | static volatile int *lasat_int_mask = NULL; | 34 | static volatile int *lasat_int_mask = NULL; |
| 34 | static volatile int lasat_int_mask_shift; | 35 | static volatile int lasat_int_mask_shift; |
| 35 | 36 | ||
| 36 | extern asmlinkage void lasatIRQ(void); | ||
| 37 | |||
| 38 | void disable_lasat_irq(unsigned int irq_nr) | 37 | void disable_lasat_irq(unsigned int irq_nr) |
| 39 | { | 38 | { |
| 40 | unsigned long flags; | 39 | unsigned long flags; |
| @@ -109,11 +108,17 @@ static unsigned long get_int_status_200(void) | |||
| 109 | return int_status; | 108 | return int_status; |
| 110 | } | 109 | } |
| 111 | 110 | ||
| 112 | void lasat_hw0_irqdispatch(struct pt_regs *regs) | 111 | asmlinkage void plat_irq_dispatch(struct pt_regs *regs) |
| 113 | { | 112 | { |
| 114 | unsigned long int_status; | 113 | unsigned long int_status; |
| 114 | unsigned int cause = read_c0_cause(); | ||
| 115 | int irq; | 115 | int irq; |
| 116 | 116 | ||
| 117 | if (cause & CAUSEF_IP7) { /* R4000 count / compare IRQ */ | ||
| 118 | ll_timer_interrupt(7, regs); | ||
| 119 | return; | ||
| 120 | } | ||
| 121 | |||
| 117 | int_status = get_int_status(); | 122 | int_status = get_int_status(); |
| 118 | 123 | ||
| 119 | /* if int_status == 0, then the interrupt has already been cleared */ | 124 | /* if int_status == 0, then the interrupt has already been cleared */ |
| @@ -147,9 +152,6 @@ void __init arch_init_irq(void) | |||
| 147 | panic("arch_init_irq: mips_machtype incorrect"); | 152 | panic("arch_init_irq: mips_machtype incorrect"); |
| 148 | } | 153 | } |
| 149 | 154 | ||
| 150 | /* Now safe to set the exception vector. */ | ||
| 151 | set_except_vector(0, lasatIRQ); | ||
| 152 | |||
| 153 | for (i = 0; i <= LASATINT_END; i++) { | 155 | for (i = 0; i <= LASATINT_END; i++) { |
| 154 | irq_desc[i].status = IRQ_DISABLED; | 156 | irq_desc[i].status = IRQ_DISABLED; |
| 155 | irq_desc[i].action = 0; | 157 | irq_desc[i].action = 0; |
