diff options
| author | Atsushi Nemoto <anemo@mba.ocn.ne.jp> | 2006-11-01 12:08:36 -0500 |
|---|---|---|
| committer | Ralf Baechle <ralf@linux-mips.org> | 2006-11-29 20:14:46 -0500 |
| commit | 1603b5aca4f15b34848fb5594d0c7b6333b99144 (patch) | |
| tree | 79272aa41d6510b7256df62e287676885c3960cf /arch/mips/jazz | |
| parent | c87b6ebaea034c0e0ce86127870cf1511a307b64 (diff) | |
[MIPS] IRQ cleanups
This is a big irq cleanup patch.
* Use set_irq_chip() to register irq_chip.
* Initialize .mask, .unmask, .mask_ack field. Functions for these
method are already exist in most case.
* Do not initialize .startup, .shutdown, .enable, .disable fields if
default routines provided by irq_chip_set_defaults() were suitable.
* Remove redundant irq_desc initializations.
* Remove unnecessary local_irq_save/local_irq_restore, spin_lock.
With this cleanup, it would be easy to switch to slightly lightwait
irq flow handlers (handle_level_irq(), etc.) instead of __do_IRQ().
Though whole this patch is quite large, changes in each irq_chip are
not quite simple. Please review and test on your platform. Thanks.
Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch/mips/jazz')
| -rw-r--r-- | arch/mips/jazz/irq.c | 27 |
1 files changed, 6 insertions, 21 deletions
diff --git a/arch/mips/jazz/irq.c b/arch/mips/jazz/irq.c index d5bd6b3a0933..4bbb6cb08d6e 100644 --- a/arch/mips/jazz/irq.c +++ b/arch/mips/jazz/irq.c | |||
| @@ -28,14 +28,6 @@ static void enable_r4030_irq(unsigned int irq) | |||
| 28 | spin_unlock_irqrestore(&r4030_lock, flags); | 28 | spin_unlock_irqrestore(&r4030_lock, flags); |
| 29 | } | 29 | } |
| 30 | 30 | ||
| 31 | static unsigned int startup_r4030_irq(unsigned int irq) | ||
| 32 | { | ||
| 33 | enable_r4030_irq(irq); | ||
| 34 | return 0; /* never anything pending */ | ||
| 35 | } | ||
| 36 | |||
| 37 | #define shutdown_r4030_irq disable_r4030_irq | ||
| 38 | |||
| 39 | void disable_r4030_irq(unsigned int irq) | 31 | void disable_r4030_irq(unsigned int irq) |
| 40 | { | 32 | { |
| 41 | unsigned int mask = ~(1 << (irq - JAZZ_PARALLEL_IRQ)); | 33 | unsigned int mask = ~(1 << (irq - JAZZ_PARALLEL_IRQ)); |
| @@ -47,8 +39,6 @@ void disable_r4030_irq(unsigned int irq) | |||
| 47 | spin_unlock_irqrestore(&r4030_lock, flags); | 39 | spin_unlock_irqrestore(&r4030_lock, flags); |
| 48 | } | 40 | } |
| 49 | 41 | ||
| 50 | #define mask_and_ack_r4030_irq disable_r4030_irq | ||
| 51 | |||
| 52 | static void end_r4030_irq(unsigned int irq) | 42 | static void end_r4030_irq(unsigned int irq) |
| 53 | { | 43 | { |
| 54 | if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS))) | 44 | if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS))) |
| @@ -57,11 +47,10 @@ static void end_r4030_irq(unsigned int irq) | |||
| 57 | 47 | ||
| 58 | static struct irq_chip r4030_irq_type = { | 48 | static struct irq_chip r4030_irq_type = { |
| 59 | .typename = "R4030", | 49 | .typename = "R4030", |
| 60 | .startup = startup_r4030_irq, | 50 | .ack = disable_r4030_irq, |
| 61 | .shutdown = shutdown_r4030_irq, | 51 | .mask = disable_r4030_irq, |
| 62 | .enable = enable_r4030_irq, | 52 | .mask_ack = disable_r4030_irq, |
| 63 | .disable = disable_r4030_irq, | 53 | .unmask = enable_r4030_irq, |
| 64 | .ack = mask_and_ack_r4030_irq, | ||
| 65 | .end = end_r4030_irq, | 54 | .end = end_r4030_irq, |
| 66 | }; | 55 | }; |
| 67 | 56 | ||
| @@ -69,12 +58,8 @@ void __init init_r4030_ints(void) | |||
| 69 | { | 58 | { |
| 70 | int i; | 59 | int i; |
| 71 | 60 | ||
| 72 | for (i = JAZZ_PARALLEL_IRQ; i <= JAZZ_TIMER_IRQ; i++) { | 61 | for (i = JAZZ_PARALLEL_IRQ; i <= JAZZ_TIMER_IRQ; i++) |
| 73 | irq_desc[i].status = IRQ_DISABLED; | 62 | set_irq_chip(i, &r4030_irq_type); |
| 74 | irq_desc[i].action = 0; | ||
| 75 | irq_desc[i].depth = 1; | ||
| 76 | irq_desc[i].chip = &r4030_irq_type; | ||
| 77 | } | ||
| 78 | 63 | ||
| 79 | r4030_write_reg16(JAZZ_IO_IRQ_ENABLE, 0); | 64 | r4030_write_reg16(JAZZ_IO_IRQ_ENABLE, 0); |
| 80 | r4030_read_reg16(JAZZ_IO_IRQ_SOURCE); /* clear pending IRQs */ | 65 | r4030_read_reg16(JAZZ_IO_IRQ_SOURCE); /* clear pending IRQs */ |
