[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>
Šī revīzija ir iekļauta:

revīziju iesūtīja
Ralf Baechle

vecāks
c87b6ebaea
revīzija
1603b5aca4
@@ -417,14 +417,7 @@ void vr41xx_disable_bcuint(void)
|
||||
|
||||
EXPORT_SYMBOL(vr41xx_disable_bcuint);
|
||||
|
||||
static unsigned int startup_sysint1_irq(unsigned int irq)
|
||||
{
|
||||
icu1_set(MSYSINT1REG, 1 << SYSINT1_IRQ_TO_PIN(irq));
|
||||
|
||||
return 0; /* never anything pending */
|
||||
}
|
||||
|
||||
static void shutdown_sysint1_irq(unsigned int irq)
|
||||
static void disable_sysint1_irq(unsigned int irq)
|
||||
{
|
||||
icu1_clear(MSYSINT1REG, 1 << SYSINT1_IRQ_TO_PIN(irq));
|
||||
}
|
||||
@@ -434,9 +427,6 @@ static void enable_sysint1_irq(unsigned int irq)
|
||||
icu1_set(MSYSINT1REG, 1 << SYSINT1_IRQ_TO_PIN(irq));
|
||||
}
|
||||
|
||||
#define disable_sysint1_irq shutdown_sysint1_irq
|
||||
#define ack_sysint1_irq shutdown_sysint1_irq
|
||||
|
||||
static void end_sysint1_irq(unsigned int irq)
|
||||
{
|
||||
if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS)))
|
||||
@@ -445,22 +435,14 @@ static void end_sysint1_irq(unsigned int irq)
|
||||
|
||||
static struct irq_chip sysint1_irq_type = {
|
||||
.typename = "SYSINT1",
|
||||
.startup = startup_sysint1_irq,
|
||||
.shutdown = shutdown_sysint1_irq,
|
||||
.enable = enable_sysint1_irq,
|
||||
.disable = disable_sysint1_irq,
|
||||
.ack = ack_sysint1_irq,
|
||||
.ack = disable_sysint1_irq,
|
||||
.mask = disable_sysint1_irq,
|
||||
.mask_ack = disable_sysint1_irq,
|
||||
.unmask = enable_sysint1_irq,
|
||||
.end = end_sysint1_irq,
|
||||
};
|
||||
|
||||
static unsigned int startup_sysint2_irq(unsigned int irq)
|
||||
{
|
||||
icu2_set(MSYSINT2REG, 1 << SYSINT2_IRQ_TO_PIN(irq));
|
||||
|
||||
return 0; /* never anything pending */
|
||||
}
|
||||
|
||||
static void shutdown_sysint2_irq(unsigned int irq)
|
||||
static void disable_sysint2_irq(unsigned int irq)
|
||||
{
|
||||
icu2_clear(MSYSINT2REG, 1 << SYSINT2_IRQ_TO_PIN(irq));
|
||||
}
|
||||
@@ -470,9 +452,6 @@ static void enable_sysint2_irq(unsigned int irq)
|
||||
icu2_set(MSYSINT2REG, 1 << SYSINT2_IRQ_TO_PIN(irq));
|
||||
}
|
||||
|
||||
#define disable_sysint2_irq shutdown_sysint2_irq
|
||||
#define ack_sysint2_irq shutdown_sysint2_irq
|
||||
|
||||
static void end_sysint2_irq(unsigned int irq)
|
||||
{
|
||||
if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS)))
|
||||
@@ -481,11 +460,10 @@ static void end_sysint2_irq(unsigned int irq)
|
||||
|
||||
static struct irq_chip sysint2_irq_type = {
|
||||
.typename = "SYSINT2",
|
||||
.startup = startup_sysint2_irq,
|
||||
.shutdown = shutdown_sysint2_irq,
|
||||
.enable = enable_sysint2_irq,
|
||||
.disable = disable_sysint2_irq,
|
||||
.ack = ack_sysint2_irq,
|
||||
.ack = disable_sysint2_irq,
|
||||
.mask = disable_sysint2_irq,
|
||||
.mask_ack = disable_sysint2_irq,
|
||||
.unmask = enable_sysint2_irq,
|
||||
.end = end_sysint2_irq,
|
||||
};
|
||||
|
||||
@@ -723,10 +701,10 @@ static int __init vr41xx_icu_init(void)
|
||||
icu2_write(MGIUINTHREG, 0xffff);
|
||||
|
||||
for (i = SYSINT1_IRQ_BASE; i <= SYSINT1_IRQ_LAST; i++)
|
||||
irq_desc[i].chip = &sysint1_irq_type;
|
||||
set_irq_chip(i, &sysint1_irq_type);
|
||||
|
||||
for (i = SYSINT2_IRQ_BASE; i <= SYSINT2_IRQ_LAST; i++)
|
||||
irq_desc[i].chip = &sysint2_irq_type;
|
||||
set_irq_chip(i, &sysint2_irq_type);
|
||||
|
||||
cascade_irq(INT0_IRQ, icu_get_irq);
|
||||
cascade_irq(INT1_IRQ, icu_get_irq);
|
||||
|
Atsaukties uz šo jaunā problēmā
Block a user