diff options
author | Atsushi Nemoto <anemo@mba.ocn.ne.jp> | 2006-11-13 11:13:18 -0500 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2006-11-29 20:14:46 -0500 |
commit | 1417836e81c0ab8f5a0bfeafa90d3eaa41b2a067 (patch) | |
tree | 0274893cb78ca2e1bb85c3eee0c07a85e0b83d04 /arch/mips/philips/pnx8550/common | |
parent | 1603b5aca4f15b34848fb5594d0c7b6333b99144 (diff) |
[MIPS] use generic_handle_irq, handle_level_irq, handle_percpu_irq
Further incorporation of generic irq framework. Replacing __do_IRQ()
by proper flow handler would make the irq handling path a bit simpler
and faster.
* use generic_handle_irq() instead of __do_IRQ().
* use handle_level_irq for obvious level-type irq chips.
* use handle_percpu_irq for irqs marked as IRQ_PER_CPU.
* setup .eoi routine for irq chips possibly used with handle_percpu_irq.
Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch/mips/philips/pnx8550/common')
-rw-r--r-- | arch/mips/philips/pnx8550/common/int.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/arch/mips/philips/pnx8550/common/int.c b/arch/mips/philips/pnx8550/common/int.c index e4bf494dd435..0dc23930edbd 100644 --- a/arch/mips/philips/pnx8550/common/int.c +++ b/arch/mips/philips/pnx8550/common/int.c | |||
@@ -192,7 +192,7 @@ void __init arch_init_irq(void) | |||
192 | int configPR; | 192 | int configPR; |
193 | 193 | ||
194 | for (i = 0; i < PNX8550_INT_CP0_TOTINT; i++) { | 194 | for (i = 0; i < PNX8550_INT_CP0_TOTINT; i++) { |
195 | set_irq_chip(i, &level_irq_type); | 195 | set_irq_chip_and_handler(i, &level_irq_type, handle_level_irq); |
196 | mask_irq(i); /* mask the irq just in case */ | 196 | mask_irq(i); /* mask the irq just in case */ |
197 | } | 197 | } |
198 | 198 | ||
@@ -229,7 +229,7 @@ void __init arch_init_irq(void) | |||
229 | /* mask/priority is still 0 so we will not get any | 229 | /* mask/priority is still 0 so we will not get any |
230 | * interrupts until it is unmasked */ | 230 | * interrupts until it is unmasked */ |
231 | 231 | ||
232 | set_irq_chip(i, &level_irq_type); | 232 | set_irq_chip_and_handler(i, &level_irq_type, handle_level_irq); |
233 | } | 233 | } |
234 | 234 | ||
235 | /* Priority level 0 */ | 235 | /* Priority level 0 */ |
@@ -238,19 +238,21 @@ void __init arch_init_irq(void) | |||
238 | /* Set int vector table address */ | 238 | /* Set int vector table address */ |
239 | PNX8550_GIC_VECTOR_0 = PNX8550_GIC_VECTOR_1 = 0; | 239 | PNX8550_GIC_VECTOR_0 = PNX8550_GIC_VECTOR_1 = 0; |
240 | 240 | ||
241 | set_irq_chip(MIPS_CPU_GIC_IRQ, &level_irq_type); | 241 | set_irq_chip_and_handler(MIPS_CPU_GIC_IRQ, &level_irq_type, |
242 | handle_level_irq); | ||
242 | setup_irq(MIPS_CPU_GIC_IRQ, &gic_action); | 243 | setup_irq(MIPS_CPU_GIC_IRQ, &gic_action); |
243 | 244 | ||
244 | /* init of Timer interrupts */ | 245 | /* init of Timer interrupts */ |
245 | for (i = PNX8550_INT_TIMER_MIN; i <= PNX8550_INT_TIMER_MAX; i++) | 246 | for (i = PNX8550_INT_TIMER_MIN; i <= PNX8550_INT_TIMER_MAX; i++) |
246 | set_irq_chip(i, &level_irq_type); | 247 | set_irq_chip_and_handler(i, &level_irq_type, handle_level_irq); |
247 | 248 | ||
248 | /* Stop Timer 1-3 */ | 249 | /* Stop Timer 1-3 */ |
249 | configPR = read_c0_config7(); | 250 | configPR = read_c0_config7(); |
250 | configPR |= 0x00000038; | 251 | configPR |= 0x00000038; |
251 | write_c0_config7(configPR); | 252 | write_c0_config7(configPR); |
252 | 253 | ||
253 | set_irq_chip(MIPS_CPU_TIMER_IRQ, &level_irq_type); | 254 | set_irq_chip_and_handler(MIPS_CPU_TIMER_IRQ, &level_irq_type, |
255 | handle_level_irq); | ||
254 | setup_irq(MIPS_CPU_TIMER_IRQ, &timer_action); | 256 | setup_irq(MIPS_CPU_TIMER_IRQ, &timer_action); |
255 | } | 257 | } |
256 | 258 | ||