* [patch 00/38] mips: irq chip overhaul and cleanup
@ 2011-03-23 21:08 Thomas Gleixner
2011-03-23 21:08 ` [patch 01/38] mips; Convert alchemy to new irq chip functions Thomas Gleixner
` (37 more replies)
0 siblings, 38 replies; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-23 21:08 UTC (permalink / raw)
To: linux-mips; +Cc: Ralf Baechle
Ralf,
the following series converts all mips irq chips to the new callbacks
and makes use of the enhancements which were made in the genirq core
code. That series includes two patches from Lars which do the initial
conversion of jz4740.
It requires two patches which are in
git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip irq/for-mips
Please pull that branch into your tree.
The series is compile tested as far as the defconfigs compile. Some of
them refuse to build before that series, so I ignored them.
tarball of the quilt series can be found here for your conveniance:
http://master.kernel.org/~tglx/patches.tar.bz2
Thanks,
tglx
---
Kconfig | 2
alchemy/common/irq.c | 98 ++++++++--------
alchemy/devboards/bcsr.c | 18 +-
ar7/irq.c | 42 +++---
ath79/irq.c | 23 +--
bcm63xx/irq.c | 77 +++++-------
cavium-octeon/octeon-irq.c | 237 ++++++++++++++++++---------------------
dec/ioasic-irq.c | 60 ++-------
dec/kn02-irq.c | 23 +--
emma/markeins/irq.c | 67 ++++-------
include/asm/irq.h | 64 +++++-----
jazz/irq.c | 14 --
jz4740/gpio.c | 111 ++++++++----------
jz4740/irq.c | 32 +++--
kernel/i8259.c | 37 ++----
kernel/irq-gic.c | 44 ++-----
kernel/irq-gt641xx.c | 26 ++--
kernel/irq-msc01.c | 51 +++-----
kernel/irq-rm7000.c | 18 +-
kernel/irq-rm9000.c | 49 +++-----
kernel/irq.c | 49 --------
kernel/irq_cpu.c | 46 +++----
kernel/irq_txx9.c | 28 ++--
kernel/smtc.c | 13 --
lasat/interrupt.c | 16 +-
loongson/common/bonito-irq.c | 16 +-
mti-malta/malta-smtc.c | 9 -
pci/msi-octeon.c | 20 +--
pmc-sierra/msp71xx/msp_irq_cic.c | 41 ++----
pmc-sierra/msp71xx/msp_irq_per.c | 80 ++-----------
pmc-sierra/msp71xx/msp_irq_slp.c | 18 +-
pnx833x/common/interrupts.c | 98 ++--------------
pnx8550/common/int.c | 18 +-
powertv/asic/irq_asic.c | 13 --
rb532/irq.c | 32 ++---
sgi-ip22/ip22-int.c | 60 ++++-----
sgi-ip27/ip27-irq.c | 38 ++----
sgi-ip27/ip27-timer.c | 11 -
sgi-ip32/ip32-irq.c | 134 ++++++----------------
sibyte/bcm1480/irq.c | 55 +++------
sibyte/sb1250/irq.c | 53 ++------
sni/a20r.c | 23 ---
sni/pcimt.c | 21 ---
sni/pcit.c | 21 ---
sni/rm200.c | 42 ++----
txx9/generic/irq_tx4939.c | 28 ++--
txx9/jmr3927/irq.c | 14 --
txx9/rbtx4927/irq.c | 58 ++++-----
txx9/rbtx4938/irq.c | 54 +++-----
txx9/rbtx4939/irq.c | 14 --
vr41xx/common/icu.c | 72 +++++------
vr41xx/common/irq.c | 19 +--
52 files changed, 944 insertions(+), 1363 deletions(-)
^ permalink raw reply [flat|nested] 97+ messages in thread
* [patch 01/38] mips; Convert alchemy to new irq chip functions
2011-03-23 21:08 [patch 00/38] mips: irq chip overhaul and cleanup Thomas Gleixner
@ 2011-03-23 21:08 ` Thomas Gleixner
2011-03-24 7:41 ` Manuel Lauss
2011-03-23 21:08 ` [patch 02/38] mips: ar7: Convert to new irq_chip functions Thomas Gleixner
` (36 subsequent siblings)
37 siblings, 1 reply; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-23 21:08 UTC (permalink / raw)
To: linux-mips; +Cc: Ralf Baechle
[-- Attachment #1: mips-alch.patch --]
[-- Type: text/plain, Size: 9603 bytes --]
Fix the deadlock in set_type() while at it.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/mips/alchemy/common/irq.c | 98 ++++++++++++++++++-------------------
arch/mips/alchemy/devboards/bcsr.c | 18 +++---
2 files changed, 59 insertions(+), 57 deletions(-)
Index: linux-mips-next/arch/mips/alchemy/common/irq.c
===================================================================
--- linux-mips-next.orig/arch/mips/alchemy/common/irq.c
+++ linux-mips-next/arch/mips/alchemy/common/irq.c
@@ -39,7 +39,7 @@
#include <asm/mach-pb1x00/pb1000.h>
#endif
-static int au1x_ic_settype(unsigned int irq, unsigned int flow_type);
+static int au1x_ic_settype(struct irq_data *d, unsigned int flow_type);
/* NOTE on interrupt priorities: The original writers of this code said:
*
@@ -218,17 +218,17 @@ struct au1xxx_irqmap au1200_irqmap[] __i
};
-static void au1x_ic0_unmask(unsigned int irq_nr)
+static void au1x_ic0_unmask(struct irq_data *d)
{
- unsigned int bit = irq_nr - AU1000_INTC0_INT_BASE;
+ unsigned int bit = d->irq - AU1000_INTC0_INT_BASE;
au_writel(1 << bit, IC0_MASKSET);
au_writel(1 << bit, IC0_WAKESET);
au_sync();
}
-static void au1x_ic1_unmask(unsigned int irq_nr)
+static void au1x_ic1_unmask(struct irq_data *d)
{
- unsigned int bit = irq_nr - AU1000_INTC1_INT_BASE;
+ unsigned int bit = d->irq - AU1000_INTC1_INT_BASE;
au_writel(1 << bit, IC1_MASKSET);
au_writel(1 << bit, IC1_WAKESET);
@@ -236,31 +236,31 @@ static void au1x_ic1_unmask(unsigned int
* nowhere in the current kernel sources is it disabled. --mlau
*/
#if defined(CONFIG_MIPS_PB1000)
- if (irq_nr == AU1000_GPIO15_INT)
+ if (d->irq == AU1000_GPIO15_INT)
au_writel(0x4000, PB1000_MDR); /* enable int */
#endif
au_sync();
}
-static void au1x_ic0_mask(unsigned int irq_nr)
+static void au1x_ic0_mask(struct irq_data *d)
{
- unsigned int bit = irq_nr - AU1000_INTC0_INT_BASE;
+ unsigned int bit = d->irq - AU1000_INTC0_INT_BASE;
au_writel(1 << bit, IC0_MASKCLR);
au_writel(1 << bit, IC0_WAKECLR);
au_sync();
}
-static void au1x_ic1_mask(unsigned int irq_nr)
+static void au1x_ic1_mask(struct irq_data *d)
{
- unsigned int bit = irq_nr - AU1000_INTC1_INT_BASE;
+ unsigned int bit = d->irq - AU1000_INTC1_INT_BASE;
au_writel(1 << bit, IC1_MASKCLR);
au_writel(1 << bit, IC1_WAKECLR);
au_sync();
}
-static void au1x_ic0_ack(unsigned int irq_nr)
+static void au1x_ic0_ack(struct irq_data *d)
{
- unsigned int bit = irq_nr - AU1000_INTC0_INT_BASE;
+ unsigned int bit = d->irq - AU1000_INTC0_INT_BASE;
/*
* This may assume that we don't get interrupts from
@@ -271,9 +271,9 @@ static void au1x_ic0_ack(unsigned int ir
au_sync();
}
-static void au1x_ic1_ack(unsigned int irq_nr)
+static void au1x_ic1_ack(struct irq_data *d)
{
- unsigned int bit = irq_nr - AU1000_INTC1_INT_BASE;
+ unsigned int bit = d->irq - AU1000_INTC1_INT_BASE;
/*
* This may assume that we don't get interrupts from
@@ -284,9 +284,9 @@ static void au1x_ic1_ack(unsigned int ir
au_sync();
}
-static void au1x_ic0_maskack(unsigned int irq_nr)
+static void au1x_ic0_maskack(struct irq_data *d)
{
- unsigned int bit = irq_nr - AU1000_INTC0_INT_BASE;
+ unsigned int bit = d->irq - AU1000_INTC0_INT_BASE;
au_writel(1 << bit, IC0_WAKECLR);
au_writel(1 << bit, IC0_MASKCLR);
@@ -295,9 +295,9 @@ static void au1x_ic0_maskack(unsigned in
au_sync();
}
-static void au1x_ic1_maskack(unsigned int irq_nr)
+static void au1x_ic1_maskack(struct irq_data *d)
{
- unsigned int bit = irq_nr - AU1000_INTC1_INT_BASE;
+ unsigned int bit = d->irq - AU1000_INTC1_INT_BASE;
au_writel(1 << bit, IC1_WAKECLR);
au_writel(1 << bit, IC1_MASKCLR);
@@ -306,9 +306,9 @@ static void au1x_ic1_maskack(unsigned in
au_sync();
}
-static int au1x_ic1_setwake(unsigned int irq, unsigned int on)
+static int au1x_ic1_setwake(struct irq_data *d, unsigned int on)
{
- int bit = irq - AU1000_INTC1_INT_BASE;
+ int bit = d->irq - AU1000_INTC1_INT_BASE;
unsigned long wakemsk, flags;
/* only GPIO 0-7 can act as wakeup source. Fortunately these
@@ -336,28 +336,30 @@ static int au1x_ic1_setwake(unsigned int
*/
static struct irq_chip au1x_ic0_chip = {
.name = "Alchemy-IC0",
- .ack = au1x_ic0_ack,
- .mask = au1x_ic0_mask,
- .mask_ack = au1x_ic0_maskack,
- .unmask = au1x_ic0_unmask,
- .set_type = au1x_ic_settype,
+ .irq_ack = au1x_ic0_ack,
+ .irq_mask = au1x_ic0_mask,
+ .irq_mask_ack = au1x_ic0_maskack,
+ .irq_unmask = au1x_ic0_unmask,
+ .irq_set_type = au1x_ic_settype,
};
static struct irq_chip au1x_ic1_chip = {
.name = "Alchemy-IC1",
- .ack = au1x_ic1_ack,
- .mask = au1x_ic1_mask,
- .mask_ack = au1x_ic1_maskack,
- .unmask = au1x_ic1_unmask,
- .set_type = au1x_ic_settype,
- .set_wake = au1x_ic1_setwake,
+ .irq_ack = au1x_ic1_ack,
+ .irq_mask = au1x_ic1_mask,
+ .irq_mask_ack = au1x_ic1_maskack,
+ .irq_unmask = au1x_ic1_unmask,
+ .irq_set_type = au1x_ic_settype,
+ .irq_set_wake = au1x_ic1_setwake,
};
-static int au1x_ic_settype(unsigned int irq, unsigned int flow_type)
+static int au1x_ic_settype(struct irq_data *d, unsigned int flow_type)
{
struct irq_chip *chip;
unsigned long icr[6];
- unsigned int bit, ic;
+ unsigned int bit, ic, irq = d->irq;
+ irq_flow_handler_t handler = NULL;
+ unsigned char *name = NULL;
int ret;
if (irq >= AU1000_INTC1_INT_BASE) {
@@ -387,47 +389,47 @@ static int au1x_ic_settype(unsigned int
au_writel(1 << bit, icr[5]);
au_writel(1 << bit, icr[4]);
au_writel(1 << bit, icr[0]);
- set_irq_chip_and_handler_name(irq, chip,
- handle_edge_irq, "riseedge");
+ handler = handle_edge_irq;
+ name = "riseedge";
break;
case IRQ_TYPE_EDGE_FALLING: /* 0:1:0 */
au_writel(1 << bit, icr[5]);
au_writel(1 << bit, icr[1]);
au_writel(1 << bit, icr[3]);
- set_irq_chip_and_handler_name(irq, chip,
- handle_edge_irq, "falledge");
+ handler = handle_edge_irq;
+ name = "falledge";
break;
case IRQ_TYPE_EDGE_BOTH: /* 0:1:1 */
au_writel(1 << bit, icr[5]);
au_writel(1 << bit, icr[1]);
au_writel(1 << bit, icr[0]);
- set_irq_chip_and_handler_name(irq, chip,
- handle_edge_irq, "bothedge");
+ handler = handle_edge_irq;
+ name = "bothedge";
break;
case IRQ_TYPE_LEVEL_HIGH: /* 1:0:1 */
au_writel(1 << bit, icr[2]);
au_writel(1 << bit, icr[4]);
au_writel(1 << bit, icr[0]);
- set_irq_chip_and_handler_name(irq, chip,
- handle_level_irq, "hilevel");
+ handler = handle_level_irq;
+ name = "hilevel";
break;
case IRQ_TYPE_LEVEL_LOW: /* 1:1:0 */
au_writel(1 << bit, icr[2]);
au_writel(1 << bit, icr[1]);
au_writel(1 << bit, icr[3]);
- set_irq_chip_and_handler_name(irq, chip,
- handle_level_irq, "lowlevel");
+ handler = handle_level_irq;
+ name = "lowlevel";
break;
case IRQ_TYPE_NONE: /* 0:0:0 */
au_writel(1 << bit, icr[5]);
au_writel(1 << bit, icr[4]);
au_writel(1 << bit, icr[3]);
- /* set at least chip so we can call set_irq_type() on it */
- set_irq_chip(irq, chip);
break;
default:
ret = -EINVAL;
}
+ __irq_set_chip_handler_name_locked(d->irq, chip, handler, name);
+
au_sync();
return ret;
@@ -504,11 +506,11 @@ static void __init au1000_init_irq(struc
*/
for (i = AU1000_INTC0_INT_BASE;
(i < AU1000_INTC0_INT_BASE + 32); i++)
- au1x_ic_settype(i, IRQ_TYPE_NONE);
+ au1x_ic_settype(irq_get_irq_data(i), IRQ_TYPE_NONE);
for (i = AU1000_INTC1_INT_BASE;
(i < AU1000_INTC1_INT_BASE + 32); i++)
- au1x_ic_settype(i, IRQ_TYPE_NONE);
+ au1x_ic_settype(irq_get_irq_data(i), IRQ_TYPE_NONE);
/*
* Initialize IC0, which is fixed per processor.
@@ -526,7 +528,7 @@ static void __init au1000_init_irq(struc
au_writel(1 << bit, IC0_ASSIGNSET);
}
- au1x_ic_settype(irq_nr, map->im_type);
+ au1x_ic_settype(irq_get_irq_data(irq_nr), map->im_type);
++map;
}
Index: linux-mips-next/arch/mips/alchemy/devboards/bcsr.c
===================================================================
--- linux-mips-next.orig/arch/mips/alchemy/devboards/bcsr.c
+++ linux-mips-next/arch/mips/alchemy/devboards/bcsr.c
@@ -97,26 +97,26 @@ static void bcsr_csc_handler(unsigned in
* CPLD generates tons of spurious interrupts (at least on my DB1200).
* -- mlau
*/
-static void bcsr_irq_mask(unsigned int irq_nr)
+static void bcsr_irq_mask(struct irq_data *d)
{
- unsigned short v = 1 << (irq_nr - bcsr_csc_base);
+ unsigned short v = 1 << (d->irq - bcsr_csc_base);
__raw_writew(v, bcsr_virt + BCSR_REG_INTCLR);
__raw_writew(v, bcsr_virt + BCSR_REG_MASKCLR);
wmb();
}
-static void bcsr_irq_maskack(unsigned int irq_nr)
+static void bcsr_irq_maskack(struct irq_data *d)
{
- unsigned short v = 1 << (irq_nr - bcsr_csc_base);
+ unsigned short v = 1 << (d->irq - bcsr_csc_base);
__raw_writew(v, bcsr_virt + BCSR_REG_INTCLR);
__raw_writew(v, bcsr_virt + BCSR_REG_MASKCLR);
__raw_writew(v, bcsr_virt + BCSR_REG_INTSTAT); /* ack */
wmb();
}
-static void bcsr_irq_unmask(unsigned int irq_nr)
+static void bcsr_irq_unmask(struct irq_data *d)
{
- unsigned short v = 1 << (irq_nr - bcsr_csc_base);
+ unsigned short v = 1 << (d->irq - bcsr_csc_base);
__raw_writew(v, bcsr_virt + BCSR_REG_INTSET);
__raw_writew(v, bcsr_virt + BCSR_REG_MASKSET);
wmb();
@@ -124,9 +124,9 @@ static void bcsr_irq_unmask(unsigned int
static struct irq_chip bcsr_irq_type = {
.name = "CPLD",
- .mask = bcsr_irq_mask,
- .mask_ack = bcsr_irq_maskack,
- .unmask = bcsr_irq_unmask,
+ .irq_mask = bcsr_irq_mask,
+ .irq_mask_ack = bcsr_irq_maskack,
+ .irq_unmask = bcsr_irq_unmask,
};
void __init bcsr_init_irq(int csc_start, int csc_end, int hook_irq)
^ permalink raw reply [flat|nested] 97+ messages in thread
* [patch 02/38] mips: ar7: Convert to new irq_chip functions
2011-03-23 21:08 [patch 00/38] mips: irq chip overhaul and cleanup Thomas Gleixner
2011-03-23 21:08 ` [patch 01/38] mips; Convert alchemy to new irq chip functions Thomas Gleixner
@ 2011-03-23 21:08 ` Thomas Gleixner
2011-03-24 14:09 ` Ralf Baechle
2011-03-23 21:08 ` [patch 03/38] mips: ath79: " Thomas Gleixner
` (35 subsequent siblings)
37 siblings, 1 reply; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-23 21:08 UTC (permalink / raw)
To: linux-mips; +Cc: Ralf Baechle
[-- Attachment #1: mipsar7.patch --]
[-- Type: text/plain, Size: 2504 bytes --]
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/mips/ar7/irq.c | 42 +++++++++++++++++++++---------------------
1 file changed, 21 insertions(+), 21 deletions(-)
Index: linux-mips-next/arch/mips/ar7/irq.c
===================================================================
--- linux-mips-next.orig/arch/mips/ar7/irq.c
+++ linux-mips-next/arch/mips/ar7/irq.c
@@ -49,51 +49,51 @@
static int ar7_irq_base;
-static void ar7_unmask_irq(unsigned int irq)
+static void ar7_unmask_irq(struct irq_data *d)
{
- writel(1 << ((irq - ar7_irq_base) % 32),
- REG(ESR_OFFSET(irq - ar7_irq_base)));
+ writel(1 << ((d->irq - ar7_irq_base) % 32),
+ REG(ESR_OFFSET(d->irq - ar7_irq_base)));
}
-static void ar7_mask_irq(unsigned int irq)
+static void ar7_mask_irq(struct irq_data *d)
{
- writel(1 << ((irq - ar7_irq_base) % 32),
- REG(ECR_OFFSET(irq - ar7_irq_base)));
+ writel(1 << ((d->irq - ar7_irq_base) % 32),
+ REG(ECR_OFFSET(d->irq - ar7_irq_base)));
}
-static void ar7_ack_irq(unsigned int irq)
+static void ar7_ack_irq(struct irq_data *d)
{
- writel(1 << ((irq - ar7_irq_base) % 32),
- REG(CR_OFFSET(irq - ar7_irq_base)));
+ writel(1 << ((d->irq - ar7_irq_base) % 32),
+ REG(CR_OFFSET(d->irq - ar7_irq_base)));
}
-static void ar7_unmask_sec_irq(unsigned int irq)
+static void ar7_unmask_sec_irq(struct irq_data *d)
{
- writel(1 << (irq - ar7_irq_base - 40), REG(SEC_ESR_OFFSET));
+ writel(1 << (d->irq - ar7_irq_base - 40), REG(SEC_ESR_OFFSET));
}
-static void ar7_mask_sec_irq(unsigned int irq)
+static void ar7_mask_sec_irq(struct irq_data *d)
{
- writel(1 << (irq - ar7_irq_base - 40), REG(SEC_ECR_OFFSET));
+ writel(1 << (d->irq - ar7_irq_base - 40), REG(SEC_ECR_OFFSET));
}
-static void ar7_ack_sec_irq(unsigned int irq)
+static void ar7_ack_sec_irq(struct irq_data *d)
{
- writel(1 << (irq - ar7_irq_base - 40), REG(SEC_CR_OFFSET));
+ writel(1 << (d->irq - ar7_irq_base - 40), REG(SEC_CR_OFFSET));
}
static struct irq_chip ar7_irq_type = {
.name = "AR7",
- .unmask = ar7_unmask_irq,
- .mask = ar7_mask_irq,
- .ack = ar7_ack_irq
+ .irq_unmask = ar7_unmask_irq,
+ .irq_mask = ar7_mask_irq,
+ .irq_ack = ar7_ack_irq
};
static struct irq_chip ar7_sec_irq_type = {
.name = "AR7",
- .unmask = ar7_unmask_sec_irq,
- .mask = ar7_mask_sec_irq,
- .ack = ar7_ack_sec_irq,
+ .irq_unmask = ar7_unmask_sec_irq,
+ .irq_mask = ar7_mask_sec_irq,
+ .irq_ack = ar7_ack_sec_irq,
};
static struct irqaction ar7_cascade_action = {
^ permalink raw reply [flat|nested] 97+ messages in thread
* [patch 03/38] mips: ath79: Convert to new irq_chip functions
2011-03-23 21:08 [patch 00/38] mips: irq chip overhaul and cleanup Thomas Gleixner
2011-03-23 21:08 ` [patch 01/38] mips; Convert alchemy to new irq chip functions Thomas Gleixner
2011-03-23 21:08 ` [patch 02/38] mips: ar7: Convert to new irq_chip functions Thomas Gleixner
@ 2011-03-23 21:08 ` Thomas Gleixner
2011-03-24 14:07 ` Ralf Baechle
2011-03-23 21:08 ` [patch 04/38] mips: bcm63xx: " Thomas Gleixner
` (34 subsequent siblings)
37 siblings, 1 reply; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-23 21:08 UTC (permalink / raw)
To: linux-mips; +Cc: Ralf Baechle
[-- Attachment #1: mips-ath79.patch --]
[-- Type: text/plain, Size: 2600 bytes --]
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/mips/ath79/irq.c | 23 ++++++++++-------------
1 file changed, 10 insertions(+), 13 deletions(-)
Index: linux-mips-next/arch/mips/ath79/irq.c
===================================================================
--- linux-mips-next.orig/arch/mips/ath79/irq.c
+++ linux-mips-next/arch/mips/ath79/irq.c
@@ -62,13 +62,12 @@ static void ath79_misc_irq_handler(unsig
spurious_interrupt();
}
-static void ar71xx_misc_irq_unmask(unsigned int irq)
+static void ar71xx_misc_irq_unmask(struct irq_data *d)
{
+ unsigned int irq = d->irq - ATH79_MISC_IRQ_BASE;
void __iomem *base = ath79_reset_base;
u32 t;
- irq -= ATH79_MISC_IRQ_BASE;
-
t = __raw_readl(base + AR71XX_RESET_REG_MISC_INT_ENABLE);
__raw_writel(t | (1 << irq), base + AR71XX_RESET_REG_MISC_INT_ENABLE);
@@ -76,13 +75,12 @@ static void ar71xx_misc_irq_unmask(unsig
__raw_readl(base + AR71XX_RESET_REG_MISC_INT_ENABLE);
}
-static void ar71xx_misc_irq_mask(unsigned int irq)
+static void ar71xx_misc_irq_mask(struct irq_data *d)
{
+ unsigned int irq = d->irq - ATH79_MISC_IRQ_BASE;
void __iomem *base = ath79_reset_base;
u32 t;
- irq -= ATH79_MISC_IRQ_BASE;
-
t = __raw_readl(base + AR71XX_RESET_REG_MISC_INT_ENABLE);
__raw_writel(t & ~(1 << irq), base + AR71XX_RESET_REG_MISC_INT_ENABLE);
@@ -90,13 +88,12 @@ static void ar71xx_misc_irq_mask(unsigne
__raw_readl(base + AR71XX_RESET_REG_MISC_INT_ENABLE);
}
-static void ar724x_misc_irq_ack(unsigned int irq)
+static void ar724x_misc_irq_ack(struct irq_data *d)
{
+ unsigned int irq = d->irq - ATH79_MISC_IRQ_BASE;
void __iomem *base = ath79_reset_base;
u32 t;
- irq -= ATH79_MISC_IRQ_BASE;
-
t = __raw_readl(base + AR71XX_RESET_REG_MISC_INT_STATUS);
__raw_writel(t & ~(1 << irq), base + AR71XX_RESET_REG_MISC_INT_STATUS);
@@ -106,8 +103,8 @@ static void ar724x_misc_irq_ack(unsigned
static struct irq_chip ath79_misc_irq_chip = {
.name = "MISC",
- .unmask = ar71xx_misc_irq_unmask,
- .mask = ar71xx_misc_irq_mask,
+ .irq_unmask = ar71xx_misc_irq_unmask,
+ .irq_mask = ar71xx_misc_irq_mask,
};
static void __init ath79_misc_irq_init(void)
@@ -119,9 +116,9 @@ static void __init ath79_misc_irq_init(v
__raw_writel(0, base + AR71XX_RESET_REG_MISC_INT_STATUS);
if (soc_is_ar71xx() || soc_is_ar913x())
- ath79_misc_irq_chip.mask_ack = ar71xx_misc_irq_mask;
+ ath79_misc_irq_chip.irq_mask_ack = ar71xx_misc_irq_mask;
else if (soc_is_ar724x())
- ath79_misc_irq_chip.ack = ar724x_misc_irq_ack;
+ ath79_misc_irq_chip.irq_ack = ar724x_misc_irq_ack;
else
BUG();
^ permalink raw reply [flat|nested] 97+ messages in thread
* [patch 04/38] mips: bcm63xx: Convert to new irq_chip functions
2011-03-23 21:08 [patch 00/38] mips: irq chip overhaul and cleanup Thomas Gleixner
` (2 preceding siblings ...)
2011-03-23 21:08 ` [patch 03/38] mips: ath79: " Thomas Gleixner
@ 2011-03-23 21:08 ` Thomas Gleixner
2011-03-24 14:10 ` Ralf Baechle
2011-03-23 21:08 ` [patch 05/38] mips: cavium-octeon: " Thomas Gleixner
` (33 subsequent siblings)
37 siblings, 1 reply; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-23 21:08 UTC (permalink / raw)
To: linux-mips; +Cc: Ralf Baechle
[-- Attachment #1: mips-bcm63xx.patch --]
[-- Type: text/plain, Size: 5033 bytes --]
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/mips/bcm63xx/irq.c | 77 +++++++++++++++++++-----------------------------
1 file changed, 32 insertions(+), 45 deletions(-)
Index: linux-mips-next/arch/mips/bcm63xx/irq.c
===================================================================
--- linux-mips-next.orig/arch/mips/bcm63xx/irq.c
+++ linux-mips-next/arch/mips/bcm63xx/irq.c
@@ -76,88 +76,80 @@ asmlinkage void plat_irq_dispatch(void)
* internal IRQs operations: only mask/unmask on PERF irq mask
* register.
*/
-static inline void bcm63xx_internal_irq_mask(unsigned int irq)
+static inline void bcm63xx_internal_irq_mask(struct irq_data *d)
{
+ unsigned int irq = d->irq - IRQ_INTERNAL_BASE;
u32 mask;
- irq -= IRQ_INTERNAL_BASE;
mask = bcm_perf_readl(PERF_IRQMASK_REG);
mask &= ~(1 << irq);
bcm_perf_writel(mask, PERF_IRQMASK_REG);
}
-static void bcm63xx_internal_irq_unmask(unsigned int irq)
+static void bcm63xx_internal_irq_unmask(struct irq_data *d)
{
+ unsigned int irq = d->irq - IRQ_INTERNAL_BASE;
u32 mask;
- irq -= IRQ_INTERNAL_BASE;
mask = bcm_perf_readl(PERF_IRQMASK_REG);
mask |= (1 << irq);
bcm_perf_writel(mask, PERF_IRQMASK_REG);
}
-static unsigned int bcm63xx_internal_irq_startup(unsigned int irq)
-{
- bcm63xx_internal_irq_unmask(irq);
- return 0;
-}
-
/*
* external IRQs operations: mask/unmask and clear on PERF external
* irq control register.
*/
-static void bcm63xx_external_irq_mask(unsigned int irq)
+static void bcm63xx_external_irq_mask(struct irq_data *d)
{
+ unsigned int irq = d->irq - IRQ_EXT_BASE;
u32 reg;
- irq -= IRQ_EXT_BASE;
reg = bcm_perf_readl(PERF_EXTIRQ_CFG_REG);
reg &= ~EXTIRQ_CFG_MASK(irq);
bcm_perf_writel(reg, PERF_EXTIRQ_CFG_REG);
}
-static void bcm63xx_external_irq_unmask(unsigned int irq)
+static void bcm63xx_external_irq_unmask(struct irq_data *d)
{
+ unsigned int irq = d->irq - IRQ_EXT_BASE;
u32 reg;
- irq -= IRQ_EXT_BASE;
reg = bcm_perf_readl(PERF_EXTIRQ_CFG_REG);
reg |= EXTIRQ_CFG_MASK(irq);
bcm_perf_writel(reg, PERF_EXTIRQ_CFG_REG);
}
-static void bcm63xx_external_irq_clear(unsigned int irq)
+static void bcm63xx_external_irq_clear(struct irq_data *d)
{
+ unsigned int irq = d->irq - IRQ_EXT_BASE;
u32 reg;
- irq -= IRQ_EXT_BASE;
reg = bcm_perf_readl(PERF_EXTIRQ_CFG_REG);
reg |= EXTIRQ_CFG_CLEAR(irq);
bcm_perf_writel(reg, PERF_EXTIRQ_CFG_REG);
}
-static unsigned int bcm63xx_external_irq_startup(unsigned int irq)
+static unsigned int bcm63xx_external_irq_startup(struct irq_data *d)
{
- set_c0_status(0x100 << (irq - IRQ_MIPS_BASE));
+ set_c0_status(0x100 << (d->irq - IRQ_MIPS_BASE));
irq_enable_hazard();
- bcm63xx_external_irq_unmask(irq);
+ bcm63xx_external_irq_unmask(d);
return 0;
}
-static void bcm63xx_external_irq_shutdown(unsigned int irq)
+static void bcm63xx_external_irq_shutdown(struct irq_data *d)
{
- bcm63xx_external_irq_mask(irq);
- clear_c0_status(0x100 << (irq - IRQ_MIPS_BASE));
+ bcm63xx_external_irq_mask(d);
+ clear_c0_status(0x100 << (d->irq - IRQ_MIPS_BASE));
irq_disable_hazard();
}
-static int bcm63xx_external_irq_set_type(unsigned int irq,
+static int bcm63xx_external_irq_set_type(struct irq_data *d,
unsigned int flow_type)
{
+ unsigned int irq = d->irq - IRQ_EXT_BASE;
u32 reg;
- struct irq_desc *desc = irq_desc + irq;
-
- irq -= IRQ_EXT_BASE;
flow_type &= IRQ_TYPE_SENSE_MASK;
@@ -199,37 +191,32 @@ static int bcm63xx_external_irq_set_type
}
bcm_perf_writel(reg, PERF_EXTIRQ_CFG_REG);
- if (flow_type & (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH)) {
- desc->status |= IRQ_LEVEL;
- desc->handle_irq = handle_level_irq;
- } else {
- desc->handle_irq = handle_edge_irq;
- }
+ irqd_set_trigger_type(d, flow_type);
+ if (flow_type & (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH))
+ __irq_set_handler_locked(d->irq, handle_level_irq);
+ else
+ __irq_set_handler_locked(d->irq, handle_edge_irq);
- return 0;
+ return IRQ_SET_MASK_OK_NOCOPY;
}
static struct irq_chip bcm63xx_internal_irq_chip = {
.name = "bcm63xx_ipic",
- .startup = bcm63xx_internal_irq_startup,
- .shutdown = bcm63xx_internal_irq_mask,
-
- .mask = bcm63xx_internal_irq_mask,
- .mask_ack = bcm63xx_internal_irq_mask,
- .unmask = bcm63xx_internal_irq_unmask,
+ .irq_mask = bcm63xx_internal_irq_mask,
+ .irq_unmask = bcm63xx_internal_irq_unmask,
};
static struct irq_chip bcm63xx_external_irq_chip = {
.name = "bcm63xx_epic",
- .startup = bcm63xx_external_irq_startup,
- .shutdown = bcm63xx_external_irq_shutdown,
+ .irq_startup = bcm63xx_external_irq_startup,
+ .irq_shutdown = bcm63xx_external_irq_shutdown,
- .ack = bcm63xx_external_irq_clear,
+ .irq_ack = bcm63xx_external_irq_clear,
- .mask = bcm63xx_external_irq_mask,
- .unmask = bcm63xx_external_irq_unmask,
+ .irq_mask = bcm63xx_external_irq_mask,
+ .irq_unmask = bcm63xx_external_irq_unmask,
- .set_type = bcm63xx_external_irq_set_type,
+ .irq_set_type = bcm63xx_external_irq_set_type,
};
static struct irqaction cpu_ip2_cascade_action = {
^ permalink raw reply [flat|nested] 97+ messages in thread
* [patch 05/38] mips: cavium-octeon: Convert to new irq_chip functions
2011-03-23 21:08 [patch 00/38] mips: irq chip overhaul and cleanup Thomas Gleixner
` (3 preceding siblings ...)
2011-03-23 21:08 ` [patch 04/38] mips: bcm63xx: " Thomas Gleixner
@ 2011-03-23 21:08 ` Thomas Gleixner
2011-03-23 21:31 ` David Daney
2011-03-23 21:08 ` [patch 06/38] mips: dec: " Thomas Gleixner
` (32 subsequent siblings)
37 siblings, 1 reply; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-23 21:08 UTC (permalink / raw)
To: linux-mips; +Cc: Ralf Baechle
[-- Attachment #1: mips-cav-oct.patch --]
[-- Type: text/plain, Size: 20796 bytes --]
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/mips/cavium-octeon/octeon-irq.c | 237 ++++++++++++++++-------------------
arch/mips/pci/msi-octeon.c | 20 +-
2 files changed, 120 insertions(+), 137 deletions(-)
Index: linux-mips-next/arch/mips/cavium-octeon/octeon-irq.c
===================================================================
--- linux-mips-next.orig/arch/mips/cavium-octeon/octeon-irq.c
+++ linux-mips-next/arch/mips/cavium-octeon/octeon-irq.c
@@ -23,9 +23,9 @@ static int octeon_coreid_for_cpu(int cpu
#endif
}
-static void octeon_irq_core_ack(unsigned int irq)
+static void octeon_irq_core_ack(struct irq_data *d)
{
- unsigned int bit = irq - OCTEON_IRQ_SW0;
+ unsigned int bit = d->irq - OCTEON_IRQ_SW0;
/*
* We don't need to disable IRQs to make these atomic since
* they are already disabled earlier in the low level
@@ -37,17 +37,9 @@ static void octeon_irq_core_ack(unsigned
clear_c0_cause(0x100 << bit);
}
-static void octeon_irq_core_eoi(unsigned int irq)
+static void octeon_irq_core_eoi(struct irq_data *d)
{
- struct irq_desc *desc = irq_to_desc(irq);
- unsigned int bit = irq - OCTEON_IRQ_SW0;
- /*
- * If an IRQ is being processed while we are disabling it the
- * handler will attempt to unmask the interrupt after it has
- * been disabled.
- */
- if ((unlikely(desc->status & IRQ_DISABLED)))
- return;
+ unsigned int bit = d->irq - OCTEON_IRQ_SW0;
/*
* We don't need to disable IRQs to make these atomic since
* they are already disabled earlier in the low level
@@ -56,10 +48,10 @@ static void octeon_irq_core_eoi(unsigned
set_c0_status(0x100 << bit);
}
-static void octeon_irq_core_enable(unsigned int irq)
+static void octeon_irq_core_enable(struct irq_data *d)
{
unsigned long flags;
- unsigned int bit = irq - OCTEON_IRQ_SW0;
+ unsigned int bit = d->irq - OCTEON_IRQ_SW0;
/*
* We need to disable interrupts to make sure our updates are
@@ -83,22 +75,23 @@ static void octeon_irq_core_disable_loca
local_irq_restore(flags);
}
-static void octeon_irq_core_disable(unsigned int irq)
+static void octeon_irq_core_disable(struct irq_data *d)
{
#ifdef CONFIG_SMP
on_each_cpu((void (*)(void *)) octeon_irq_core_disable_local,
- (void *) (long) irq, 1);
+ (void *) (long) d->irq, 1);
#else
- octeon_irq_core_disable_local(irq);
+ octeon_irq_core_disable_local(d->irq);
#endif
}
static struct irq_chip octeon_irq_chip_core = {
.name = "Core",
- .enable = octeon_irq_core_enable,
- .disable = octeon_irq_core_disable,
- .ack = octeon_irq_core_ack,
- .eoi = octeon_irq_core_eoi,
+ .irq_enable = octeon_irq_core_enable,
+ .irq_disable = octeon_irq_core_disable,
+ .irq_ack = octeon_irq_core_ack,
+ .irq_eoi = octeon_irq_core_eoi,
+ .flags = IRQCHIP_EOI_IF_HANDLED,
};
@@ -141,7 +134,7 @@ static void octeon_irq_ciu0_ack(unsigned
clear_c0_status(0x100 << 2);
}
-static void octeon_irq_ciu0_eoi(unsigned int irq)
+static void octeon_irq_ciu0_eoi(struct irq_data *d)
{
/*
* Enable all CIU interrupts again. We don't need to disable
@@ -151,17 +144,16 @@ static void octeon_irq_ciu0_eoi(unsigned
set_c0_status(0x100 << 2);
}
-static int next_coreid_for_irq(struct irq_desc *desc)
+static int next_coreid_for_irq(struct irq_data *d)
{
-
#ifdef CONFIG_SMP
int coreid;
- int weight = cpumask_weight(desc->affinity);
+ int weight = cpumask_weight(d->affinity);
if (weight > 1) {
int cpu = smp_processor_id();
for (;;) {
- cpu = cpumask_next(cpu, desc->affinity);
+ cpu = cpumask_next(cpu, d->affinity);
if (cpu >= nr_cpu_ids) {
cpu = -1;
continue;
@@ -171,7 +163,7 @@ static int next_coreid_for_irq(struct ir
}
coreid = octeon_coreid_for_cpu(cpu);
} else if (weight == 1) {
- coreid = octeon_coreid_for_cpu(cpumask_first(desc->affinity));
+ coreid = octeon_coreid_for_cpu(cpumask_first(d->affinity));
} else {
coreid = cvmx_get_core_num();
}
@@ -181,13 +173,12 @@ static int next_coreid_for_irq(struct ir
#endif
}
-static void octeon_irq_ciu0_enable(unsigned int irq)
+static void octeon_irq_ciu0_enable(struct irq_data *d)
{
- struct irq_desc *desc = irq_to_desc(irq);
- int coreid = next_coreid_for_irq(desc);
+ int coreid = next_coreid_for_irq(d);
unsigned long flags;
uint64_t en0;
- int bit = irq - OCTEON_IRQ_WORKQ0; /* Bit 0-63 of EN0 */
+ int bit = d->irq - OCTEON_IRQ_WORKQ0; /* Bit 0-63 of EN0 */
raw_spin_lock_irqsave(&octeon_irq_ciu0_lock, flags);
en0 = cvmx_read_csr(CVMX_CIU_INTX_EN0(coreid * 2));
@@ -197,12 +188,12 @@ static void octeon_irq_ciu0_enable(unsig
raw_spin_unlock_irqrestore(&octeon_irq_ciu0_lock, flags);
}
-static void octeon_irq_ciu0_enable_mbox(unsigned int irq)
+static void octeon_irq_ciu0_enable_mbox(struct irq_data *d)
{
int coreid = cvmx_get_core_num();
unsigned long flags;
uint64_t en0;
- int bit = irq - OCTEON_IRQ_WORKQ0; /* Bit 0-63 of EN0 */
+ int bit = d->irq - OCTEON_IRQ_WORKQ0; /* Bit 0-63 of EN0 */
raw_spin_lock_irqsave(&octeon_irq_ciu0_lock, flags);
en0 = cvmx_read_csr(CVMX_CIU_INTX_EN0(coreid * 2));
@@ -212,9 +203,9 @@ static void octeon_irq_ciu0_enable_mbox(
raw_spin_unlock_irqrestore(&octeon_irq_ciu0_lock, flags);
}
-static void octeon_irq_ciu0_disable(unsigned int irq)
+static void octeon_irq_ciu0_disable(struct irq_data *d)
{
- int bit = irq - OCTEON_IRQ_WORKQ0; /* Bit 0-63 of EN0 */
+ int bit = d->irq - OCTEON_IRQ_WORKQ0; /* Bit 0-63 of EN0 */
unsigned long flags;
uint64_t en0;
int cpu;
@@ -237,26 +228,22 @@ static void octeon_irq_ciu0_disable(unsi
* Enable the irq on the next core in the affinity set for chips that
* have the EN*_W1{S,C} registers.
*/
-static void octeon_irq_ciu0_enable_v2(unsigned int irq)
+static void octeon_irq_ciu0_enable_v2(struct irq_data *d)
{
- int index;
- u64 mask = 1ull << (irq - OCTEON_IRQ_WORKQ0);
- struct irq_desc *desc = irq_to_desc(irq);
+ u64 mask = 1ull << (d->irq - OCTEON_IRQ_WORKQ0);
+ int index = next_coreid_for_irq(d) * 2;
- if ((desc->status & IRQ_DISABLED) == 0) {
- index = next_coreid_for_irq(desc) * 2;
- cvmx_write_csr(CVMX_CIU_INTX_EN0_W1S(index), mask);
- }
+ cvmx_write_csr(CVMX_CIU_INTX_EN0_W1S(index), mask);
}
/*
* Enable the irq on the current CPU for chips that
* have the EN*_W1{S,C} registers.
*/
-static void octeon_irq_ciu0_enable_mbox_v2(unsigned int irq)
+static void octeon_irq_ciu0_enable_mbox_v2(struct irq_data *d)
{
int index;
- u64 mask = 1ull << (irq - OCTEON_IRQ_WORKQ0);
+ u64 mask = 1ull << (d->irq - OCTEON_IRQ_WORKQ0);
index = cvmx_get_core_num() * 2;
cvmx_write_csr(CVMX_CIU_INTX_EN0_W1S(index), mask);
@@ -297,23 +284,21 @@ static void octeon_irq_ciu0_ack_v2(unsig
* Enable the irq on the current core for chips that have the EN*_W1{S,C}
* registers.
*/
-static void octeon_irq_ciu0_eoi_mbox_v2(unsigned int irq)
+static void octeon_irq_ciu0_eoi_mbox_v2(struct irq_data *d)
{
- struct irq_desc *desc = irq_to_desc(irq);
int index = cvmx_get_core_num() * 2;
- u64 mask = 1ull << (irq - OCTEON_IRQ_WORKQ0);
+ u64 mask = 1ull << (d->irq - OCTEON_IRQ_WORKQ0);
- if (likely((desc->status & IRQ_DISABLED) == 0))
- cvmx_write_csr(CVMX_CIU_INTX_EN0_W1S(index), mask);
+ cvmx_write_csr(CVMX_CIU_INTX_EN0_W1S(index), mask);
}
/*
* Disable the irq on the all cores for chips that have the EN*_W1{S,C}
* registers.
*/
-static void octeon_irq_ciu0_disable_all_v2(unsigned int irq)
+static void octeon_irq_ciu0_disable_all_v2(struct irq_data *d)
{
- u64 mask = 1ull << (irq - OCTEON_IRQ_WORKQ0);
+ u64 mask = 1ull << (d->irq - OCTEON_IRQ_WORKQ0);
int index;
int cpu;
for_each_online_cpu(cpu) {
@@ -323,13 +308,14 @@ static void octeon_irq_ciu0_disable_all_
}
#ifdef CONFIG_SMP
-static int octeon_irq_ciu0_set_affinity(unsigned int irq, const struct cpumask *dest)
+static int octeon_irq_ciu0_set_affinity(struct irq_data *d,
+ const struct cpumask *dest, bool force)
{
int cpu;
- struct irq_desc *desc = irq_to_desc(irq);
+ struct irq_desc *desc = irq_to_desc(d->irq);
int enable_one = (desc->status & IRQ_DISABLED) == 0;
unsigned long flags;
- int bit = irq - OCTEON_IRQ_WORKQ0; /* Bit 0-63 of EN0 */
+ int bit = d->irq - OCTEON_IRQ_WORKQ0; /* Bit 0-63 of EN0 */
/*
* For non-v2 CIU, we will allow only single CPU affinity.
@@ -366,14 +352,15 @@ static int octeon_irq_ciu0_set_affinity(
* Set affinity for the irq for chips that have the EN*_W1{S,C}
* registers.
*/
-static int octeon_irq_ciu0_set_affinity_v2(unsigned int irq,
- const struct cpumask *dest)
+static int octeon_irq_ciu0_set_affinity_v2(struct irq_data *d,
+ const struct cpumask *dest,
+ bool force)
{
int cpu;
int index;
- struct irq_desc *desc = irq_to_desc(irq);
+ struct irq_desc *desc = irq_to_desc(d->irq);
int enable_one = (desc->status & IRQ_DISABLED) == 0;
- u64 mask = 1ull << (irq - OCTEON_IRQ_WORKQ0);
+ u64 mask = 1ull << (d->irq - OCTEON_IRQ_WORKQ0);
for_each_online_cpu(cpu) {
index = octeon_coreid_for_cpu(cpu) * 2;
@@ -393,37 +380,38 @@ static int octeon_irq_ciu0_set_affinity_
*/
static struct irq_chip octeon_irq_chip_ciu0_v2 = {
.name = "CIU0",
- .enable = octeon_irq_ciu0_enable_v2,
- .disable = octeon_irq_ciu0_disable_all_v2,
- .eoi = octeon_irq_ciu0_enable_v2,
+ .irq_enable = octeon_irq_ciu0_enable_v2,
+ .irq_disable = octeon_irq_ciu0_disable_all_v2,
+ .irq_eoi = octeon_irq_ciu0_enable_v2,
#ifdef CONFIG_SMP
- .set_affinity = octeon_irq_ciu0_set_affinity_v2,
+ .irq_set_affinity = octeon_irq_ciu0_set_affinity_v2,
#endif
};
static struct irq_chip octeon_irq_chip_ciu0 = {
.name = "CIU0",
- .enable = octeon_irq_ciu0_enable,
- .disable = octeon_irq_ciu0_disable,
- .eoi = octeon_irq_ciu0_eoi,
+ .irq_enable = octeon_irq_ciu0_enable,
+ .irq_disable = octeon_irq_ciu0_disable,
+ .irq_eoi = octeon_irq_ciu0_eoi,
#ifdef CONFIG_SMP
- .set_affinity = octeon_irq_ciu0_set_affinity,
+ .irq_set_affinity = octeon_irq_ciu0_set_affinity,
#endif
};
/* The mbox versions don't do any affinity or round-robin. */
static struct irq_chip octeon_irq_chip_ciu0_mbox_v2 = {
.name = "CIU0-M",
- .enable = octeon_irq_ciu0_enable_mbox_v2,
- .disable = octeon_irq_ciu0_disable,
- .eoi = octeon_irq_ciu0_eoi_mbox_v2,
+ .irq_enable = octeon_irq_ciu0_enable_mbox_v2,
+ .irq_disable = octeon_irq_ciu0_disable,
+ .irq_eoi = octeon_irq_ciu0_eoi_mbox_v2,
+ .flags = IRQCHIP_EOI_IF_HANDLED,
};
static struct irq_chip octeon_irq_chip_ciu0_mbox = {
.name = "CIU0-M",
- .enable = octeon_irq_ciu0_enable_mbox,
- .disable = octeon_irq_ciu0_disable,
- .eoi = octeon_irq_ciu0_eoi,
+ .irq_enable = octeon_irq_ciu0_enable_mbox,
+ .irq_disable = octeon_irq_ciu0_disable,
+ .irq_eoi = octeon_irq_ciu0_eoi,
};
static void octeon_irq_ciu1_ack(unsigned int irq)
@@ -440,7 +428,7 @@ static void octeon_irq_ciu1_ack(unsigned
clear_c0_status(0x100 << 3);
}
-static void octeon_irq_ciu1_eoi(unsigned int irq)
+static void octeon_irq_ciu1_eoi(struct irq_data *d)
{
/*
* Enable all CIU interrupts again. We don't need to disable
@@ -450,13 +438,12 @@ static void octeon_irq_ciu1_eoi(unsigned
set_c0_status(0x100 << 3);
}
-static void octeon_irq_ciu1_enable(unsigned int irq)
+static void octeon_irq_ciu1_enable(struct irq_data *d)
{
- struct irq_desc *desc = irq_to_desc(irq);
- int coreid = next_coreid_for_irq(desc);
+ int coreid = next_coreid_for_irq(d);
unsigned long flags;
uint64_t en1;
- int bit = irq - OCTEON_IRQ_WDOG0; /* Bit 0-63 of EN1 */
+ int bit = d->irq - OCTEON_IRQ_WDOG0; /* Bit 0-63 of EN1 */
raw_spin_lock_irqsave(&octeon_irq_ciu1_lock, flags);
en1 = cvmx_read_csr(CVMX_CIU_INTX_EN1(coreid * 2 + 1));
@@ -470,11 +457,11 @@ static void octeon_irq_ciu1_enable(unsig
* Watchdog interrupts are special. They are associated with a single
* core, so we hardwire the affinity to that core.
*/
-static void octeon_irq_ciu1_wd_enable(unsigned int irq)
+static void octeon_irq_ciu1_wd_enable(struct irq_data *d)
{
unsigned long flags;
uint64_t en1;
- int bit = irq - OCTEON_IRQ_WDOG0; /* Bit 0-63 of EN1 */
+ int bit = d->irq - OCTEON_IRQ_WDOG0; /* Bit 0-63 of EN1 */
int coreid = bit;
raw_spin_lock_irqsave(&octeon_irq_ciu1_lock, flags);
@@ -485,9 +472,9 @@ static void octeon_irq_ciu1_wd_enable(un
raw_spin_unlock_irqrestore(&octeon_irq_ciu1_lock, flags);
}
-static void octeon_irq_ciu1_disable(unsigned int irq)
+static void octeon_irq_ciu1_disable(struct irq_data *d)
{
- int bit = irq - OCTEON_IRQ_WDOG0; /* Bit 0-63 of EN1 */
+ int bit = d->irq - OCTEON_IRQ_WDOG0; /* Bit 0-63 of EN1 */
unsigned long flags;
uint64_t en1;
int cpu;
@@ -510,33 +497,25 @@ static void octeon_irq_ciu1_disable(unsi
* Enable the irq on the current core for chips that have the EN*_W1{S,C}
* registers.
*/
-static void octeon_irq_ciu1_enable_v2(unsigned int irq)
+static void octeon_irq_ciu1_enable_v2(struct irq_data *d)
{
- int index;
- u64 mask = 1ull << (irq - OCTEON_IRQ_WDOG0);
- struct irq_desc *desc = irq_to_desc(irq);
+ u64 mask = 1ull << (d->irq - OCTEON_IRQ_WDOG0);
+ int index = next_coreid_for_irq(d) * 2 + 1;
- if ((desc->status & IRQ_DISABLED) == 0) {
- index = next_coreid_for_irq(desc) * 2 + 1;
- cvmx_write_csr(CVMX_CIU_INTX_EN1_W1S(index), mask);
- }
+ cvmx_write_csr(CVMX_CIU_INTX_EN1_W1S(index), mask);
}
/*
* Watchdog interrupts are special. They are associated with a single
* core, so we hardwire the affinity to that core.
*/
-static void octeon_irq_ciu1_wd_enable_v2(unsigned int irq)
+static void octeon_irq_ciu1_wd_enable_v2(struct irq_data *d)
{
- int index;
- int coreid = irq - OCTEON_IRQ_WDOG0;
- u64 mask = 1ull << (irq - OCTEON_IRQ_WDOG0);
- struct irq_desc *desc = irq_to_desc(irq);
+ int coreid = d->irq - OCTEON_IRQ_WDOG0;
+ u64 mask = 1ull << (d->irq - OCTEON_IRQ_WDOG0);
+ int index = coreid * 2 + 1;
- if ((desc->status & IRQ_DISABLED) == 0) {
- index = coreid * 2 + 1;
- cvmx_write_csr(CVMX_CIU_INTX_EN1_W1S(index), mask);
- }
+ cvmx_write_csr(CVMX_CIU_INTX_EN1_W1S(index), mask);
}
/*
@@ -555,9 +534,9 @@ static void octeon_irq_ciu1_ack_v2(unsig
* Disable the irq on the all cores for chips that have the EN*_W1{S,C}
* registers.
*/
-static void octeon_irq_ciu1_disable_all_v2(unsigned int irq)
+static void octeon_irq_ciu1_disable_all_v2(struct irq_data *d)
{
- u64 mask = 1ull << (irq - OCTEON_IRQ_WDOG0);
+ u64 mask = 1ull << (d->irq - OCTEON_IRQ_WDOG0);
int index;
int cpu;
for_each_online_cpu(cpu) {
@@ -567,14 +546,15 @@ static void octeon_irq_ciu1_disable_all_
}
#ifdef CONFIG_SMP
-static int octeon_irq_ciu1_set_affinity(unsigned int irq,
- const struct cpumask *dest)
+static int octeon_irq_ciu1_set_affinity(struct irq_data *d,
+ const struct cpumask *dest,
+ bool force)
{
int cpu;
- struct irq_desc *desc = irq_to_desc(irq);
+ struct irq_desc *desc = irq_to_desc(d->irq);
int enable_one = (desc->status & IRQ_DISABLED) == 0;
unsigned long flags;
- int bit = irq - OCTEON_IRQ_WDOG0; /* Bit 0-63 of EN1 */
+ int bit = d->irq - OCTEON_IRQ_WDOG0; /* Bit 0-63 of EN1 */
/*
* For non-v2 CIU, we will allow only single CPU affinity.
@@ -611,14 +591,15 @@ static int octeon_irq_ciu1_set_affinity(
* Set affinity for the irq for chips that have the EN*_W1{S,C}
* registers.
*/
-static int octeon_irq_ciu1_set_affinity_v2(unsigned int irq,
- const struct cpumask *dest)
+static int octeon_irq_ciu1_set_affinity_v2(struct irq_data *d,
+ const struct cpumask *dest,
+ bool force)
{
int cpu;
int index;
- struct irq_desc *desc = irq_to_desc(irq);
+ struct irq_desc *desc = irq_to_desc(d->irq);
int enable_one = (desc->status & IRQ_DISABLED) == 0;
- u64 mask = 1ull << (irq - OCTEON_IRQ_WDOG0);
+ u64 mask = 1ull << (d->irq - OCTEON_IRQ_WDOG0);
for_each_online_cpu(cpu) {
index = octeon_coreid_for_cpu(cpu) * 2 + 1;
if (cpumask_test_cpu(cpu, dest) && enable_one) {
@@ -637,36 +618,36 @@ static int octeon_irq_ciu1_set_affinity_
*/
static struct irq_chip octeon_irq_chip_ciu1_v2 = {
.name = "CIU1",
- .enable = octeon_irq_ciu1_enable_v2,
- .disable = octeon_irq_ciu1_disable_all_v2,
- .eoi = octeon_irq_ciu1_enable_v2,
+ .irq_enable = octeon_irq_ciu1_enable_v2,
+ .irq_disable = octeon_irq_ciu1_disable_all_v2,
+ .irq_eoi = octeon_irq_ciu1_enable_v2,
#ifdef CONFIG_SMP
- .set_affinity = octeon_irq_ciu1_set_affinity_v2,
+ .irq_set_affinity = octeon_irq_ciu1_set_affinity_v2,
#endif
};
static struct irq_chip octeon_irq_chip_ciu1 = {
.name = "CIU1",
- .enable = octeon_irq_ciu1_enable,
- .disable = octeon_irq_ciu1_disable,
- .eoi = octeon_irq_ciu1_eoi,
+ .irq_enable = octeon_irq_ciu1_enable,
+ .irq_disable = octeon_irq_ciu1_disable,
+ .irq_eoi = octeon_irq_ciu1_eoi,
#ifdef CONFIG_SMP
- .set_affinity = octeon_irq_ciu1_set_affinity,
+ .irq_set_affinity = octeon_irq_ciu1_set_affinity,
#endif
};
static struct irq_chip octeon_irq_chip_ciu1_wd_v2 = {
.name = "CIU1-W",
- .enable = octeon_irq_ciu1_wd_enable_v2,
- .disable = octeon_irq_ciu1_disable_all_v2,
- .eoi = octeon_irq_ciu1_wd_enable_v2,
+ .irq_enable = octeon_irq_ciu1_wd_enable_v2,
+ .irq_disable = octeon_irq_ciu1_disable_all_v2,
+ .irq_eoi = octeon_irq_ciu1_wd_enable_v2,
};
static struct irq_chip octeon_irq_chip_ciu1_wd = {
.name = "CIU1-W",
- .enable = octeon_irq_ciu1_wd_enable,
- .disable = octeon_irq_ciu1_disable,
- .eoi = octeon_irq_ciu1_eoi,
+ .irq_enable = octeon_irq_ciu1_wd_enable,
+ .irq_disable = octeon_irq_ciu1_disable,
+ .irq_eoi = octeon_irq_ciu1_eoi,
};
static void (*octeon_ciu0_ack)(unsigned int);
@@ -793,6 +774,7 @@ void fixup_irqs(void)
{
int irq;
struct irq_desc *desc;
+ struct irq_data *data;
cpumask_t new_affinity;
unsigned long flags;
int do_set_affinity;
@@ -805,11 +787,12 @@ void fixup_irqs(void)
for (irq = OCTEON_IRQ_WORKQ0; irq < OCTEON_IRQ_LAST; irq++) {
desc = irq_to_desc(irq);
+ data = irq_desc_get_irq_data(desc);
switch (irq) {
case OCTEON_IRQ_MBOX0:
case OCTEON_IRQ_MBOX1:
/* The eoi function will disable them on this CPU. */
- desc->chip->eoi(irq);
+ data->chip->irq_eoi(data);
break;
case OCTEON_IRQ_WDOG0:
case OCTEON_IRQ_WDOG1:
@@ -839,14 +822,14 @@ void fixup_irqs(void)
* must be migrated if it has affinity to this
* cpu.
*/
- if (desc->action && cpumask_test_cpu(cpu, desc->affinity)) {
- if (cpumask_weight(desc->affinity) > 1) {
+ if (desc->action && cpumask_test_cpu(cpu, data->affinity)) {
+ if (cpumask_weight(data->affinity) > 1) {
/*
* It has multi CPU affinity,
* just remove this CPU from
* the affinity set.
*/
- cpumask_copy(&new_affinity, desc->affinity);
+ cpumask_copy(&new_affinity, data->affinity);
cpumask_clear_cpu(cpu, &new_affinity);
} else {
/*
Index: linux-mips-next/arch/mips/pci/msi-octeon.c
===================================================================
--- linux-mips-next.orig/arch/mips/pci/msi-octeon.c
+++ linux-mips-next/arch/mips/pci/msi-octeon.c
@@ -259,11 +259,11 @@ static DEFINE_RAW_SPINLOCK(octeon_irq_ms
static u64 msi_rcv_reg[4];
static u64 mis_ena_reg[4];
-static void octeon_irq_msi_enable_pcie(unsigned int irq)
+static void octeon_irq_msi_enable_pcie(struct irq_data *d)
{
u64 en;
unsigned long flags;
- int msi_number = irq - OCTEON_IRQ_MSI_BIT0;
+ int msi_number = d->irq - OCTEON_IRQ_MSI_BIT0;
int irq_index = msi_number >> 6;
int irq_bit = msi_number & 0x3f;
@@ -275,11 +275,11 @@ static void octeon_irq_msi_enable_pcie(u
raw_spin_unlock_irqrestore(&octeon_irq_msi_lock, flags);
}
-static void octeon_irq_msi_disable_pcie(unsigned int irq)
+static void octeon_irq_msi_disable_pcie(struct irq_data *d))
{
u64 en;
unsigned long flags;
- int msi_number = irq - OCTEON_IRQ_MSI_BIT0;
+ int msi_number = d->irq - OCTEON_IRQ_MSI_BIT0;
int irq_index = msi_number >> 6;
int irq_bit = msi_number & 0x3f;
@@ -293,11 +293,11 @@ static void octeon_irq_msi_disable_pcie(
static struct irq_chip octeon_irq_chip_msi_pcie = {
.name = "MSI",
- .enable = octeon_irq_msi_enable_pcie,
- .disable = octeon_irq_msi_disable_pcie,
+ .irq_enable = octeon_irq_msi_enable_pcie,
+ .irq_disable = octeon_irq_msi_disable_pcie,
};
-static void octeon_irq_msi_enable_pci(unsigned int irq)
+static void octeon_irq_msi_enable_pci(struct irq_data *d)
{
/*
* Octeon PCI doesn't have the ability to mask/unmask MSI
@@ -308,15 +308,15 @@ static void octeon_irq_msi_enable_pci(un
*/
}
-static void octeon_irq_msi_disable_pci(unsigned int irq)
+static void octeon_irq_msi_disable_pci(struct irq_data *d)
{
/* See comment in enable */
}
static struct irq_chip octeon_irq_chip_msi_pci = {
.name = "MSI",
- .enable = octeon_irq_msi_enable_pci,
- .disable = octeon_irq_msi_disable_pci,
+ .irq_enable = octeon_irq_msi_enable_pci,
+ .irq_disable = octeon_irq_msi_disable_pci,
};
/*
^ permalink raw reply [flat|nested] 97+ messages in thread
* [patch 06/38] mips: dec: Convert to new irq_chip functions
2011-03-23 21:08 [patch 00/38] mips: irq chip overhaul and cleanup Thomas Gleixner
` (4 preceding siblings ...)
2011-03-23 21:08 ` [patch 05/38] mips: cavium-octeon: " Thomas Gleixner
@ 2011-03-23 21:08 ` Thomas Gleixner
2011-03-24 14:18 ` Ralf Baechle
2011-03-23 21:08 ` [patch 07/38] mips: emma: " Thomas Gleixner
` (31 subsequent siblings)
37 siblings, 1 reply; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-23 21:08 UTC (permalink / raw)
To: linux-mips; +Cc: Ralf Baechle
[-- Attachment #1: mips-dec.patch --]
[-- Type: text/plain, Size: 4168 bytes --]
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/mips/dec/ioasic-irq.c | 60 ++++++++++-----------------------------------
arch/mips/dec/kn02-irq.c | 23 +++++++----------
2 files changed, 24 insertions(+), 59 deletions(-)
Index: linux-mips-next/arch/mips/dec/ioasic-irq.c
===================================================================
--- linux-mips-next.orig/arch/mips/dec/ioasic-irq.c
+++ linux-mips-next/arch/mips/dec/ioasic-irq.c
@@ -17,80 +17,48 @@
#include <asm/dec/ioasic_addrs.h>
#include <asm/dec/ioasic_ints.h>
-
static int ioasic_irq_base;
-
-static inline void unmask_ioasic_irq(unsigned int irq)
+static void unmask_ioasic_irq(struct irq_data *d)
{
u32 simr;
simr = ioasic_read(IO_REG_SIMR);
- simr |= (1 << (irq - ioasic_irq_base));
+ simr |= (1 << (d->irq - ioasic_irq_base));
ioasic_write(IO_REG_SIMR, simr);
}
-static inline void mask_ioasic_irq(unsigned int irq)
+static void mask_ioasic_irq(struct irq_data *d)
{
u32 simr;
simr = ioasic_read(IO_REG_SIMR);
- simr &= ~(1 << (irq - ioasic_irq_base));
+ simr &= ~(1 << (d->irq - ioasic_irq_base));
ioasic_write(IO_REG_SIMR, simr);
}
-static inline void clear_ioasic_irq(unsigned int irq)
+static void ack_ioasic_irq(struct irq_data *d)
{
- u32 sir;
-
- sir = ~(1 << (irq - ioasic_irq_base));
- ioasic_write(IO_REG_SIR, sir);
-}
-
-static inline void ack_ioasic_irq(unsigned int irq)
-{
- mask_ioasic_irq(irq);
+ mask_ioasic_irq(d);
fast_iob();
}
-static inline void end_ioasic_irq(unsigned int irq)
-{
- if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS)))
- unmask_ioasic_irq(irq);
-}
-
static struct irq_chip ioasic_irq_type = {
.name = "IO-ASIC",
- .ack = ack_ioasic_irq,
- .mask = mask_ioasic_irq,
- .mask_ack = ack_ioasic_irq,
- .unmask = unmask_ioasic_irq,
+ .irq_ack = ack_ioasic_irq,
+ .irq_mask = mask_ioasic_irq,
+ .irq_mask_ack = ack_ioasic_irq,
+ .irq_unmask = unmask_ioasic_irq,
};
-
-#define unmask_ioasic_dma_irq unmask_ioasic_irq
-
-#define mask_ioasic_dma_irq mask_ioasic_irq
-
-#define ack_ioasic_dma_irq ack_ioasic_irq
-
-static inline void end_ioasic_dma_irq(unsigned int irq)
-{
- clear_ioasic_irq(irq);
- fast_iob();
- end_ioasic_irq(irq);
-}
-
static struct irq_chip ioasic_dma_irq_type = {
.name = "IO-ASIC-DMA",
- .ack = ack_ioasic_dma_irq,
- .mask = mask_ioasic_dma_irq,
- .mask_ack = ack_ioasic_dma_irq,
- .unmask = unmask_ioasic_dma_irq,
- .end = end_ioasic_dma_irq,
+ .irq_ack = ack_ioasic_irq,
+ .irq_mask = mask_ioasic_irq,
+ .irq_mask_ack = ack_ioasic_irq,
+ .irq_unmask = unmask_ioasic_irq,
};
-
void __init init_ioasic_irqs(int base)
{
int i;
Index: linux-mips-next/arch/mips/dec/kn02-irq.c
===================================================================
--- linux-mips-next.orig/arch/mips/dec/kn02-irq.c
+++ linux-mips-next/arch/mips/dec/kn02-irq.c
@@ -27,43 +27,40 @@
*/
u32 cached_kn02_csr;
-
static int kn02_irq_base;
-
-static inline void unmask_kn02_irq(unsigned int irq)
+static void unmask_kn02_irq(struct irq_data *d)
{
volatile u32 *csr = (volatile u32 *)CKSEG1ADDR(KN02_SLOT_BASE +
KN02_CSR);
- cached_kn02_csr |= (1 << (irq - kn02_irq_base + 16));
+ cached_kn02_csr |= (1 << (d->irq - kn02_irq_base + 16));
*csr = cached_kn02_csr;
}
-static inline void mask_kn02_irq(unsigned int irq)
+static void mask_kn02_irq(struct irq_data *d)
{
volatile u32 *csr = (volatile u32 *)CKSEG1ADDR(KN02_SLOT_BASE +
KN02_CSR);
- cached_kn02_csr &= ~(1 << (irq - kn02_irq_base + 16));
+ cached_kn02_csr &= ~(1 << (d->irq - kn02_irq_base + 16));
*csr = cached_kn02_csr;
}
-static void ack_kn02_irq(unsigned int irq)
+static void ack_kn02_irq(struct irq_data *d)
{
- mask_kn02_irq(irq);
+ mask_kn02_irq(d);
iob();
}
static struct irq_chip kn02_irq_type = {
.name = "KN02-CSR",
- .ack = ack_kn02_irq,
- .mask = mask_kn02_irq,
- .mask_ack = ack_kn02_irq,
- .unmask = unmask_kn02_irq,
+ .irq_ack = ack_kn02_irq,
+ .irq_mask = mask_kn02_irq,
+ .irq_mask_ack = ack_kn02_irq,
+ .irq_unmask = unmask_kn02_irq,
};
-
void __init init_kn02_irqs(int base)
{
volatile u32 *csr = (volatile u32 *)CKSEG1ADDR(KN02_SLOT_BASE +
^ permalink raw reply [flat|nested] 97+ messages in thread
* [patch 07/38] mips: emma: Convert to new irq_chip functions
2011-03-23 21:08 [patch 00/38] mips: irq chip overhaul and cleanup Thomas Gleixner
` (5 preceding siblings ...)
2011-03-23 21:08 ` [patch 06/38] mips: dec: " Thomas Gleixner
@ 2011-03-23 21:08 ` Thomas Gleixner
2011-03-24 14:18 ` Ralf Baechle
2011-03-23 21:08 ` [patch 08/38] mips: jazz: " Thomas Gleixner
` (30 subsequent siblings)
37 siblings, 1 reply; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-23 21:08 UTC (permalink / raw)
To: linux-mips; +Cc: Ralf Baechle
[-- Attachment #1: mips-emma.patch --]
[-- Type: text/plain, Size: 4676 bytes --]
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/mips/emma/markeins/irq.c | 67 ++++++++++++++++--------------------------
1 file changed, 27 insertions(+), 40 deletions(-)
Index: linux-mips-next/arch/mips/emma/markeins/irq.c
===================================================================
--- linux-mips-next.orig/arch/mips/emma/markeins/irq.c
+++ linux-mips-next/arch/mips/emma/markeins/irq.c
@@ -34,13 +34,10 @@
#include <asm/emma/emma2rh.h>
-static void emma2rh_irq_enable(unsigned int irq)
+static void emma2rh_irq_enable(struct irq_data *d)
{
- u32 reg_value;
- u32 reg_bitmask;
- u32 reg_index;
-
- irq -= EMMA2RH_IRQ_BASE;
+ unsigned int irq = d->irq - EMMA2RH_IRQ_BASE;
+ u32 reg_value, reg_bitmask, reg_index;
reg_index = EMMA2RH_BHIF_INT_EN_0 +
(EMMA2RH_BHIF_INT_EN_1 - EMMA2RH_BHIF_INT_EN_0) * (irq / 32);
@@ -49,13 +46,10 @@ static void emma2rh_irq_enable(unsigned
emma2rh_out32(reg_index, reg_value | reg_bitmask);
}
-static void emma2rh_irq_disable(unsigned int irq)
+static void emma2rh_irq_disable(struct irq_data *d)
{
- u32 reg_value;
- u32 reg_bitmask;
- u32 reg_index;
-
- irq -= EMMA2RH_IRQ_BASE;
+ unsigned int irq = d->irq - EMMA2RH_IRQ_BASE;
+ u32 reg_value, reg_bitmask, reg_index;
reg_index = EMMA2RH_BHIF_INT_EN_0 +
(EMMA2RH_BHIF_INT_EN_1 - EMMA2RH_BHIF_INT_EN_0) * (irq / 32);
@@ -66,10 +60,8 @@ static void emma2rh_irq_disable(unsigned
struct irq_chip emma2rh_irq_controller = {
.name = "emma2rh_irq",
- .ack = emma2rh_irq_disable,
- .mask = emma2rh_irq_disable,
- .mask_ack = emma2rh_irq_disable,
- .unmask = emma2rh_irq_enable,
+ .irq_mask = emma2rh_irq_disable,
+ .irq_unmask = emma2rh_irq_enable,
};
void emma2rh_irq_init(void)
@@ -82,23 +74,21 @@ void emma2rh_irq_init(void)
handle_level_irq, "level");
}
-static void emma2rh_sw_irq_enable(unsigned int irq)
+static void emma2rh_sw_irq_enable(struct irq_data *d)
{
+ unsigned int irq = d->irq - EMMA2RH_SW_IRQ_BASE;
u32 reg;
- irq -= EMMA2RH_SW_IRQ_BASE;
-
reg = emma2rh_in32(EMMA2RH_BHIF_SW_INT_EN);
reg |= 1 << irq;
emma2rh_out32(EMMA2RH_BHIF_SW_INT_EN, reg);
}
-static void emma2rh_sw_irq_disable(unsigned int irq)
+static void emma2rh_sw_irq_disable(struct irq_data *d)
{
+ unsigned int irq = d->irq - EMMA2RH_SW_IRQ_BASE;
u32 reg;
- irq -= EMMA2RH_SW_IRQ_BASE;
-
reg = emma2rh_in32(EMMA2RH_BHIF_SW_INT_EN);
reg &= ~(1 << irq);
emma2rh_out32(EMMA2RH_BHIF_SW_INT_EN, reg);
@@ -106,10 +96,8 @@ static void emma2rh_sw_irq_disable(unsig
struct irq_chip emma2rh_sw_irq_controller = {
.name = "emma2rh_sw_irq",
- .ack = emma2rh_sw_irq_disable,
- .mask = emma2rh_sw_irq_disable,
- .mask_ack = emma2rh_sw_irq_disable,
- .unmask = emma2rh_sw_irq_enable,
+ .irq_mask = emma2rh_sw_irq_disable,
+ .irq_unmask = emma2rh_sw_irq_enable,
};
void emma2rh_sw_irq_init(void)
@@ -122,39 +110,38 @@ void emma2rh_sw_irq_init(void)
handle_level_irq, "level");
}
-static void emma2rh_gpio_irq_enable(unsigned int irq)
+static void emma2rh_gpio_irq_enable(struct irq_data *d)
{
+ unsigned int irq = d->irq - EMMA2RH_GPIO_IRQ_BASE;
u32 reg;
- irq -= EMMA2RH_GPIO_IRQ_BASE;
-
reg = emma2rh_in32(EMMA2RH_GPIO_INT_MASK);
reg |= 1 << irq;
emma2rh_out32(EMMA2RH_GPIO_INT_MASK, reg);
}
-static void emma2rh_gpio_irq_disable(unsigned int irq)
+static void emma2rh_gpio_irq_disable(struct irq_data *d)
{
+ unsigned int irq = d->irq - EMMA2RH_GPIO_IRQ_BASE;
u32 reg;
- irq -= EMMA2RH_GPIO_IRQ_BASE;
-
reg = emma2rh_in32(EMMA2RH_GPIO_INT_MASK);
reg &= ~(1 << irq);
emma2rh_out32(EMMA2RH_GPIO_INT_MASK, reg);
}
-static void emma2rh_gpio_irq_ack(unsigned int irq)
+static void emma2rh_gpio_irq_ack(struct irq_data *d)
{
- irq -= EMMA2RH_GPIO_IRQ_BASE;
+ unsigned int irq = d->irq - EMMA2RH_GPIO_IRQ_BASE;
+
emma2rh_out32(EMMA2RH_GPIO_INT_ST, ~(1 << irq));
}
-static void emma2rh_gpio_irq_mask_ack(unsigned int irq)
+static void emma2rh_gpio_irq_mask_ack(struct irq_data *d)
{
+ unsigned int irq = d->irq - EMMA2RH_GPIO_IRQ_BASE;
u32 reg;
- irq -= EMMA2RH_GPIO_IRQ_BASE;
emma2rh_out32(EMMA2RH_GPIO_INT_ST, ~(1 << irq));
reg = emma2rh_in32(EMMA2RH_GPIO_INT_MASK);
@@ -164,10 +151,10 @@ static void emma2rh_gpio_irq_mask_ack(un
struct irq_chip emma2rh_gpio_irq_controller = {
.name = "emma2rh_gpio_irq",
- .ack = emma2rh_gpio_irq_ack,
- .mask = emma2rh_gpio_irq_disable,
- .mask_ack = emma2rh_gpio_irq_mask_ack,
- .unmask = emma2rh_gpio_irq_enable,
+ .irq_ack = emma2rh_gpio_irq_ack,
+ .irq_mask = emma2rh_gpio_irq_disable,
+ .irq_mask_ack = emma2rh_gpio_irq_mask_ack,
+ .irq_unmask = emma2rh_gpio_irq_enable,
};
void emma2rh_gpio_irq_init(void)
^ permalink raw reply [flat|nested] 97+ messages in thread
* [patch 08/38] mips: jazz: Convert to new irq_chip functions
2011-03-23 21:08 [patch 00/38] mips: irq chip overhaul and cleanup Thomas Gleixner
` (6 preceding siblings ...)
2011-03-23 21:08 ` [patch 07/38] mips: emma: " Thomas Gleixner
@ 2011-03-23 21:08 ` Thomas Gleixner
2011-03-24 14:19 ` Ralf Baechle
2011-03-23 21:08 ` [patch 09/38] MIPS: JZ4740: Convert to new irq functions Thomas Gleixner
` (29 subsequent siblings)
37 siblings, 1 reply; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-23 21:08 UTC (permalink / raw)
To: linux-mips; +Cc: Ralf Baechle
[-- Attachment #1: mips-jazz.patch --]
[-- Type: text/plain, Size: 1424 bytes --]
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/mips/jazz/irq.c | 14 ++++++--------
1 file changed, 6 insertions(+), 8 deletions(-)
Index: linux-mips-next/arch/mips/jazz/irq.c
===================================================================
--- linux-mips-next.orig/arch/mips/jazz/irq.c
+++ linux-mips-next/arch/mips/jazz/irq.c
@@ -23,9 +23,9 @@
static DEFINE_RAW_SPINLOCK(r4030_lock);
-static void enable_r4030_irq(unsigned int irq)
+static void enable_r4030_irq(struct irq_data *d)
{
- unsigned int mask = 1 << (irq - JAZZ_IRQ_START);
+ unsigned int mask = 1 << (d->irq - JAZZ_IRQ_START);
unsigned long flags;
raw_spin_lock_irqsave(&r4030_lock, flags);
@@ -34,9 +34,9 @@ static void enable_r4030_irq(unsigned in
raw_spin_unlock_irqrestore(&r4030_lock, flags);
}
-void disable_r4030_irq(unsigned int irq)
+void disable_r4030_irq(struct irq_data *d)
{
- unsigned int mask = ~(1 << (irq - JAZZ_IRQ_START));
+ unsigned int mask = ~(1 << (d->irq - JAZZ_IRQ_START));
unsigned long flags;
raw_spin_lock_irqsave(&r4030_lock, flags);
@@ -47,10 +47,8 @@ void disable_r4030_irq(unsigned int irq)
static struct irq_chip r4030_irq_type = {
.name = "R4030",
- .ack = disable_r4030_irq,
- .mask = disable_r4030_irq,
- .mask_ack = disable_r4030_irq,
- .unmask = enable_r4030_irq,
+ .irq_mask = disable_r4030_irq,
+ .irq_unmask = enable_r4030_irq,
};
void __init init_r4030_ints(void)
^ permalink raw reply [flat|nested] 97+ messages in thread
* [patch 09/38] MIPS: JZ4740: Convert to new irq functions
2011-03-23 21:08 [patch 00/38] mips: irq chip overhaul and cleanup Thomas Gleixner
` (7 preceding siblings ...)
2011-03-23 21:08 ` [patch 08/38] mips: jazz: " Thomas Gleixner
@ 2011-03-23 21:08 ` Thomas Gleixner
2011-03-24 14:20 ` Ralf Baechle
2011-03-23 21:08 ` [patch 10/38] MIPS: JZ4740: GPIO: Use shared irq chip for all gpios Thomas Gleixner
` (28 subsequent siblings)
37 siblings, 1 reply; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-23 21:08 UTC (permalink / raw)
To: linux-mips; +Cc: Ralf Baechle, Lars-Peter Clausen
[-- Attachment #1: 1-2-MIPS-JZ4740-Convert-to-new-irq-functions.patch --]
[-- Type: text/plain, Size: 8471 bytes --]
Convert the JZ4740 intc and gpio irq chips to use newstyle irq functions.
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/mips/jz4740/gpio.c | 93 ++++++++++++++++++++++++-----------------------
arch/mips/jz4740/gpio.c | 93 ++++++++++++++++++++++++------------------------
arch/mips/jz4740/irq.c | 32 ++++++++++------
2 files changed, 67 insertions(+), 58 deletions(-)
Index: linux-mips-next/arch/mips/jz4740/gpio.c
===================================================================
--- linux-mips-next.orig/arch/mips/jz4740/gpio.c
+++ linux-mips-next/arch/mips/jz4740/gpio.c
@@ -102,9 +102,9 @@ static inline struct jz_gpio_chip *gpio_
return container_of(gpio_chip, struct jz_gpio_chip, gpio_chip);
}
-static inline struct jz_gpio_chip *irq_to_jz_gpio_chip(unsigned int irq)
+static inline struct jz_gpio_chip *irq_to_jz_gpio_chip(struct irq_data *data)
{
- return get_irq_chip_data(irq);
+ return irq_data_get_irq_chip_data(data);
}
static inline void jz_gpio_write_bit(unsigned int gpio, unsigned int reg)
@@ -325,62 +325,63 @@ static void jz_gpio_irq_demux_handler(un
generic_handle_irq(gpio_irq);
};
-static inline void jz_gpio_set_irq_bit(unsigned int irq, unsigned int reg)
+static inline void jz_gpio_set_irq_bit(struct irq_data *data, unsigned int reg)
{
- struct jz_gpio_chip *chip = irq_to_jz_gpio_chip(irq);
- writel(IRQ_TO_BIT(irq), chip->base + reg);
+ struct jz_gpio_chip *chip = irq_to_jz_gpio_chip(data);
+ writel(IRQ_TO_BIT(data->irq), chip->base + reg);
}
-static void jz_gpio_irq_mask(unsigned int irq)
+static void jz_gpio_irq_mask(struct irq_data *data)
{
- jz_gpio_set_irq_bit(irq, JZ_REG_GPIO_MASK_SET);
+ jz_gpio_set_irq_bit(data, JZ_REG_GPIO_MASK_SET);
};
-static void jz_gpio_irq_unmask(unsigned int irq)
+static void jz_gpio_irq_unmask(struct irq_data *data)
{
- struct jz_gpio_chip *chip = irq_to_jz_gpio_chip(irq);
+ struct jz_gpio_chip *chip = irq_to_jz_gpio_chip(data);
- jz_gpio_check_trigger_both(chip, irq);
+ jz_gpio_check_trigger_both(chip, data->irq);
- jz_gpio_set_irq_bit(irq, JZ_REG_GPIO_MASK_CLEAR);
+ jz_gpio_set_irq_bit(data, JZ_REG_GPIO_MASK_CLEAR);
};
/* TODO: Check if function is gpio */
-static unsigned int jz_gpio_irq_startup(unsigned int irq)
+static unsigned int jz_gpio_irq_startup(struct irq_data *data)
{
- struct irq_desc *desc = irq_to_desc(irq);
+ struct irq_desc *desc = irq_to_desc(data->irq);
- jz_gpio_set_irq_bit(irq, JZ_REG_GPIO_SELECT_SET);
+ jz_gpio_set_irq_bit(data, JZ_REG_GPIO_SELECT_SET);
desc->status &= ~IRQ_MASKED;
- jz_gpio_irq_unmask(irq);
+ jz_gpio_irq_unmask(data);
return 0;
}
-static void jz_gpio_irq_shutdown(unsigned int irq)
+static void jz_gpio_irq_shutdown(struct irq_data *data)
{
- struct irq_desc *desc = irq_to_desc(irq);
+ struct irq_desc *desc = irq_to_desc(data->irq);
- jz_gpio_irq_mask(irq);
+ jz_gpio_irq_mask(data);
desc->status |= IRQ_MASKED;
/* Set direction to input */
- jz_gpio_set_irq_bit(irq, JZ_REG_GPIO_DIRECTION_CLEAR);
- jz_gpio_set_irq_bit(irq, JZ_REG_GPIO_SELECT_CLEAR);
+ jz_gpio_set_irq_bit(data, JZ_REG_GPIO_DIRECTION_CLEAR);
+ jz_gpio_set_irq_bit(data, JZ_REG_GPIO_SELECT_CLEAR);
}
-static void jz_gpio_irq_ack(unsigned int irq)
+static void jz_gpio_irq_ack(struct irq_data *data)
{
- jz_gpio_set_irq_bit(irq, JZ_REG_GPIO_FLAG_CLEAR);
+ jz_gpio_set_irq_bit(data, JZ_REG_GPIO_FLAG_CLEAR);
};
-static int jz_gpio_irq_set_type(unsigned int irq, unsigned int flow_type)
+static int jz_gpio_irq_set_type(struct irq_data *data, unsigned int flow_type)
{
- struct jz_gpio_chip *chip = irq_to_jz_gpio_chip(irq);
- struct irq_desc *desc = irq_to_desc(irq);
+ struct jz_gpio_chip *chip = irq_to_jz_gpio_chip(data);
+ struct irq_desc *desc = irq_to_desc(data->irq);
+ unsigned int irq = data->irq;
- jz_gpio_irq_mask(irq);
+ jz_gpio_irq_mask(data);
if (flow_type == IRQ_TYPE_EDGE_BOTH) {
uint32_t value = readl(chip->base + JZ_REG_GPIO_PIN);
@@ -395,39 +396,39 @@ static int jz_gpio_irq_set_type(unsigned
switch (flow_type) {
case IRQ_TYPE_EDGE_RISING:
- jz_gpio_set_irq_bit(irq, JZ_REG_GPIO_DIRECTION_SET);
- jz_gpio_set_irq_bit(irq, JZ_REG_GPIO_TRIGGER_SET);
+ jz_gpio_set_irq_bit(data, JZ_REG_GPIO_DIRECTION_SET);
+ jz_gpio_set_irq_bit(data, JZ_REG_GPIO_TRIGGER_SET);
break;
case IRQ_TYPE_EDGE_FALLING:
- jz_gpio_set_irq_bit(irq, JZ_REG_GPIO_DIRECTION_CLEAR);
- jz_gpio_set_irq_bit(irq, JZ_REG_GPIO_TRIGGER_SET);
+ jz_gpio_set_irq_bit(data, JZ_REG_GPIO_DIRECTION_CLEAR);
+ jz_gpio_set_irq_bit(data, JZ_REG_GPIO_TRIGGER_SET);
break;
case IRQ_TYPE_LEVEL_HIGH:
- jz_gpio_set_irq_bit(irq, JZ_REG_GPIO_DIRECTION_SET);
- jz_gpio_set_irq_bit(irq, JZ_REG_GPIO_TRIGGER_CLEAR);
+ jz_gpio_set_irq_bit(data, JZ_REG_GPIO_DIRECTION_SET);
+ jz_gpio_set_irq_bit(data, JZ_REG_GPIO_TRIGGER_CLEAR);
break;
case IRQ_TYPE_LEVEL_LOW:
- jz_gpio_set_irq_bit(irq, JZ_REG_GPIO_DIRECTION_CLEAR);
- jz_gpio_set_irq_bit(irq, JZ_REG_GPIO_TRIGGER_CLEAR);
+ jz_gpio_set_irq_bit(data, JZ_REG_GPIO_DIRECTION_CLEAR);
+ jz_gpio_set_irq_bit(data, JZ_REG_GPIO_TRIGGER_CLEAR);
break;
default:
return -EINVAL;
}
if (!(desc->status & IRQ_MASKED))
- jz_gpio_irq_unmask(irq);
+ jz_gpio_irq_unmask(data);
return 0;
}
-static int jz_gpio_irq_set_wake(unsigned int irq, unsigned int on)
+static int jz_gpio_irq_set_wake(struct irq_data *data, unsigned int on)
{
- struct jz_gpio_chip *chip = irq_to_jz_gpio_chip(irq);
+ struct jz_gpio_chip *chip = irq_to_jz_gpio_chip(data);
spin_lock(&chip->lock);
if (on)
- chip->wakeup |= IRQ_TO_BIT(irq);
+ chip->wakeup |= IRQ_TO_BIT(data->irq);
else
- chip->wakeup &= ~IRQ_TO_BIT(irq);
+ chip->wakeup &= ~IRQ_TO_BIT(data->irq);
spin_unlock(&chip->lock);
set_irq_wake(chip->irq, on);
@@ -454,13 +455,13 @@ static struct lock_class_key gpio_lock_c
}, \
.irq_chip = { \
.name = "GPIO Bank " # _bank, \
- .mask = jz_gpio_irq_mask, \
- .unmask = jz_gpio_irq_unmask, \
- .ack = jz_gpio_irq_ack, \
- .startup = jz_gpio_irq_startup, \
- .shutdown = jz_gpio_irq_shutdown, \
- .set_type = jz_gpio_irq_set_type, \
- .set_wake = jz_gpio_irq_set_wake, \
+ .irq_mask = jz_gpio_irq_mask, \
+ .irq_unmask = jz_gpio_irq_unmask, \
+ .irq_ack = jz_gpio_irq_ack, \
+ .irq_startup = jz_gpio_irq_startup, \
+ .irq_shutdown = jz_gpio_irq_shutdown, \
+ .irq_set_type = jz_gpio_irq_set_type, \
+ .irq_set_wake = jz_gpio_irq_set_wake, \
}, \
}
Index: linux-mips-next/arch/mips/jz4740/irq.c
===================================================================
--- linux-mips-next.orig/arch/mips/jz4740/irq.c
+++ linux-mips-next/arch/mips/jz4740/irq.c
@@ -43,32 +43,37 @@ static uint32_t jz_intc_saved;
#define IRQ_BIT(x) BIT((x) - JZ4740_IRQ_BASE)
-static void intc_irq_unmask(unsigned int irq)
+static inline unsigned long intc_irq_bit(struct irq_data *data)
{
- writel(IRQ_BIT(irq), jz_intc_base + JZ_REG_INTC_CLEAR_MASK);
+ return (unsigned long)irq_data_get_irq_chip_data(data);
}
-static void intc_irq_mask(unsigned int irq)
+static void intc_irq_unmask(struct irq_data *data)
{
- writel(IRQ_BIT(irq), jz_intc_base + JZ_REG_INTC_SET_MASK);
+ writel(intc_irq_bit(data), jz_intc_base + JZ_REG_INTC_CLEAR_MASK);
}
-static int intc_irq_set_wake(unsigned int irq, unsigned int on)
+static void intc_irq_mask(struct irq_data *data)
+{
+ writel(intc_irq_bit(data), jz_intc_base + JZ_REG_INTC_SET_MASK);
+}
+
+static int intc_irq_set_wake(struct irq_data *data, unsigned int on)
{
if (on)
- jz_intc_wakeup |= IRQ_BIT(irq);
+ jz_intc_wakeup |= intc_irq_bit(data);
else
- jz_intc_wakeup &= ~IRQ_BIT(irq);
+ jz_intc_wakeup &= ~intc_irq_bit(data);
return 0;
}
static struct irq_chip intc_irq_type = {
.name = "INTC",
- .mask = intc_irq_mask,
- .mask_ack = intc_irq_mask,
- .unmask = intc_irq_unmask,
- .set_wake = intc_irq_set_wake,
+ .irq_mask = intc_irq_mask,
+ .irq_mask_ack = intc_irq_mask,
+ .irq_unmask = intc_irq_unmask,
+ .irq_set_wake = intc_irq_set_wake,
};
static irqreturn_t jz4740_cascade(int irq, void *data)
@@ -95,8 +100,11 @@ void __init arch_init_irq(void)
jz_intc_base = ioremap(JZ4740_INTC_BASE_ADDR, 0x14);
+ /* Mask all irqs */
+ writel(0xffffffff, jz_intc_base + JZ_REG_INTC_SET_MASK);
+
for (i = JZ4740_IRQ_BASE; i < JZ4740_IRQ_BASE + 32; i++) {
- intc_irq_mask(i);
+ set_irq_chip_data(i, (void *)IRQ_BIT(i));
set_irq_chip_and_handler(i, &intc_irq_type, handle_level_irq);
}
^ permalink raw reply [flat|nested] 97+ messages in thread
* [patch 10/38] MIPS: JZ4740: GPIO: Use shared irq chip for all gpios
2011-03-23 21:08 [patch 00/38] mips: irq chip overhaul and cleanup Thomas Gleixner
` (8 preceding siblings ...)
2011-03-23 21:08 ` [patch 09/38] MIPS: JZ4740: Convert to new irq functions Thomas Gleixner
@ 2011-03-23 21:08 ` Thomas Gleixner
2011-03-24 12:15 ` Sergei Shtylyov
2011-03-23 21:08 ` [patch 11/38] mips: jz4740: Cleanup the mechanical irq_chip conversion Thomas Gleixner
` (27 subsequent siblings)
37 siblings, 1 reply; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-23 21:08 UTC (permalink / raw)
To: linux-mips; +Cc: Ralf Baechle, Lars-Peter Clausen
[-- Attachment #1: 2-2-MIPS-JZ4740-GPIO-Use-shared-irq-chip-for-all-gpios.patch --]
[-- Type: text/plain, Size: 2379 bytes --]
Currently there is one irq_chip per gpio_chip with the only difference
being the name. Since the information whether the irq belong to GPIO
bank A, B, C or D is not that important rewrite the code to simply use
a single irq_chip for all gpio_chips.
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/mips/jz4740/gpio.c | 25 +++++++++++++------------
arch/mips/jz4740/gpio.c | 25 +++++++++++++------------
1 file changed, 13 insertions(+), 12 deletions(-)
Index: linux-mips-next/arch/mips/jz4740/gpio.c
===================================================================
--- linux-mips-next.orig/arch/mips/jz4740/gpio.c
+++ linux-mips-next/arch/mips/jz4740/gpio.c
@@ -86,7 +86,6 @@ struct jz_gpio_chip {
spinlock_t lock;
struct gpio_chip gpio_chip;
- struct irq_chip irq_chip;
struct sys_device sysdev;
};
@@ -435,6 +434,17 @@ static int jz_gpio_irq_set_wake(struct i
return 0;
}
+static struct irq_chip jz_gpio_irq_chip = {
+ .name = "GPIO",
+ .irq_mask = jz_gpio_irq_mask,
+ .irq_unmask = jz_gpio_irq_unmask,
+ .irq_ack = jz_gpio_irq_ack,
+ .irq_startup = jz_gpio_irq_startup,
+ .irq_shutdown = jz_gpio_irq_shutdown,
+ .irq_set_type = jz_gpio_irq_set_type,
+ .irq_set_wake = jz_gpio_irq_set_wake,
+};
+
/*
* This lock class tells lockdep that GPIO irqs are in a different
* category than their parents, so it won't report false recursion.
@@ -453,16 +463,6 @@ static struct lock_class_key gpio_lock_c
.base = JZ4740_GPIO_BASE_ ## _bank, \
.ngpio = JZ4740_GPIO_NUM_ ## _bank, \
}, \
- .irq_chip = { \
- .name = "GPIO Bank " # _bank, \
- .irq_mask = jz_gpio_irq_mask, \
- .irq_unmask = jz_gpio_irq_unmask, \
- .irq_ack = jz_gpio_irq_ack, \
- .irq_startup = jz_gpio_irq_startup, \
- .irq_shutdown = jz_gpio_irq_shutdown, \
- .irq_set_type = jz_gpio_irq_set_type, \
- .irq_set_wake = jz_gpio_irq_set_wake, \
- }, \
}
static struct jz_gpio_chip jz4740_gpio_chips[] = {
@@ -529,7 +529,8 @@ static int jz4740_gpio_chip_init(struct
for (irq = chip->irq_base; irq < chip->irq_base + chip->gpio_chip.ngpio; ++irq) {
lockdep_set_class(&irq_desc[irq].lock, &gpio_lock_class);
set_irq_chip_data(irq, chip);
- set_irq_chip_and_handler(irq, &chip->irq_chip, handle_level_irq);
+ set_irq_chip_and_handler(irq, &jz_gpio_irq_chip,
+ handle_level_irq);
}
return 0;
^ permalink raw reply [flat|nested] 97+ messages in thread
* [patch 11/38] mips: jz4740: Cleanup the mechanical irq_chip conversion
2011-03-23 21:08 [patch 00/38] mips: irq chip overhaul and cleanup Thomas Gleixner
` (9 preceding siblings ...)
2011-03-23 21:08 ` [patch 10/38] MIPS: JZ4740: GPIO: Use shared irq chip for all gpios Thomas Gleixner
@ 2011-03-23 21:08 ` Thomas Gleixner
2011-03-24 14:29 ` Ralf Baechle
2011-03-23 21:08 ` [patch 12/38] misp: lasat: Convert to new irq_chip functions Thomas Gleixner
` (26 subsequent siblings)
37 siblings, 1 reply; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-23 21:08 UTC (permalink / raw)
To: linux-mips; +Cc: Ralf Baechle
[-- Attachment #1: mips-jz4740-sigh.patch --]
[-- Type: text/plain, Size: 2428 bytes --]
The conversion did not make use of the new chip flag which signals the
core code to mask the chip before calling the set_type callback. Sigh.
Use the new lockdep helper as well.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/mips/jz4740/gpio.c | 17 ++---------------
1 file changed, 2 insertions(+), 15 deletions(-)
Index: linux-mips-next/arch/mips/jz4740/gpio.c
===================================================================
--- linux-mips-next.orig/arch/mips/jz4740/gpio.c
+++ linux-mips-next/arch/mips/jz4740/gpio.c
@@ -347,22 +347,14 @@ static void jz_gpio_irq_unmask(struct ir
/* TODO: Check if function is gpio */
static unsigned int jz_gpio_irq_startup(struct irq_data *data)
{
- struct irq_desc *desc = irq_to_desc(data->irq);
-
jz_gpio_set_irq_bit(data, JZ_REG_GPIO_SELECT_SET);
-
- desc->status &= ~IRQ_MASKED;
jz_gpio_irq_unmask(data);
-
return 0;
}
static void jz_gpio_irq_shutdown(struct irq_data *data)
{
- struct irq_desc *desc = irq_to_desc(data->irq);
-
jz_gpio_irq_mask(data);
- desc->status |= IRQ_MASKED;
/* Set direction to input */
jz_gpio_set_irq_bit(data, JZ_REG_GPIO_DIRECTION_CLEAR);
@@ -377,11 +369,8 @@ static void jz_gpio_irq_ack(struct irq_d
static int jz_gpio_irq_set_type(struct irq_data *data, unsigned int flow_type)
{
struct jz_gpio_chip *chip = irq_to_jz_gpio_chip(data);
- struct irq_desc *desc = irq_to_desc(data->irq);
unsigned int irq = data->irq;
- jz_gpio_irq_mask(data);
-
if (flow_type == IRQ_TYPE_EDGE_BOTH) {
uint32_t value = readl(chip->base + JZ_REG_GPIO_PIN);
if (value & IRQ_TO_BIT(irq))
@@ -414,9 +403,6 @@ static int jz_gpio_irq_set_type(struct i
return -EINVAL;
}
- if (!(desc->status & IRQ_MASKED))
- jz_gpio_irq_unmask(data);
-
return 0;
}
@@ -443,6 +429,7 @@ static struct irq_chip jz_gpio_irq_chip
.irq_shutdown = jz_gpio_irq_shutdown,
.irq_set_type = jz_gpio_irq_set_type,
.irq_set_wake = jz_gpio_irq_set_wake,
+ .flags = IRQCHIP_SET_TYPE_MASKED,
};
/*
@@ -527,7 +514,7 @@ static int jz4740_gpio_chip_init(struct
set_irq_chained_handler(chip->irq, jz_gpio_irq_demux_handler);
for (irq = chip->irq_base; irq < chip->irq_base + chip->gpio_chip.ngpio; ++irq) {
- lockdep_set_class(&irq_desc[irq].lock, &gpio_lock_class);
+ irq_set_lockdep_class(irq, &gpio_lock_class);
set_irq_chip_data(irq, chip);
set_irq_chip_and_handler(irq, &jz_gpio_irq_chip,
handle_level_irq);
^ permalink raw reply [flat|nested] 97+ messages in thread
* [patch 12/38] misp: lasat: Convert to new irq_chip functions
2011-03-23 21:08 [patch 00/38] mips: irq chip overhaul and cleanup Thomas Gleixner
` (10 preceding siblings ...)
2011-03-23 21:08 ` [patch 11/38] mips: jz4740: Cleanup the mechanical irq_chip conversion Thomas Gleixner
@ 2011-03-23 21:08 ` Thomas Gleixner
2011-03-24 14:31 ` Ralf Baechle
2011-03-23 21:08 ` [patch 13/38] mips: i8259: " Thomas Gleixner
` (25 subsequent siblings)
37 siblings, 1 reply; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-23 21:08 UTC (permalink / raw)
To: linux-mips; +Cc: Ralf Baechle
[-- Attachment #1: misp-lasat.patch --]
[-- Type: text/plain, Size: 1291 bytes --]
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/mips/lasat/interrupt.c | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
Index: linux-mips-next/arch/mips/lasat/interrupt.c
===================================================================
--- linux-mips-next.orig/arch/mips/lasat/interrupt.c
+++ linux-mips-next/arch/mips/lasat/interrupt.c
@@ -32,24 +32,24 @@ static volatile int *lasat_int_status;
static volatile int *lasat_int_mask;
static volatile int lasat_int_mask_shift;
-void disable_lasat_irq(unsigned int irq_nr)
+void disable_lasat_irq(struct irq_data *d)
{
- irq_nr -= LASAT_IRQ_BASE;
+ unsigned int irq_nr = d->irq - LASAT_IRQ_BASE;
+
*lasat_int_mask &= ~(1 << irq_nr) << lasat_int_mask_shift;
}
-void enable_lasat_irq(unsigned int irq_nr)
+void enable_lasat_irq(struct irq_data *d)
{
- irq_nr -= LASAT_IRQ_BASE;
+ unsigned int irq_nr = d->irq - LASAT_IRQ_BASE;
+
*lasat_int_mask |= (1 << irq_nr) << lasat_int_mask_shift;
}
static struct irq_chip lasat_irq_type = {
.name = "Lasat",
- .ack = disable_lasat_irq,
- .mask = disable_lasat_irq,
- .mask_ack = disable_lasat_irq,
- .unmask = enable_lasat_irq,
+ .irq_mask = disable_lasat_irq,
+ .irq_unmask = enable_lasat_irq,
};
static inline int ls1bit32(unsigned int x)
^ permalink raw reply [flat|nested] 97+ messages in thread
* [patch 13/38] mips: i8259: Convert to new irq_chip functions
2011-03-23 21:08 [patch 00/38] mips: irq chip overhaul and cleanup Thomas Gleixner
` (11 preceding siblings ...)
2011-03-23 21:08 ` [patch 12/38] misp: lasat: Convert to new irq_chip functions Thomas Gleixner
@ 2011-03-23 21:08 ` Thomas Gleixner
2011-03-24 14:32 ` Ralf Baechle
2011-03-23 21:08 ` [patch 14/38] mips: gic: " Thomas Gleixner
` (24 subsequent siblings)
37 siblings, 1 reply; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-23 21:08 UTC (permalink / raw)
To: linux-mips; +Cc: Ralf Baechle
[-- Attachment #1: mips-kernel-8259.patch --]
[-- Type: text/plain, Size: 4940 bytes --]
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/mips/include/asm/irq.h | 4 ++--
arch/mips/kernel/i8259.c | 37 +++++++++++++++++--------------------
arch/mips/mti-malta/malta-smtc.c | 9 +++++----
3 files changed, 24 insertions(+), 26 deletions(-)
Index: linux-mips-next/arch/mips/include/asm/irq.h
===================================================================
--- linux-mips-next.orig/arch/mips/include/asm/irq.h
+++ linux-mips-next/arch/mips/include/asm/irq.h
@@ -55,8 +55,8 @@ static inline void smtc_im_ack_irq(unsig
#ifdef CONFIG_MIPS_MT_SMTC_IRQAFF
#include <linux/cpumask.h>
-extern int plat_set_irq_affinity(unsigned int irq,
- const struct cpumask *affinity);
+extern int plat_set_irq_affinity(struct irq_data *d,
+ const struct cpumask *affinity, bool force);
extern void smtc_forward_irq(unsigned int irq);
/*
Index: linux-mips-next/arch/mips/kernel/i8259.c
===================================================================
--- linux-mips-next.orig/arch/mips/kernel/i8259.c
+++ linux-mips-next/arch/mips/kernel/i8259.c
@@ -31,19 +31,19 @@
static int i8259A_auto_eoi = -1;
DEFINE_RAW_SPINLOCK(i8259A_lock);
-static void disable_8259A_irq(unsigned int irq);
-static void enable_8259A_irq(unsigned int irq);
-static void mask_and_ack_8259A(unsigned int irq);
+static void disable_8259A_irq(struct irq_data *d);
+static void enable_8259A_irq(struct irq_data *d);
+static void mask_and_ack_8259A(struct irq_data *d);
static void init_8259A(int auto_eoi);
static struct irq_chip i8259A_chip = {
- .name = "XT-PIC",
- .mask = disable_8259A_irq,
- .disable = disable_8259A_irq,
- .unmask = enable_8259A_irq,
- .mask_ack = mask_and_ack_8259A,
+ .name = "XT-PIC",
+ .irq_mask = disable_8259A_irq,
+ .irq_disable = disable_8259A_irq,
+ .irq_unmask = enable_8259A_irq,
+ .irq_mask_ack = mask_and_ack_8259A,
#ifdef CONFIG_MIPS_MT_SMTC_IRQAFF
- .set_affinity = plat_set_irq_affinity,
+ .irq_set_affinity = plat_set_irq_affinity,
#endif /* CONFIG_MIPS_MT_SMTC_IRQAFF */
};
@@ -59,12 +59,11 @@ static unsigned int cached_irq_mask = 0x
#define cached_master_mask (cached_irq_mask)
#define cached_slave_mask (cached_irq_mask >> 8)
-static void disable_8259A_irq(unsigned int irq)
+static void disable_8259A_irq(struct irq_data *d)
{
- unsigned int mask;
+ unsigned int mask, irq = d->irq - I8259A_IRQ_BASE;
unsigned long flags;
- irq -= I8259A_IRQ_BASE;
mask = 1 << irq;
raw_spin_lock_irqsave(&i8259A_lock, flags);
cached_irq_mask |= mask;
@@ -75,12 +74,11 @@ static void disable_8259A_irq(unsigned i
raw_spin_unlock_irqrestore(&i8259A_lock, flags);
}
-static void enable_8259A_irq(unsigned int irq)
+static void enable_8259A_irq(struct irq_data *d)
{
- unsigned int mask;
+ unsigned int mask, irq = d->irq - I8259A_IRQ_BASE;
unsigned long flags;
- irq -= I8259A_IRQ_BASE;
mask = ~(1 << irq);
raw_spin_lock_irqsave(&i8259A_lock, flags);
cached_irq_mask &= mask;
@@ -145,12 +143,11 @@ static inline int i8259A_irq_real(unsign
* first, _then_ send the EOI, and the order of EOI
* to the two 8259s is important!
*/
-static void mask_and_ack_8259A(unsigned int irq)
+static void mask_and_ack_8259A(struct irq_data *d)
{
- unsigned int irqmask;
+ unsigned int irqmask, irq = d->irq - I8259A_IRQ_BASE;
unsigned long flags;
- irq -= I8259A_IRQ_BASE;
irqmask = 1 << irq;
raw_spin_lock_irqsave(&i8259A_lock, flags);
/*
@@ -290,9 +287,9 @@ static void init_8259A(int auto_eoi)
* In AEOI mode we just have to mask the interrupt
* when acking.
*/
- i8259A_chip.mask_ack = disable_8259A_irq;
+ i8259A_chip.irq_mask_ack = disable_8259A_irq;
else
- i8259A_chip.mask_ack = mask_and_ack_8259A;
+ i8259A_chip.irq_mask_ack = mask_and_ack_8259A;
udelay(100); /* wait for 8259A to initialize */
Index: linux-mips-next/arch/mips/mti-malta/malta-smtc.c
===================================================================
--- linux-mips-next.orig/arch/mips/mti-malta/malta-smtc.c
+++ linux-mips-next/arch/mips/mti-malta/malta-smtc.c
@@ -113,7 +113,8 @@ struct plat_smp_ops msmtc_smp_ops = {
*/
-int plat_set_irq_affinity(unsigned int irq, const struct cpumask *affinity)
+int plat_set_irq_affinity(struct irq_data *d, const struct cpumask *affinity,
+ bool force)
{
cpumask_t tmask;
int cpu = 0;
@@ -143,7 +144,7 @@ int plat_set_irq_affinity(unsigned int i
if ((cpu_data[cpu].vpe_id != 0) || !cpu_online(cpu))
cpu_clear(cpu, tmask);
}
- cpumask_copy(irq_desc[irq].affinity, &tmask);
+ cpumask_copy(d->affinity, &tmask);
if (cpus_empty(tmask))
/*
@@ -154,8 +155,8 @@ int plat_set_irq_affinity(unsigned int i
"IRQ affinity leaves no legal CPU for IRQ %d\n", irq);
/* Do any generic SMTC IRQ affinity setup */
- smtc_set_irq_affinity(irq, tmask);
+ smtc_set_irq_affinity(d->irq, tmask);
- return 0;
+ return IRQ_SET_MASK_OK_NOCOPY;
}
#endif /* CONFIG_MIPS_MT_SMTC_IRQAFF */
^ permalink raw reply [flat|nested] 97+ messages in thread
* [patch 14/38] mips: gic: Convert to new irq_chip functions
2011-03-23 21:08 [patch 00/38] mips: irq chip overhaul and cleanup Thomas Gleixner
` (12 preceding siblings ...)
2011-03-23 21:08 ` [patch 13/38] mips: i8259: " Thomas Gleixner
@ 2011-03-23 21:08 ` Thomas Gleixner
2011-03-24 12:22 ` Sergei Shtylyov
2011-03-23 21:08 ` [patch 16/38] mips: msc01: " Thomas Gleixner
` (23 subsequent siblings)
37 siblings, 1 reply; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-23 21:08 UTC (permalink / raw)
To: linux-mips; +Cc: Ralf Baechle
[-- Attachment #1: mips-kernel-gic.patch --]
[-- Type: text/plain, Size: 2887 bytes --]
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/mips/kernel/irq-gic.c | 44 ++++++++++++++++++--------------------------
1 file changed, 18 insertions(+), 26 deletions(-)
Index: linux-mips-next/arch/mips/kernel/irq-gic.c
===================================================================
--- linux-mips-next.orig/arch/mips/kernel/irq-gic.c
+++ linux-mips-next/arch/mips/kernel/irq-gic.c
@@ -87,17 +87,9 @@ unsigned int gic_get_int(void)
return i;
}
-static unsigned int gic_irq_startup(unsigned int irq)
+static void gic_irq_ack(struct irq_data *d)
{
- irq -= _irqbase;
- pr_debug("CPU%d: %s: irq%d\n", smp_processor_id(), __func__, irq);
- GIC_SET_INTR_MASK(irq);
- return 0;
-}
-
-static void gic_irq_ack(unsigned int irq)
-{
- irq -= _irqbase;
+ unsigned int irq = d->irq - _irqbase;
pr_debug("CPU%d: %s: irq%d\n", smp_processor_id(), __func__, irq);
GIC_CLR_INTR_MASK(irq);
@@ -105,16 +97,16 @@ static void gic_irq_ack(unsigned int irq
GICWRITE(GIC_REG(SHARED, GIC_SH_WEDGE), irq);
}
-static void gic_mask_irq(unsigned int irq)
+static void gic_mask_irq(struct irq_data *d)
{
- irq -= _irqbase;
+ unsigned int irq = d->irq - _irqbase;
pr_debug("CPU%d: %s: irq%d\n", smp_processor_id(), __func__, irq);
GIC_CLR_INTR_MASK(irq);
}
-static void gic_unmask_irq(unsigned int irq)
+static void gic_unmask_irq(struct irq_data *d)
{
- irq -= _irqbase;
+ unsigned int irq = d->irq - _irqbase;
pr_debug("CPU%d: %s: irq%d\n", smp_processor_id(), __func__, irq);
GIC_SET_INTR_MASK(irq);
}
@@ -123,13 +115,14 @@ static void gic_unmask_irq(unsigned int
static DEFINE_SPINLOCK(gic_lock);
-static int gic_set_affinity(unsigned int irq, const struct cpumask *cpumask)
+static int gic_set_affinity(struct irq_data *d, const struct cpumask *cpumask,
+ bool force)
{
+ unsigned int irq = d->irq - _irqbase;
cpumask_t tmp = CPU_MASK_NONE;
unsigned long flags;
int i;
- irq -= _irqbase;
pr_debug("%s(%d) called\n", __func__, irq);
cpumask_and(&tmp, cpumask, cpu_online_mask);
if (cpus_empty(tmp))
@@ -147,23 +140,22 @@ static int gic_set_affinity(unsigned int
set_bit(irq, pcpu_masks[first_cpu(tmp)].pcpu_mask);
}
- cpumask_copy(irq_desc[irq].affinity, cpumask);
+ cpumask_copy(d->affinity, cpumask);
spin_unlock_irqrestore(&gic_lock, flags);
- return 0;
+ return IRQ_SET_MASK_OK_NOCOPY;
}
#endif
static struct irq_chip gic_irq_controller = {
- .name = "MIPS GIC",
- .startup = gic_irq_startup,
- .ack = gic_irq_ack,
- .mask = gic_mask_irq,
- .mask_ack = gic_mask_irq,
- .unmask = gic_unmask_irq,
- .eoi = gic_unmask_irq,
+ .name = "MIPS GIC",
+ .irq_ack = gic_irq_ack,
+ .irq_mask = gic_mask_irq,
+ .irq_mask_ack = gic_mask_irq,
+ .irq_unmask = gic_unmask_irq,
+ .irq_eoi = gic_unmask_irq,
#ifdef CONFIG_SMP
- .set_affinity = gic_set_affinity,
+ .irq_set_affinity = gic_set_affinity,
#endif
};
^ permalink raw reply [flat|nested] 97+ messages in thread
* [patch 15/38] mips: gt641: Convert to new irq_chip functions
2011-03-23 21:08 [patch 00/38] mips: irq chip overhaul and cleanup Thomas Gleixner
` (14 preceding siblings ...)
2011-03-23 21:08 ` [patch 16/38] mips: msc01: " Thomas Gleixner
@ 2011-03-23 21:08 ` Thomas Gleixner
2011-03-24 14:34 ` Ralf Baechle
2011-03-23 21:09 ` [patch 17/38] mips: rm7000: " Thomas Gleixner
` (21 subsequent siblings)
37 siblings, 1 reply; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-23 21:08 UTC (permalink / raw)
To: linux-mips; +Cc: Ralf Baechle
[-- Attachment #1: mips-kernel-gt641.patch --]
[-- Type: text/plain, Size: 2598 bytes --]
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/mips/kernel/irq-gt641xx.c | 26 +++++++++++++-------------
1 file changed, 13 insertions(+), 13 deletions(-)
Index: linux-mips-next/arch/mips/kernel/irq-gt641xx.c
===================================================================
--- linux-mips-next.orig/arch/mips/kernel/irq-gt641xx.c
+++ linux-mips-next/arch/mips/kernel/irq-gt641xx.c
@@ -29,64 +29,64 @@
static DEFINE_RAW_SPINLOCK(gt641xx_irq_lock);
-static void ack_gt641xx_irq(unsigned int irq)
+static void ack_gt641xx_irq(struct irq_data *d)
{
unsigned long flags;
u32 cause;
raw_spin_lock_irqsave(>641xx_irq_lock, flags);
cause = GT_READ(GT_INTRCAUSE_OFS);
- cause &= ~GT641XX_IRQ_TO_BIT(irq);
+ cause &= ~GT641XX_IRQ_TO_BIT(d->irq);
GT_WRITE(GT_INTRCAUSE_OFS, cause);
raw_spin_unlock_irqrestore(>641xx_irq_lock, flags);
}
-static void mask_gt641xx_irq(unsigned int irq)
+static void mask_gt641xx_irq(struct irq_data *d)
{
unsigned long flags;
u32 mask;
raw_spin_lock_irqsave(>641xx_irq_lock, flags);
mask = GT_READ(GT_INTRMASK_OFS);
- mask &= ~GT641XX_IRQ_TO_BIT(irq);
+ mask &= ~GT641XX_IRQ_TO_BIT(d->irq);
GT_WRITE(GT_INTRMASK_OFS, mask);
raw_spin_unlock_irqrestore(>641xx_irq_lock, flags);
}
-static void mask_ack_gt641xx_irq(unsigned int irq)
+static void mask_ack_gt641xx_irq(struct irq_data *d)
{
unsigned long flags;
u32 cause, mask;
raw_spin_lock_irqsave(>641xx_irq_lock, flags);
mask = GT_READ(GT_INTRMASK_OFS);
- mask &= ~GT641XX_IRQ_TO_BIT(irq);
+ mask &= ~GT641XX_IRQ_TO_BIT(d->irq);
GT_WRITE(GT_INTRMASK_OFS, mask);
cause = GT_READ(GT_INTRCAUSE_OFS);
- cause &= ~GT641XX_IRQ_TO_BIT(irq);
+ cause &= ~GT641XX_IRQ_TO_BIT(d->irq);
GT_WRITE(GT_INTRCAUSE_OFS, cause);
raw_spin_unlock_irqrestore(>641xx_irq_lock, flags);
}
-static void unmask_gt641xx_irq(unsigned int irq)
+static void unmask_gt641xx_irq(struct irq_data *d)
{
unsigned long flags;
u32 mask;
raw_spin_lock_irqsave(>641xx_irq_lock, flags);
mask = GT_READ(GT_INTRMASK_OFS);
- mask |= GT641XX_IRQ_TO_BIT(irq);
+ mask |= GT641XX_IRQ_TO_BIT(d->irq);
GT_WRITE(GT_INTRMASK_OFS, mask);
raw_spin_unlock_irqrestore(>641xx_irq_lock, flags);
}
static struct irq_chip gt641xx_irq_chip = {
.name = "GT641xx",
- .ack = ack_gt641xx_irq,
- .mask = mask_gt641xx_irq,
- .mask_ack = mask_ack_gt641xx_irq,
- .unmask = unmask_gt641xx_irq,
+ .irq_ack = ack_gt641xx_irq,
+ .irq_mask = mask_gt641xx_irq,
+ .irq_mask_ack = mask_ack_gt641xx_irq,
+ .irq_unmask = unmask_gt641xx_irq,
};
void gt641xx_irq_dispatch(void)
^ permalink raw reply [flat|nested] 97+ messages in thread
* [patch 16/38] mips: msc01: Convert to new irq_chip functions
2011-03-23 21:08 [patch 00/38] mips: irq chip overhaul and cleanup Thomas Gleixner
` (13 preceding siblings ...)
2011-03-23 21:08 ` [patch 14/38] mips: gic: " Thomas Gleixner
@ 2011-03-23 21:08 ` Thomas Gleixner
2011-03-24 14:35 ` Ralf Baechle
2011-03-23 21:08 ` [patch 15/38] mips: gt641: " Thomas Gleixner
` (22 subsequent siblings)
37 siblings, 1 reply; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-23 21:08 UTC (permalink / raw)
To: linux-mips; +Cc: Ralf Baechle
[-- Attachment #1: mips-kernel-msc01.patch --]
[-- Type: text/plain, Size: 3073 bytes --]
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/mips/kernel/irq-msc01.c | 51 ++++++++++++++++++++-----------------------
1 file changed, 24 insertions(+), 27 deletions(-)
Index: linux-mips-next/arch/mips/kernel/irq-msc01.c
===================================================================
--- linux-mips-next.orig/arch/mips/kernel/irq-msc01.c
+++ linux-mips-next/arch/mips/kernel/irq-msc01.c
@@ -28,8 +28,10 @@ static unsigned long _icctrl_msc;
static unsigned int irq_base;
/* mask off an interrupt */
-static inline void mask_msc_irq(unsigned int irq)
+static inline void mask_msc_irq(struct irq_data *d)
{
+ unsigned int irq = d->irq;
+
if (irq < (irq_base + 32))
MSCIC_WRITE(MSC01_IC_DISL, 1<<(irq - irq_base));
else
@@ -37,8 +39,10 @@ static inline void mask_msc_irq(unsigned
}
/* unmask an interrupt */
-static inline void unmask_msc_irq(unsigned int irq)
+static inline void unmask_msc_irq(struct irq_data *d)
{
+ unsigned int irq = d->irq;
+
if (irq < (irq_base + 32))
MSCIC_WRITE(MSC01_IC_ENAL, 1<<(irq - irq_base));
else
@@ -48,9 +52,11 @@ static inline void unmask_msc_irq(unsign
/*
* Masks and ACKs an IRQ
*/
-static void level_mask_and_ack_msc_irq(unsigned int irq)
+static void level_mask_and_ack_msc_irq(struct irq_data *d)
{
- mask_msc_irq(irq);
+ unsigned int irq = d->irq;
+
+ mask_msc_irq(d);
if (!cpu_has_veic)
MSCIC_WRITE(MSC01_IC_EOI, 0);
/* This actually needs to be a call into platform code */
@@ -60,9 +66,11 @@ static void level_mask_and_ack_msc_irq(u
/*
* Masks and ACKs an IRQ
*/
-static void edge_mask_and_ack_msc_irq(unsigned int irq)
+static void edge_mask_and_ack_msc_irq(struct irq_data *d)
{
- mask_msc_irq(irq);
+ unsigned int irq = d->irq;
+
+ mask_msc_irq(d);
if (!cpu_has_veic)
MSCIC_WRITE(MSC01_IC_EOI, 0);
else {
@@ -75,15 +83,6 @@ static void edge_mask_and_ack_msc_irq(un
}
/*
- * End IRQ processing
- */
-static void end_msc_irq(unsigned int irq)
-{
- if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS)))
- unmask_msc_irq(irq);
-}
-
-/*
* Interrupt handler for interrupts coming from SOC-it.
*/
void ll_msc_irq(void)
@@ -107,22 +106,20 @@ static void msc_bind_eic_interrupt(int i
static struct irq_chip msc_levelirq_type = {
.name = "SOC-it-Level",
- .ack = level_mask_and_ack_msc_irq,
- .mask = mask_msc_irq,
- .mask_ack = level_mask_and_ack_msc_irq,
- .unmask = unmask_msc_irq,
- .eoi = unmask_msc_irq,
- .end = end_msc_irq,
+ .irq_ack = level_mask_and_ack_msc_irq,
+ .irq_mask = mask_msc_irq,
+ .irq_mask_ack = level_mask_and_ack_msc_irq,
+ .irq_unmask = unmask_msc_irq,
+ .irq_eoi = unmask_msc_irq,
};
static struct irq_chip msc_edgeirq_type = {
.name = "SOC-it-Edge",
- .ack = edge_mask_and_ack_msc_irq,
- .mask = mask_msc_irq,
- .mask_ack = edge_mask_and_ack_msc_irq,
- .unmask = unmask_msc_irq,
- .eoi = unmask_msc_irq,
- .end = end_msc_irq,
+ .irq_ack = edge_mask_and_ack_msc_irq,
+ .irq_mask = mask_msc_irq,
+ .irq_mask_ack = edge_mask_and_ack_msc_irq,
+ .irq_unmask = unmask_msc_irq,
+ .irq_eoi = unmask_msc_irq,
};
^ permalink raw reply [flat|nested] 97+ messages in thread
* [patch 17/38] mips: rm7000: Convert to new irq_chip functions
2011-03-23 21:08 [patch 00/38] mips: irq chip overhaul and cleanup Thomas Gleixner
` (15 preceding siblings ...)
2011-03-23 21:08 ` [patch 15/38] mips: gt641: " Thomas Gleixner
@ 2011-03-23 21:09 ` Thomas Gleixner
2011-03-24 14:35 ` Ralf Baechle
2011-03-23 21:09 ` [patch 18/38] mips: rm9000: " Thomas Gleixner
` (20 subsequent siblings)
37 siblings, 1 reply; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-23 21:09 UTC (permalink / raw)
To: linux-mips; +Cc: Ralf Baechle
[-- Attachment #1: mips-kernel-rm7000.patch --]
[-- Type: text/plain, Size: 1328 bytes --]
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/mips/kernel/irq-rm7000.c | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
Index: linux-mips-next/arch/mips/kernel/irq-rm7000.c
===================================================================
--- linux-mips-next.orig/arch/mips/kernel/irq-rm7000.c
+++ linux-mips-next/arch/mips/kernel/irq-rm7000.c
@@ -18,23 +18,23 @@
#include <asm/mipsregs.h>
#include <asm/system.h>
-static inline void unmask_rm7k_irq(unsigned int irq)
+static inline void unmask_rm7k_irq(struct irq_data *d)
{
- set_c0_intcontrol(0x100 << (irq - RM7K_CPU_IRQ_BASE));
+ set_c0_intcontrol(0x100 << (d->irq - RM7K_CPU_IRQ_BASE));
}
-static inline void mask_rm7k_irq(unsigned int irq)
+static inline void mask_rm7k_irq(struct irq_data *d)
{
- clear_c0_intcontrol(0x100 << (irq - RM7K_CPU_IRQ_BASE));
+ clear_c0_intcontrol(0x100 << (d->irq - RM7K_CPU_IRQ_BASE));
}
static struct irq_chip rm7k_irq_controller = {
.name = "RM7000",
- .ack = mask_rm7k_irq,
- .mask = mask_rm7k_irq,
- .mask_ack = mask_rm7k_irq,
- .unmask = unmask_rm7k_irq,
- .eoi = unmask_rm7k_irq
+ .irq_ack = mask_rm7k_irq,
+ .irq_mask = mask_rm7k_irq,
+ .irq_mask_ack = mask_rm7k_irq,
+ .irq_unmask = unmask_rm7k_irq,
+ .irq_eoi = unmask_rm7k_irq
};
void __init rm7k_cpu_irq_init(void)
^ permalink raw reply [flat|nested] 97+ messages in thread
* [patch 18/38] mips: rm9000: Convert to new irq_chip functions
2011-03-23 21:08 [patch 00/38] mips: irq chip overhaul and cleanup Thomas Gleixner
` (16 preceding siblings ...)
2011-03-23 21:09 ` [patch 17/38] mips: rm7000: " Thomas Gleixner
@ 2011-03-23 21:09 ` Thomas Gleixner
2011-03-24 14:36 ` Ralf Baechle
2011-03-23 21:09 ` [patch 19/38] misp: irq_cpu: " Thomas Gleixner
` (19 subsequent siblings)
37 siblings, 1 reply; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-23 21:09 UTC (permalink / raw)
To: linux-mips; +Cc: Ralf Baechle
[-- Attachment #1: mips-kernel-rm9000.patch --]
[-- Type: text/plain, Size: 3109 bytes --]
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/mips/kernel/irq-rm9000.c | 49 +++++++++++++++++++-----------------------
1 file changed, 23 insertions(+), 26 deletions(-)
Index: linux-mips-next/arch/mips/kernel/irq-rm9000.c
===================================================================
--- linux-mips-next.orig/arch/mips/kernel/irq-rm9000.c
+++ linux-mips-next/arch/mips/kernel/irq-rm9000.c
@@ -19,22 +19,22 @@
#include <asm/mipsregs.h>
#include <asm/system.h>
-static inline void unmask_rm9k_irq(unsigned int irq)
+static inline void unmask_rm9k_irq(struct irq_data *d)
{
- set_c0_intcontrol(0x1000 << (irq - RM9K_CPU_IRQ_BASE));
+ set_c0_intcontrol(0x1000 << (d->irq - RM9K_CPU_IRQ_BASE));
}
-static inline void mask_rm9k_irq(unsigned int irq)
+static inline void mask_rm9k_irq(struct irq_data *d)
{
- clear_c0_intcontrol(0x1000 << (irq - RM9K_CPU_IRQ_BASE));
+ clear_c0_intcontrol(0x1000 << (d->irq - RM9K_CPU_IRQ_BASE));
}
-static inline void rm9k_cpu_irq_enable(unsigned int irq)
+static inline void rm9k_cpu_irq_enable(struct irq_data *d)
{
unsigned long flags;
local_irq_save(flags);
- unmask_rm9k_irq(irq);
+ unmask_rm9k_irq(d);
local_irq_restore(flags);
}
@@ -43,50 +43,47 @@ static inline void rm9k_cpu_irq_enable(u
*/
static void local_rm9k_perfcounter_irq_startup(void *args)
{
- unsigned int irq = (unsigned int) args;
-
- rm9k_cpu_irq_enable(irq);
+ rm9k_cpu_irq_enable(args);
}
-static unsigned int rm9k_perfcounter_irq_startup(unsigned int irq)
+static unsigned int rm9k_perfcounter_irq_startup(struct irq_data *d)
{
- on_each_cpu(local_rm9k_perfcounter_irq_startup, (void *) irq, 1);
+ on_each_cpu(local_rm9k_perfcounter_irq_startup, d, 1);
return 0;
}
static void local_rm9k_perfcounter_irq_shutdown(void *args)
{
- unsigned int irq = (unsigned int) args;
unsigned long flags;
local_irq_save(flags);
- mask_rm9k_irq(irq);
+ mask_rm9k_irq(args);
local_irq_restore(flags);
}
-static void rm9k_perfcounter_irq_shutdown(unsigned int irq)
+static void rm9k_perfcounter_irq_shutdown(struct irq_data *d)
{
- on_each_cpu(local_rm9k_perfcounter_irq_shutdown, (void *) irq, 1);
+ on_each_cpu(local_rm9k_perfcounter_irq_shutdown, d, 1);
}
static struct irq_chip rm9k_irq_controller = {
.name = "RM9000",
- .ack = mask_rm9k_irq,
- .mask = mask_rm9k_irq,
- .mask_ack = mask_rm9k_irq,
- .unmask = unmask_rm9k_irq,
- .eoi = unmask_rm9k_irq
+ .irq_ack = mask_rm9k_irq,
+ .irq_mask = mask_rm9k_irq,
+ .irq_mask_ack = mask_rm9k_irq,
+ .irq_unmask = unmask_rm9k_irq,
+ .irq_eoi = unmask_rm9k_irq
};
static struct irq_chip rm9k_perfcounter_irq = {
.name = "RM9000",
- .startup = rm9k_perfcounter_irq_startup,
- .shutdown = rm9k_perfcounter_irq_shutdown,
- .ack = mask_rm9k_irq,
- .mask = mask_rm9k_irq,
- .mask_ack = mask_rm9k_irq,
- .unmask = unmask_rm9k_irq,
+ .irq_startup = rm9k_perfcounter_irq_startup,
+ .irq_shutdown = rm9k_perfcounter_irq_shutdown,
+ .irq_ack = mask_rm9k_irq,
+ .irq_mask = mask_rm9k_irq,
+ .irq_mask_ack = mask_rm9k_irq,
+ .irq_unmask = unmask_rm9k_irq,
};
unsigned int rm9000_perfcount_irq;
^ permalink raw reply [flat|nested] 97+ messages in thread
* [patch 19/38] misp: irq_cpu: Convert to new irq_chip functions
2011-03-23 21:08 [patch 00/38] mips: irq chip overhaul and cleanup Thomas Gleixner
` (17 preceding siblings ...)
2011-03-23 21:09 ` [patch 18/38] mips: rm9000: " Thomas Gleixner
@ 2011-03-23 21:09 ` Thomas Gleixner
2011-03-24 12:28 ` Sergei Shtylyov
2011-03-23 21:09 ` [patch 20/38] mips: txx9: Convert core " Thomas Gleixner
` (18 subsequent siblings)
37 siblings, 1 reply; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-23 21:09 UTC (permalink / raw)
To: linux-mips; +Cc: Ralf Baechle
[-- Attachment #1: misp-kerenl-irq-cpu.patch --]
[-- Type: text/plain, Size: 2924 bytes --]
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/mips/kernel/irq_cpu.c | 46 ++++++++++++++++++++-------------------------
1 file changed, 21 insertions(+), 25 deletions(-)
Index: linux-mips-next/arch/mips/kernel/irq_cpu.c
===================================================================
--- linux-mips-next.orig/arch/mips/kernel/irq_cpu.c
+++ linux-mips-next/arch/mips/kernel/irq_cpu.c
@@ -37,42 +37,38 @@
#include <asm/mipsmtregs.h>
#include <asm/system.h>
-static inline void unmask_mips_irq(unsigned int irq)
+static inline void unmask_mips_irq(struct irq_data *d)
{
- set_c0_status(0x100 << (irq - MIPS_CPU_IRQ_BASE));
+ set_c0_status(0x100 << (d->irq - MIPS_CPU_IRQ_BASE));
irq_enable_hazard();
}
-static inline void mask_mips_irq(unsigned int irq)
+static inline void mask_mips_irq(struct irq_data *d)
{
- clear_c0_status(0x100 << (irq - MIPS_CPU_IRQ_BASE));
+ clear_c0_status(0x100 << (d->irq - MIPS_CPU_IRQ_BASE));
irq_disable_hazard();
}
static struct irq_chip mips_cpu_irq_controller = {
.name = "MIPS",
- .ack = mask_mips_irq,
- .mask = mask_mips_irq,
- .mask_ack = mask_mips_irq,
- .unmask = unmask_mips_irq,
- .eoi = unmask_mips_irq,
+ .irq_ack = mask_mips_irq,
+ .irq_mask = mask_mips_irq,
+ .irq_mask_ack = mask_mips_irq,
+ .irq_unmask = unmask_mips_irq,
+ .irq_eoi = unmask_mips_irq,
};
/*
* Basically the same as above but taking care of all the MT stuff
*/
-#define unmask_mips_mt_irq unmask_mips_irq
-#define mask_mips_mt_irq mask_mips_irq
-
-static unsigned int mips_mt_cpu_irq_startup(unsigned int irq)
+static unsigned int mips_mt_cpu_irq_startup(struct irq_data *d)
{
unsigned int vpflags = dvpe();
- clear_c0_cause(0x100 << (irq - MIPS_CPU_IRQ_BASE));
+ clear_c0_cause(0x100 << (d->irq - MIPS_CPU_IRQ_BASE));
evpe(vpflags);
- unmask_mips_mt_irq(irq);
-
+ unmask_mips_irq(d);
return 0;
}
@@ -80,22 +76,22 @@ static unsigned int mips_mt_cpu_irq_star
* While we ack the interrupt interrupts are disabled and thus we don't need
* to deal with concurrency issues. Same for mips_cpu_irq_end.
*/
-static void mips_mt_cpu_irq_ack(unsigned int irq)
+static void mips_mt_cpu_irq_ack(struct irq_data *d)
{
unsigned int vpflags = dvpe();
- clear_c0_cause(0x100 << (irq - MIPS_CPU_IRQ_BASE));
+ clear_c0_cause(0x100 << (d->irq - MIPS_CPU_IRQ_BASE));
evpe(vpflags);
- mask_mips_mt_irq(irq);
+ mask_mips_irq(d);
}
static struct irq_chip mips_mt_cpu_irq_controller = {
.name = "MIPS",
- .startup = mips_mt_cpu_irq_startup,
- .ack = mips_mt_cpu_irq_ack,
- .mask = mask_mips_mt_irq,
- .mask_ack = mips_mt_cpu_irq_ack,
- .unmask = unmask_mips_mt_irq,
- .eoi = unmask_mips_mt_irq,
+ .irq_startup = mips_mt_cpu_irq_startup,
+ .irq_ack = mips_mt_cpu_irq_ack,
+ .irq_mask = mask_mips_irq,
+ .irq_mask_ack = mips_mt_cpu_irq_ack,
+ .irq_unmask = unmask_mips_irq,
+ .irq_eoi = unmask_mips_irq,
};
void __init mips_cpu_irq_init(void)
^ permalink raw reply [flat|nested] 97+ messages in thread
* [patch 20/38] mips: txx9: Convert core to new irq_chip functions
2011-03-23 21:08 [patch 00/38] mips: irq chip overhaul and cleanup Thomas Gleixner
` (18 preceding siblings ...)
2011-03-23 21:09 ` [patch 19/38] misp: irq_cpu: " Thomas Gleixner
@ 2011-03-23 21:09 ` Thomas Gleixner
2011-03-24 14:39 ` Ralf Baechle
2011-03-23 21:09 ` [patch 21/38] mips: smtc: Use irq_data in smtc_forward_irq() Thomas Gleixner
` (17 subsequent siblings)
37 siblings, 1 reply; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-23 21:09 UTC (permalink / raw)
To: linux-mips; +Cc: Ralf Baechle
[-- Attachment #1: mips-kernel-txx9.patch --]
[-- Type: text/plain, Size: 2430 bytes --]
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/mips/kernel/irq_txx9.c | 28 ++++++++++++++--------------
1 file changed, 14 insertions(+), 14 deletions(-)
Index: linux-mips-next/arch/mips/kernel/irq_txx9.c
===================================================================
--- linux-mips-next.orig/arch/mips/kernel/irq_txx9.c
+++ linux-mips-next/arch/mips/kernel/irq_txx9.c
@@ -63,9 +63,9 @@ static struct {
unsigned char mode;
} txx9irq[TXx9_MAX_IR] __read_mostly;
-static void txx9_irq_unmask(unsigned int irq)
+static void txx9_irq_unmask(struct irq_data *d)
{
- unsigned int irq_nr = irq - TXX9_IRQ_BASE;
+ unsigned int irq_nr = d->irq - TXX9_IRQ_BASE;
u32 __iomem *ilrp = &txx9_ircptr->ilr[(irq_nr % 16 ) / 2];
int ofs = irq_nr / 16 * 16 + (irq_nr & 1) * 8;
@@ -79,9 +79,9 @@ static void txx9_irq_unmask(unsigned int
#endif
}
-static inline void txx9_irq_mask(unsigned int irq)
+static inline void txx9_irq_mask(struct irq_data *d)
{
- unsigned int irq_nr = irq - TXX9_IRQ_BASE;
+ unsigned int irq_nr = d->irq - TXX9_IRQ_BASE;
u32 __iomem *ilrp = &txx9_ircptr->ilr[(irq_nr % 16) / 2];
int ofs = irq_nr / 16 * 16 + (irq_nr & 1) * 8;
@@ -99,19 +99,19 @@ static inline void txx9_irq_mask(unsigne
#endif
}
-static void txx9_irq_mask_ack(unsigned int irq)
+static void txx9_irq_mask_ack(struct irq_data *d)
{
- unsigned int irq_nr = irq - TXX9_IRQ_BASE;
+ unsigned int irq_nr = d->irq - TXX9_IRQ_BASE;
- txx9_irq_mask(irq);
+ txx9_irq_mask(d);
/* clear edge detection */
if (unlikely(TXx9_IRCR_EDGE(txx9irq[irq_nr].mode)))
__raw_writel(TXx9_IRSCR_EIClrE | irq_nr, &txx9_ircptr->scr);
}
-static int txx9_irq_set_type(unsigned int irq, unsigned int flow_type)
+static int txx9_irq_set_type(struct irq_data *d, unsigned int flow_type)
{
- unsigned int irq_nr = irq - TXX9_IRQ_BASE;
+ unsigned int irq_nr = d->irq - TXX9_IRQ_BASE;
u32 cr;
u32 __iomem *crp;
int ofs;
@@ -139,11 +139,11 @@ static int txx9_irq_set_type(unsigned in
static struct irq_chip txx9_irq_chip = {
.name = "TXX9",
- .ack = txx9_irq_mask_ack,
- .mask = txx9_irq_mask,
- .mask_ack = txx9_irq_mask_ack,
- .unmask = txx9_irq_unmask,
- .set_type = txx9_irq_set_type,
+ .irq_ack = txx9_irq_mask_ack,
+ .irq_mask = txx9_irq_mask,
+ .irq_mask_ack = txx9_irq_mask_ack,
+ .irq_unmask = txx9_irq_unmask,
+ .irq_set_type = txx9_irq_set_type,
};
void __init txx9_irq_init(unsigned long baseaddr)
^ permalink raw reply [flat|nested] 97+ messages in thread
* [patch 21/38] mips: smtc: Use irq_data in smtc_forward_irq()
2011-03-23 21:08 [patch 00/38] mips: irq chip overhaul and cleanup Thomas Gleixner
` (19 preceding siblings ...)
2011-03-23 21:09 ` [patch 20/38] mips: txx9: Convert core " Thomas Gleixner
@ 2011-03-23 21:09 ` Thomas Gleixner
2011-03-24 14:40 ` Ralf Baechle
2011-03-23 21:09 ` [patch 22/38] mips: smtc: Cleanup the hook mess and use irq_data Thomas Gleixner
` (16 subsequent siblings)
37 siblings, 1 reply; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-23 21:09 UTC (permalink / raw)
To: linux-mips; +Cc: Ralf Baechle
[-- Attachment #1: mips-kernel-smtc.c --]
[-- Type: text/plain, Size: 810 bytes --]
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/mips/kernel/smtc.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
Index: linux-mips-next/arch/mips/kernel/smtc.c
===================================================================
--- linux-mips-next.orig/arch/mips/kernel/smtc.c
+++ linux-mips-next/arch/mips/kernel/smtc.c
@@ -679,6 +679,7 @@ void smtc_set_irq_affinity(unsigned int
void smtc_forward_irq(unsigned int irq)
{
+ struct irq_data *d = irq_get_irq_data(irq);
int target;
/*
@@ -692,7 +693,7 @@ void smtc_forward_irq(unsigned int irq)
* and efficiency, we just pick the easiest one to find.
*/
- target = cpumask_first(irq_desc[irq].affinity);
+ target = cpumask_first(d->affinity);
/*
* We depend on the platform code to have correctly processed
^ permalink raw reply [flat|nested] 97+ messages in thread
* [patch 22/38] mips: smtc: Cleanup the hook mess and use irq_data
2011-03-23 21:08 [patch 00/38] mips: irq chip overhaul and cleanup Thomas Gleixner
` (20 preceding siblings ...)
2011-03-23 21:09 ` [patch 21/38] mips: smtc: Use irq_data in smtc_forward_irq() Thomas Gleixner
@ 2011-03-23 21:09 ` Thomas Gleixner
2011-03-24 14:40 ` Ralf Baechle
2011-03-23 21:09 ` [patch 23/38] mips: Use generic show_interrupts() Thomas Gleixner
` (15 subsequent siblings)
37 siblings, 1 reply; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-23 21:09 UTC (permalink / raw)
To: linux-mips; +Cc: Ralf Baechle
[-- Attachment #1: mips-fixup-hook-mess.patch --]
[-- Type: text/plain, Size: 4667 bytes --]
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/mips/include/asm/irq.h | 60 ++++++++++++++++++++++----------------------
arch/mips/kernel/irq.c | 6 ++--
arch/mips/kernel/smtc.c | 12 +++-----
3 files changed, 39 insertions(+), 39 deletions(-)
Index: linux-mips-next/arch/mips/include/asm/irq.h
===================================================================
--- linux-mips-next.orig/arch/mips/include/asm/irq.h
+++ linux-mips-next/arch/mips/include/asm/irq.h
@@ -57,7 +57,7 @@ static inline void smtc_im_ack_irq(unsig
extern int plat_set_irq_affinity(struct irq_data *d,
const struct cpumask *affinity, bool force);
-extern void smtc_forward_irq(unsigned int irq);
+extern void smtc_forward_irq(struct irq_data *d);
/*
* IRQ affinity hook invoked at the beginning of interrupt dispatch
@@ -70,51 +70,53 @@ extern void smtc_forward_irq(unsigned in
* cpumask implementations, this version is optimistically assuming
* that cpumask.h macro overhead is reasonable during interrupt dispatch.
*/
-#define IRQ_AFFINITY_HOOK(irq) \
-do { \
- if (!cpumask_test_cpu(smp_processor_id(), irq_desc[irq].affinity)) {\
- smtc_forward_irq(irq); \
- irq_exit(); \
- return; \
- } \
-} while (0)
+static inline int handle_on_other_cpu(unsigned int irq)
+{
+ struct irq_data *d = irq_get_irq_data(irq);
+
+ if (cpumask_test_cpu(smp_processor_id(), d->affinity))
+ return 0;
+ smtc_forward_irq(d);
+ return 1;
+}
#else /* Not doing SMTC affinity */
-#define IRQ_AFFINITY_HOOK(irq) do { } while (0)
+static inline int handle_on_other_cpu(unsigned int irq) { return 0; }
#endif /* CONFIG_MIPS_MT_SMTC_IRQAFF */
#ifdef CONFIG_MIPS_MT_SMTC_IM_BACKSTOP
+static inline void smtc_im_backstop(unsigned int irq)
+{
+ if (irq_hwmask[irq] & 0x0000ff00)
+ write_c0_tccontext(read_c0_tccontext() &
+ ~(irq_hwmask[irq] & 0x0000ff00));
+}
+
/*
* Clear interrupt mask handling "backstop" if irq_hwmask
* entry so indicates. This implies that the ack() or end()
* functions will take over re-enabling the low-level mask.
* Otherwise it will be done on return from exception.
*/
-#define __DO_IRQ_SMTC_HOOK(irq) \
-do { \
- IRQ_AFFINITY_HOOK(irq); \
- if (irq_hwmask[irq] & 0x0000ff00) \
- write_c0_tccontext(read_c0_tccontext() & \
- ~(irq_hwmask[irq] & 0x0000ff00)); \
-} while (0)
-
-#define __NO_AFFINITY_IRQ_SMTC_HOOK(irq) \
-do { \
- if (irq_hwmask[irq] & 0x0000ff00) \
- write_c0_tccontext(read_c0_tccontext() & \
- ~(irq_hwmask[irq] & 0x0000ff00)); \
-} while (0)
+static inline int smtc_handle_on_other_cpu(unsigned int irq)
+{
+ int ret = handle_on_other_cpu(irq);
+
+ if (!ret)
+ smtc_im_backstop(irq);
+ return ret;
+}
#else
-#define __DO_IRQ_SMTC_HOOK(irq) \
-do { \
- IRQ_AFFINITY_HOOK(irq); \
-} while (0)
-#define __NO_AFFINITY_IRQ_SMTC_HOOK(irq) do { } while (0)
+static inline void smtc_im_backstop(unsigned int irq) { }
+static inline int smtc_handle_on_other_cpu(unsigned int irq)
+{
+ return handle_on_other_cpu(irq);
+}
#endif
Index: linux-mips-next/arch/mips/kernel/irq.c
===================================================================
--- linux-mips-next.orig/arch/mips/kernel/irq.c
+++ linux-mips-next/arch/mips/kernel/irq.c
@@ -183,8 +183,8 @@ void __irq_entry do_IRQ(unsigned int irq
{
irq_enter();
check_stack_overflow();
- __DO_IRQ_SMTC_HOOK(irq);
- generic_handle_irq(irq);
+ if (!smtc_handle_on_other_cpu(irq))
+ generic_handle_irq(irq);
irq_exit();
}
@@ -197,7 +197,7 @@ void __irq_entry do_IRQ(unsigned int irq
void __irq_entry do_IRQ_no_affinity(unsigned int irq)
{
irq_enter();
- __NO_AFFINITY_IRQ_SMTC_HOOK(irq);
+ smtc_im_backstop(irq);
generic_handle_irq(irq);
irq_exit();
}
Index: linux-mips-next/arch/mips/kernel/smtc.c
===================================================================
--- linux-mips-next.orig/arch/mips/kernel/smtc.c
+++ linux-mips-next/arch/mips/kernel/smtc.c
@@ -677,9 +677,9 @@ void smtc_set_irq_affinity(unsigned int
*/
}
-void smtc_forward_irq(unsigned int irq)
+void smtc_forward_irq(struct irq_data *d)
{
- struct irq_data *d = irq_get_irq_data(irq);
+ unsigned int irq = d->irq;
int target;
/*
@@ -708,12 +708,10 @@ void smtc_forward_irq(unsigned int irq)
*/
/* If no one is eligible, service locally */
- if (target >= NR_CPUS) {
+ if (target >= NR_CPUS)
do_IRQ_no_affinity(irq);
- return;
- }
-
- smtc_send_ipi(target, IRQ_AFFINITY_IPI, irq);
+ else
+ smtc_send_ipi(target, IRQ_AFFINITY_IPI, irq);
}
#endif /* CONFIG_MIPS_MT_SMTC_IRQAFF */
^ permalink raw reply [flat|nested] 97+ messages in thread
* [patch 23/38] mips: Use generic show_interrupts()
2011-03-23 21:08 [patch 00/38] mips: irq chip overhaul and cleanup Thomas Gleixner
` (21 preceding siblings ...)
2011-03-23 21:09 ` [patch 22/38] mips: smtc: Cleanup the hook mess and use irq_data Thomas Gleixner
@ 2011-03-23 21:09 ` Thomas Gleixner
2011-03-24 14:41 ` Ralf Baechle
2011-03-23 21:09 ` [patch 24/38] mips: loongson: Convert to new irq_chip functions Thomas Gleixner
` (14 subsequent siblings)
37 siblings, 1 reply; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-23 21:09 UTC (permalink / raw)
To: linux-mips; +Cc: Ralf Baechle
[-- Attachment #1: mips-use-generic-show-int.patch --]
[-- Type: text/plain, Size: 2093 bytes --]
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/mips/Kconfig | 1 +
arch/mips/kernel/irq.c | 43 ++-----------------------------------------
2 files changed, 3 insertions(+), 41 deletions(-)
Index: linux-mips-next/arch/mips/Kconfig
===================================================================
--- linux-mips-next.orig/arch/mips/Kconfig
+++ linux-mips-next/arch/mips/Kconfig
@@ -22,6 +22,7 @@ config MIPS
select HAVE_DMA_API_DEBUG
select HAVE_GENERIC_HARDIRQS
select GENERIC_IRQ_PROBE
+ select GENERIC_IRQ_SHOW
select HAVE_ARCH_JUMP_LABEL
menu "Machine selection"
Index: linux-mips-next/arch/mips/kernel/irq.c
===================================================================
--- linux-mips-next.orig/arch/mips/kernel/irq.c
+++ linux-mips-next/arch/mips/kernel/irq.c
@@ -81,48 +81,9 @@ void ack_bad_irq(unsigned int irq)
atomic_t irq_err_count;
-/*
- * Generic, controller-independent functions:
- */
-
-int show_interrupts(struct seq_file *p, void *v)
+int arch_show_interrupts(struct seq_file *p, int prec)
{
- int i = *(loff_t *) v, j;
- struct irqaction * action;
- unsigned long flags;
-
- if (i == 0) {
- seq_printf(p, " ");
- for_each_online_cpu(j)
- seq_printf(p, "CPU%d ", j);
- seq_putc(p, '\n');
- }
-
- if (i < NR_IRQS) {
- raw_spin_lock_irqsave(&irq_desc[i].lock, flags);
- action = irq_desc[i].action;
- if (!action)
- goto skip;
- seq_printf(p, "%3d: ", i);
-#ifndef CONFIG_SMP
- seq_printf(p, "%10u ", kstat_irqs(i));
-#else
- for_each_online_cpu(j)
- seq_printf(p, "%10u ", kstat_irqs_cpu(i, j));
-#endif
- seq_printf(p, " %14s", irq_desc[i].chip->name);
- seq_printf(p, " %s", action->name);
-
- for (action=action->next; action; action = action->next)
- seq_printf(p, ", %s", action->name);
-
- seq_putc(p, '\n');
-skip:
- raw_spin_unlock_irqrestore(&irq_desc[i].lock, flags);
- } else if (i == NR_IRQS) {
- seq_putc(p, '\n');
- seq_printf(p, "ERR: %10u\n", atomic_read(&irq_err_count));
- }
+ seq_printf(p, "%*s: %10u\n", prec, "ERR", atomic_read(&irq_err_count));
return 0;
}
^ permalink raw reply [flat|nested] 97+ messages in thread
* [patch 24/38] mips: loongson: Convert to new irq_chip functions
2011-03-23 21:08 [patch 00/38] mips: irq chip overhaul and cleanup Thomas Gleixner
` (22 preceding siblings ...)
2011-03-23 21:09 ` [patch 23/38] mips: Use generic show_interrupts() Thomas Gleixner
@ 2011-03-23 21:09 ` Thomas Gleixner
2011-03-24 14:43 ` Ralf Baechle
2011-03-23 21:09 ` [patch 25/38] mips: pmc-sierra: " Thomas Gleixner
` (13 subsequent siblings)
37 siblings, 1 reply; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-23 21:09 UTC (permalink / raw)
To: linux-mips; +Cc: Ralf Baechle
[-- Attachment #1: mips-loongson.patch --]
[-- Type: text/plain, Size: 1328 bytes --]
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/mips/loongson/common/bonito-irq.c | 16 +++++++---------
1 file changed, 7 insertions(+), 9 deletions(-)
Index: linux-mips-next/arch/mips/loongson/common/bonito-irq.c
===================================================================
--- linux-mips-next.orig/arch/mips/loongson/common/bonito-irq.c
+++ linux-mips-next/arch/mips/loongson/common/bonito-irq.c
@@ -16,24 +16,22 @@
#include <loongson.h>
-static inline void bonito_irq_enable(unsigned int irq)
+static inline void bonito_irq_enable(struct irq_data *d)
{
- LOONGSON_INTENSET = (1 << (irq - LOONGSON_IRQ_BASE));
+ LOONGSON_INTENSET = (1 << (d->irq - LOONGSON_IRQ_BASE));
mmiowb();
}
-static inline void bonito_irq_disable(unsigned int irq)
+static inline void bonito_irq_disable(struct irq_data *d)
{
- LOONGSON_INTENCLR = (1 << (irq - LOONGSON_IRQ_BASE));
+ LOONGSON_INTENCLR = (1 << (d->irq - LOONGSON_IRQ_BASE));
mmiowb();
}
static struct irq_chip bonito_irq_type = {
- .name = "bonito_irq",
- .ack = bonito_irq_disable,
- .mask = bonito_irq_disable,
- .mask_ack = bonito_irq_disable,
- .unmask = bonito_irq_enable,
+ .name = "bonito_irq",
+ .irq_mask = bonito_irq_disable,
+ .irq_unmask = bonito_irq_enable,
};
static struct irqaction __maybe_unused dma_timeout_irqaction = {
^ permalink raw reply [flat|nested] 97+ messages in thread
* [patch 25/38] mips: pmc-sierra: Convert to new irq_chip functions
2011-03-23 21:08 [patch 00/38] mips: irq chip overhaul and cleanup Thomas Gleixner
` (23 preceding siblings ...)
2011-03-23 21:09 ` [patch 24/38] mips: loongson: Convert to new irq_chip functions Thomas Gleixner
@ 2011-03-23 21:09 ` Thomas Gleixner
2011-03-24 14:44 ` Ralf Baechle
2011-03-23 21:09 ` [patch 26/38] mips: pnx83xx: " Thomas Gleixner
` (12 subsequent siblings)
37 siblings, 1 reply; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-23 21:09 UTC (permalink / raw)
To: linux-mips; +Cc: Ralf Baechle
[-- Attachment #1: misp-pmc.patch --]
[-- Type: text/plain, Size: 9517 bytes --]
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/mips/pmc-sierra/msp71xx/msp_irq_cic.c | 41 +++++---------
arch/mips/pmc-sierra/msp71xx/msp_irq_per.c | 80 ++++++-----------------------
arch/mips/pmc-sierra/msp71xx/msp_irq_slp.c | 18 ++++--
3 files changed, 46 insertions(+), 93 deletions(-)
Index: linux-mips-next/arch/mips/pmc-sierra/msp71xx/msp_irq_cic.c
===================================================================
--- linux-mips-next.orig/arch/mips/pmc-sierra/msp71xx/msp_irq_cic.c
+++ linux-mips-next/arch/mips/pmc-sierra/msp71xx/msp_irq_cic.c
@@ -77,7 +77,7 @@ static inline void cic_wmb(void)
dummy_read++;
}
-static inline void unmask_cic_irq(unsigned int irq)
+static void unmask_cic_irq(struct irq_data *d)
{
volatile u32 *cic_msk_reg = CIC_VPE0_MSK_REG;
int vpe;
@@ -89,18 +89,18 @@ static inline void unmask_cic_irq(unsign
* Make sure we have IRQ affinity. It may have changed while
* we were processing the IRQ.
*/
- if (!cpumask_test_cpu(smp_processor_id(), irq_desc[irq].affinity))
+ if (!cpumask_test_cpu(smp_processor_id(), d->affinity))
return;
#endif
vpe = get_current_vpe();
LOCK_VPE(flags, mtflags);
- cic_msk_reg[vpe] |= (1 << (irq - MSP_CIC_INTBASE));
+ cic_msk_reg[vpe] |= (1 << (d->irq - MSP_CIC_INTBASE));
UNLOCK_VPE(flags, mtflags);
cic_wmb();
}
-static inline void mask_cic_irq(unsigned int irq)
+static void mask_cic_irq(struct irq_data *d)
{
volatile u32 *cic_msk_reg = CIC_VPE0_MSK_REG;
int vpe = get_current_vpe();
@@ -108,33 +108,27 @@ static inline void mask_cic_irq(unsigned
unsigned long flags, mtflags;
#endif
LOCK_VPE(flags, mtflags);
- cic_msk_reg[vpe] &= ~(1 << (irq - MSP_CIC_INTBASE));
+ cic_msk_reg[vpe] &= ~(1 << (d->irq - MSP_CIC_INTBASE));
UNLOCK_VPE(flags, mtflags);
cic_wmb();
}
-static inline void msp_cic_irq_ack(unsigned int irq)
+static void msp_cic_irq_ack(struct irq_data *d)
{
- mask_cic_irq(irq);
+ mask_cic_irq(d);
/*
* Only really necessary for 18, 16-14 and sometimes 3:0
* (since these can be edge sensitive) but it doesn't
* hurt for the others
*/
- *CIC_STS_REG = (1 << (irq - MSP_CIC_INTBASE));
- smtc_im_ack_irq(irq);
-}
-
-static void msp_cic_irq_end(unsigned int irq)
-{
- if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS)))
- unmask_cic_irq(irq);
+ *CIC_STS_REG = (1 << (d->irq - MSP_CIC_INTBASE));
+ smtc_im_ack_irq(d->irq);
}
/*Note: Limiting to VSMP . Not tested in SMTC */
#ifdef CONFIG_MIPS_MT_SMP
-static inline int msp_cic_irq_set_affinity(unsigned int irq,
- const struct cpumask *cpumask)
+static int msp_cic_irq_set_affinity(struct irq_data *d,
+ const struct cpumask *cpumask, bool force)
{
int cpu;
unsigned long flags;
@@ -163,13 +157,12 @@ static inline int msp_cic_irq_set_affini
static struct irq_chip msp_cic_irq_controller = {
.name = "MSP_CIC",
- .mask = mask_cic_irq,
- .mask_ack = msp_cic_irq_ack,
- .unmask = unmask_cic_irq,
- .ack = msp_cic_irq_ack,
- .end = msp_cic_irq_end,
+ .irq_mask = mask_cic_irq,
+ .irq_mask_ack = msp_cic_irq_ack,
+ .irq_unmask = unmask_cic_irq,
+ .irq_ack = msp_cic_irq_ack,
#ifdef CONFIG_MIPS_MT_SMP
- .set_affinity = msp_cic_irq_set_affinity,
+ .irq_set_affinity = msp_cic_irq_set_affinity,
#endif
};
@@ -220,7 +213,5 @@ void msp_cic_irq_dispatch(void)
do_IRQ(ffs(pending) + MSP_CIC_INTBASE - 1);
} else{
spurious_interrupt();
- /* Re-enable the CIC cascaded interrupt. */
- irq_desc[MSP_INT_CIC].chip->end(MSP_INT_CIC);
}
}
Index: linux-mips-next/arch/mips/pmc-sierra/msp71xx/msp_irq_per.c
===================================================================
--- linux-mips-next.orig/arch/mips/pmc-sierra/msp71xx/msp_irq_per.c
+++ linux-mips-next/arch/mips/pmc-sierra/msp71xx/msp_irq_per.c
@@ -48,100 +48,61 @@ static inline void per_wmb(void)
dummy_read++;
}
-static inline void unmask_per_irq(unsigned int irq)
+static inline void unmask_per_irq(struct irq_data *d)
{
#ifdef CONFIG_SMP
unsigned long flags;
spin_lock_irqsave(&per_lock, flags);
- *PER_INT_MSK_REG |= (1 << (irq - MSP_PER_INTBASE));
+ *PER_INT_MSK_REG |= (1 << (d->irq - MSP_PER_INTBASE));
spin_unlock_irqrestore(&per_lock, flags);
#else
- *PER_INT_MSK_REG |= (1 << (irq - MSP_PER_INTBASE));
+ *PER_INT_MSK_REG |= (1 << (d->irq - MSP_PER_INTBASE));
#endif
per_wmb();
}
-static inline void mask_per_irq(unsigned int irq)
+static inline void mask_per_irq(struct irq_data *d)
{
#ifdef CONFIG_SMP
unsigned long flags;
spin_lock_irqsave(&per_lock, flags);
- *PER_INT_MSK_REG &= ~(1 << (irq - MSP_PER_INTBASE));
+ *PER_INT_MSK_REG &= ~(1 << (d->irq - MSP_PER_INTBASE));
spin_unlock_irqrestore(&per_lock, flags);
#else
- *PER_INT_MSK_REG &= ~(1 << (irq - MSP_PER_INTBASE));
+ *PER_INT_MSK_REG &= ~(1 << (d->irq - MSP_PER_INTBASE));
#endif
per_wmb();
}
-static inline void msp_per_irq_enable(unsigned int irq)
+static inline void msp_per_irq_ack(struct irq_data *d)
{
- unmask_per_irq(irq);
-}
-
-static inline void msp_per_irq_disable(unsigned int irq)
-{
- mask_per_irq(irq);
-}
-
-static unsigned int msp_per_irq_startup(unsigned int irq)
-{
- msp_per_irq_enable(irq);
- return 0;
-}
-
-#define msp_per_irq_shutdown msp_per_irq_disable
-
-static inline void msp_per_irq_ack(unsigned int irq)
-{
- mask_per_irq(irq);
+ mask_per_irq(d);
/*
* In the PER interrupt controller, only bits 11 and 10
* are write-to-clear, (SPI TX complete, SPI RX complete).
* It does nothing for any others.
*/
-
- *PER_INT_STS_REG = (1 << (irq - MSP_PER_INTBASE));
-
- /* Re-enable the CIC cascaded interrupt and return */
- irq_desc[MSP_INT_CIC].chip->end(MSP_INT_CIC);
-}
-
-static void msp_per_irq_end(unsigned int irq)
-{
- if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS)))
- unmask_per_irq(irq);
+ *PER_INT_STS_REG = (1 << (d->irq - MSP_PER_INTBASE));
}
#ifdef CONFIG_SMP
-static inline int msp_per_irq_set_affinity(unsigned int irq,
- const struct cpumask *affinity)
+static int msp_per_irq_set_affinity(struct irq_data *d,
+ const struct cpumask *affinity, bool force)
{
- unsigned long flags;
- /*
- * Calls to ack, end, startup, enable are spinlocked in setup_irq and
- * __do_IRQ.Callers of this function do not spinlock,so we need to
- * do so ourselves.
- */
- raw_spin_lock_irqsave(&irq_desc[irq].lock, flags);
- msp_per_irq_enable(irq);
- raw_spin_unlock_irqrestore(&irq_desc[irq].lock, flags);
+ /* WTF is this doing ????? */
+ unmask_per_irq(d);
return 0;
-
}
#endif
static struct irq_chip msp_per_irq_controller = {
.name = "MSP_PER",
- .startup = msp_per_irq_startup,
- .shutdown = msp_per_irq_shutdown,
- .enable = msp_per_irq_enable,
- .disable = msp_per_irq_disable,
+ .irq_enable = unmask_per_irq.
+ .irq_disable = mask_per_irq,
+ .irq_ack = msp_per_irq_ack,
#ifdef CONFIG_SMP
- .set_affinity = msp_per_irq_set_affinity,
+ .irq_set_affinity = msp_per_irq_set_affinity,
#endif
- .ack = msp_per_irq_ack,
- .end = msp_per_irq_end,
};
void __init msp_per_irq_init(void)
@@ -152,10 +113,7 @@ void __init msp_per_irq_init(void)
*PER_INT_STS_REG = 0xFFFFFFFF;
/* initialize all the IRQ descriptors */
for (i = MSP_PER_INTBASE; i < MSP_PER_INTBASE + 32; i++) {
- irq_desc[i].status = IRQ_DISABLED;
- irq_desc[i].action = NULL;
- irq_desc[i].depth = 1;
- irq_desc[i].chip = &msp_per_irq_controller;
+ irq_set_chip(i, &msp_per_irq_controller);
#ifdef CONFIG_MIPS_MT_SMTC
irq_hwmask[i] = C_IRQ4;
#endif
@@ -173,7 +131,5 @@ void msp_per_irq_dispatch(void)
do_IRQ(ffs(pending) + MSP_PER_INTBASE - 1);
} else {
spurious_interrupt();
- /* Re-enable the CIC cascaded interrupt and return */
- irq_desc[MSP_INT_CIC].chip->end(MSP_INT_CIC);
}
}
Index: linux-mips-next/arch/mips/pmc-sierra/msp71xx/msp_irq_slp.c
===================================================================
--- linux-mips-next.orig/arch/mips/pmc-sierra/msp71xx/msp_irq_slp.c
+++ linux-mips-next/arch/mips/pmc-sierra/msp71xx/msp_irq_slp.c
@@ -21,8 +21,10 @@
#include <msp_slp_int.h>
#include <msp_regs.h>
-static inline void unmask_msp_slp_irq(unsigned int irq)
+static inline void unmask_msp_slp_irq(struct irq_data *d)
{
+ unsigned int irq = d->irq;
+
/* check for PER interrupt range */
if (irq < MSP_PER_INTBASE)
*SLP_INT_MSK_REG |= (1 << (irq - MSP_SLP_INTBASE));
@@ -30,8 +32,10 @@ static inline void unmask_msp_slp_irq(un
*PER_INT_MSK_REG |= (1 << (irq - MSP_PER_INTBASE));
}
-static inline void mask_msp_slp_irq(unsigned int irq)
+static inline void mask_msp_slp_irq(struct irq_data *d)
{
+ unsigned int irq = d->irq;
+
/* check for PER interrupt range */
if (irq < MSP_PER_INTBASE)
*SLP_INT_MSK_REG &= ~(1 << (irq - MSP_SLP_INTBASE));
@@ -43,8 +47,10 @@ static inline void mask_msp_slp_irq(unsi
* While we ack the interrupt interrupts are disabled and thus we don't need
* to deal with concurrency issues. Same for msp_slp_irq_end.
*/
-static inline void ack_msp_slp_irq(unsigned int irq)
+static inline void ack_msp_slp_irq(struct irq_data *d)
{
+ unsigned int irq = d->irq;
+
/* check for PER interrupt range */
if (irq < MSP_PER_INTBASE)
*SLP_INT_STS_REG = (1 << (irq - MSP_SLP_INTBASE));
@@ -54,9 +60,9 @@ static inline void ack_msp_slp_irq(unsig
static struct irq_chip msp_slp_irq_controller = {
.name = "MSP_SLP",
- .ack = ack_msp_slp_irq,
- .mask = mask_msp_slp_irq,
- .unmask = unmask_msp_slp_irq,
+ .irq_ack = ack_msp_slp_irq,
+ .irq_mask = mask_msp_slp_irq,
+ .irq_unmask = unmask_msp_slp_irq,
};
void __init msp_slp_irq_init(void)
^ permalink raw reply [flat|nested] 97+ messages in thread
* [patch 26/38] mips: pnx83xx: Convert to new irq_chip functions
2011-03-23 21:08 [patch 00/38] mips: irq chip overhaul and cleanup Thomas Gleixner
` (24 preceding siblings ...)
2011-03-23 21:09 ` [patch 25/38] mips: pmc-sierra: " Thomas Gleixner
@ 2011-03-23 21:09 ` Thomas Gleixner
2011-03-24 14:44 ` Ralf Baechle
2011-03-23 21:09 ` [patch 28/38] mips: powertv: " Thomas Gleixner
` (11 subsequent siblings)
37 siblings, 1 reply; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-23 21:09 UTC (permalink / raw)
To: linux-mips; +Cc: Ralf Baechle
[-- Attachment #1: mips-pnx83xx.patch --]
[-- Type: text/plain, Size: 5302 bytes --]
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/mips/pnx833x/common/interrupts.c | 98 +++++-----------------------------
1 file changed, 16 insertions(+), 82 deletions(-)
Index: linux-mips-next/arch/mips/pnx833x/common/interrupts.c
===================================================================
--- linux-mips-next.orig/arch/mips/pnx833x/common/interrupts.c
+++ linux-mips-next/arch/mips/pnx833x/common/interrupts.c
@@ -152,10 +152,6 @@ static inline void pnx833x_hard_disable_
PNX833X_PIC_INT_REG(irq) = 0;
}
-static int irqflags[PNX833X_PIC_NUM_IRQ]; /* initialized by zeroes */
-#define IRQFLAG_STARTED 1
-#define IRQFLAG_DISABLED 2
-
static DEFINE_RAW_SPINLOCK(pnx833x_irq_lock);
static unsigned int pnx833x_startup_pic_irq(unsigned int irq)
@@ -164,108 +160,54 @@ static unsigned int pnx833x_startup_pic_
unsigned int pic_irq = irq - PNX833X_PIC_IRQ_BASE;
raw_spin_lock_irqsave(&pnx833x_irq_lock, flags);
-
- irqflags[pic_irq] = IRQFLAG_STARTED; /* started, not disabled */
pnx833x_hard_enable_pic_irq(pic_irq);
-
raw_spin_unlock_irqrestore(&pnx833x_irq_lock, flags);
return 0;
}
-static void pnx833x_shutdown_pic_irq(unsigned int irq)
-{
- unsigned long flags;
- unsigned int pic_irq = irq - PNX833X_PIC_IRQ_BASE;
-
- raw_spin_lock_irqsave(&pnx833x_irq_lock, flags);
-
- irqflags[pic_irq] = 0; /* not started */
- pnx833x_hard_disable_pic_irq(pic_irq);
-
- raw_spin_unlock_irqrestore(&pnx833x_irq_lock, flags);
-}
-
-static void pnx833x_enable_pic_irq(unsigned int irq)
+static void pnx833x_enable_pic_irq(struct irq_data *d)
{
unsigned long flags;
- unsigned int pic_irq = irq - PNX833X_PIC_IRQ_BASE;
+ unsigned int pic_irq = d->irq - PNX833X_PIC_IRQ_BASE;
raw_spin_lock_irqsave(&pnx833x_irq_lock, flags);
-
- irqflags[pic_irq] &= ~IRQFLAG_DISABLED;
- if (irqflags[pic_irq] == IRQFLAG_STARTED)
- pnx833x_hard_enable_pic_irq(pic_irq);
-
+ pnx833x_hard_enable_pic_irq(pic_irq);
raw_spin_unlock_irqrestore(&pnx833x_irq_lock, flags);
}
-static void pnx833x_disable_pic_irq(unsigned int irq)
+static void pnx833x_disable_pic_irq(struct irq_data *d)
{
unsigned long flags;
- unsigned int pic_irq = irq - PNX833X_PIC_IRQ_BASE;
+ unsigned int pic_irq = d->irq - PNX833X_PIC_IRQ_BASE;
raw_spin_lock_irqsave(&pnx833x_irq_lock, flags);
-
- irqflags[pic_irq] |= IRQFLAG_DISABLED;
pnx833x_hard_disable_pic_irq(pic_irq);
-
raw_spin_unlock_irqrestore(&pnx833x_irq_lock, flags);
}
-static void pnx833x_ack_pic_irq(unsigned int irq)
-{
-}
-
-static void pnx833x_end_pic_irq(unsigned int irq)
-{
-}
-
static DEFINE_RAW_SPINLOCK(pnx833x_gpio_pnx833x_irq_lock);
-static unsigned int pnx833x_startup_gpio_irq(unsigned int irq)
-{
- int pin = irq - PNX833X_GPIO_IRQ_BASE;
- unsigned long flags;
- raw_spin_lock_irqsave(&pnx833x_gpio_pnx833x_irq_lock, flags);
- pnx833x_gpio_enable_irq(pin);
- raw_spin_unlock_irqrestore(&pnx833x_gpio_pnx833x_irq_lock, flags);
- return 0;
-}
-
-static void pnx833x_enable_gpio_irq(unsigned int irq)
+static void pnx833x_enable_gpio_irq(struct irq_data *d)
{
- int pin = irq - PNX833X_GPIO_IRQ_BASE;
+ int pin = d->irq - PNX833X_GPIO_IRQ_BASE;
unsigned long flags;
raw_spin_lock_irqsave(&pnx833x_gpio_pnx833x_irq_lock, flags);
pnx833x_gpio_enable_irq(pin);
raw_spin_unlock_irqrestore(&pnx833x_gpio_pnx833x_irq_lock, flags);
}
-static void pnx833x_disable_gpio_irq(unsigned int irq)
+static void pnx833x_disable_gpio_irq(struct irq_data *d)
{
- int pin = irq - PNX833X_GPIO_IRQ_BASE;
+ int pin = d->irq - PNX833X_GPIO_IRQ_BASE;
unsigned long flags;
raw_spin_lock_irqsave(&pnx833x_gpio_pnx833x_irq_lock, flags);
pnx833x_gpio_disable_irq(pin);
raw_spin_unlock_irqrestore(&pnx833x_gpio_pnx833x_irq_lock, flags);
}
-static void pnx833x_ack_gpio_irq(unsigned int irq)
-{
-}
-
-static void pnx833x_end_gpio_irq(unsigned int irq)
-{
- int pin = irq - PNX833X_GPIO_IRQ_BASE;
- unsigned long flags;
- raw_spin_lock_irqsave(&pnx833x_gpio_pnx833x_irq_lock, flags);
- pnx833x_gpio_clear_irq(pin);
- raw_spin_unlock_irqrestore(&pnx833x_gpio_pnx833x_irq_lock, flags);
-}
-
-static int pnx833x_set_type_gpio_irq(unsigned int irq, unsigned int flow_type)
+static int pnx833x_set_type_gpio_irq(struct irq_data *d, unsigned int flow_type)
{
- int pin = irq - PNX833X_GPIO_IRQ_BASE;
+ int pin = d->irq - PNX833X_GPIO_IRQ_BASE;
int gpio_mode;
switch (flow_type) {
@@ -296,23 +238,15 @@ static int pnx833x_set_type_gpio_irq(uns
static struct irq_chip pnx833x_pic_irq_type = {
.name = "PNX-PIC",
- .startup = pnx833x_startup_pic_irq,
- .shutdown = pnx833x_shutdown_pic_irq,
- .enable = pnx833x_enable_pic_irq,
- .disable = pnx833x_disable_pic_irq,
- .ack = pnx833x_ack_pic_irq,
- .end = pnx833x_end_pic_irq
+ .irq_enable = pnx833x_enable_pic_irq,
+ .irq_disable = pnx833x_disable_pic_irq,
};
static struct irq_chip pnx833x_gpio_irq_type = {
.name = "PNX-GPIO",
- .startup = pnx833x_startup_gpio_irq,
- .shutdown = pnx833x_disable_gpio_irq,
- .enable = pnx833x_enable_gpio_irq,
- .disable = pnx833x_disable_gpio_irq,
- .ack = pnx833x_ack_gpio_irq,
- .end = pnx833x_end_gpio_irq,
- .set_type = pnx833x_set_type_gpio_irq
+ .irq_enable = pnx833x_enable_gpio_irq,
+ .irq_disable = pnx833x_disable_gpio_irq,
+ .irq_set_type = pnx833x_set_type_gpio_irq,
};
void __init arch_init_irq(void)
^ permalink raw reply [flat|nested] 97+ messages in thread
* [patch 27/38] mips: pnx855: Convert to new irq_chip functions
2011-03-23 21:08 [patch 00/38] mips: irq chip overhaul and cleanup Thomas Gleixner
` (26 preceding siblings ...)
2011-03-23 21:09 ` [patch 28/38] mips: powertv: " Thomas Gleixner
@ 2011-03-23 21:09 ` Thomas Gleixner
2011-03-24 12:32 ` Sergei Shtylyov
2011-03-23 21:09 ` [patch 29/38] mips: rb532: " Thomas Gleixner
` (9 subsequent siblings)
37 siblings, 1 reply; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-23 21:09 UTC (permalink / raw)
To: linux-mips; +Cc: Ralf Baechle
[-- Attachment #1: mips-pnx855.patch --]
[-- Type: text/plain, Size: 1931 bytes --]
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/mips/pnx8550/common/int.c | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
Index: linux-mips-next/arch/mips/pnx8550/common/int.c
===================================================================
--- linux-mips-next.orig/arch/mips/pnx8550/common/int.c
+++ linux-mips-next/arch/mips/pnx8550/common/int.c
@@ -114,8 +114,10 @@ static inline void unmask_gic_int(unsign
PNX8550_GIC_REQ(irq_nr) = (1<<26 | 1<<16) | (1<<28) | gic_prio[irq_nr];
}
-static inline void mask_irq(unsigned int irq_nr)
+static inline void mask_irq(struct irq_data *d)
{
+ unsigned int irq_nr = d->irq;
+
if ((PNX8550_INT_CP0_MIN <= irq_nr) && (irq_nr <= PNX8550_INT_CP0_MAX)) {
modify_cp0_intmask(1 << irq_nr, 0);
} else if ((PNX8550_INT_GIC_MIN <= irq_nr) &&
@@ -129,8 +131,10 @@ static inline void mask_irq(unsigned int
}
}
-static inline void unmask_irq(unsigned int irq_nr)
+static inline void unmask_irq(struct irq_data *d)
{
+ unsigned int irq_nr = d->irq;
+
if ((PNX8550_INT_CP0_MIN <= irq_nr) && (irq_nr <= PNX8550_INT_CP0_MAX)) {
modify_cp0_intmask(0, 1 << irq_nr);
} else if ((PNX8550_INT_GIC_MIN <= irq_nr) &&
@@ -157,10 +161,8 @@ int pnx8550_set_gic_priority(int irq, in
static struct irq_chip level_irq_type = {
.name = "PNX Level IRQ",
- .ack = mask_irq,
- .mask = mask_irq,
- .mask_ack = mask_irq,
- .unmask = unmask_irq,
+ .irq_mask = mask_irq,
+ .irq_unmask = unmask_irq,
};
static struct irqaction gic_action = {
@@ -180,10 +182,8 @@ void __init arch_init_irq(void)
int i;
int configPR;
- for (i = 0; i < PNX8550_INT_CP0_TOTINT; i++) {
+ for (i = 0; i < PNX8550_INT_CP0_TOTINT; i++)
set_irq_chip_and_handler(i, &level_irq_type, handle_level_irq);
- mask_irq(i); /* mask the irq just in case */
- }
/* init of GIC/IPC interrupts */
/* should be done before cp0 since cp0 init enables the GIC int */
^ permalink raw reply [flat|nested] 97+ messages in thread
* [patch 28/38] mips: powertv: Convert to new irq_chip functions
2011-03-23 21:08 [patch 00/38] mips: irq chip overhaul and cleanup Thomas Gleixner
` (25 preceding siblings ...)
2011-03-23 21:09 ` [patch 26/38] mips: pnx83xx: " Thomas Gleixner
@ 2011-03-23 21:09 ` Thomas Gleixner
2011-03-24 14:47 ` Ralf Baechle
2011-03-23 21:09 ` [patch 27/38] mips: pnx855: " Thomas Gleixner
` (10 subsequent siblings)
37 siblings, 1 reply; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-23 21:09 UTC (permalink / raw)
To: linux-mips; +Cc: Ralf Baechle
[-- Attachment #1: mips-powertv.patch --]
[-- Type: text/plain, Size: 1316 bytes --]
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/mips/powertv/asic/irq_asic.c | 13 ++++++-------
1 file changed, 6 insertions(+), 7 deletions(-)
Index: linux-mips-next/arch/mips/powertv/asic/irq_asic.c
===================================================================
--- linux-mips-next.orig/arch/mips/powertv/asic/irq_asic.c
+++ linux-mips-next/arch/mips/powertv/asic/irq_asic.c
@@ -21,9 +21,10 @@
#include <asm/mach-powertv/asic_regs.h>
-static inline void unmask_asic_irq(unsigned int irq)
+static inline void unmask_asic_irq(struct irq_data *d)
{
unsigned long enable_bit;
+ unsigned int irq = d->irq;
enable_bit = (1 << (irq & 0x1f));
@@ -45,9 +46,10 @@ static inline void unmask_asic_irq(unsig
}
}
-static inline void mask_asic_irq(unsigned int irq)
+static inline void mask_asic_irq(struct irq_data *d)
{
unsigned long disable_mask;
+ unsigned int irq = d->irq;
disable_mask = ~(1 << (irq & 0x1f));
@@ -71,11 +73,8 @@ static inline void mask_asic_irq(unsigne
static struct irq_chip asic_irq_chip = {
.name = "ASIC Level",
- .ack = mask_asic_irq,
- .mask = mask_asic_irq,
- .mask_ack = mask_asic_irq,
- .unmask = unmask_asic_irq,
- .eoi = unmask_asic_irq,
+ .irq_mask = mask_asic_irq,
+ .irq_unmask = unmask_asic_irq,
};
void __init asic_irq_init(void)
^ permalink raw reply [flat|nested] 97+ messages in thread
* [patch 29/38] mips: rb532: Convert to new irq_chip functions
2011-03-23 21:08 [patch 00/38] mips: irq chip overhaul and cleanup Thomas Gleixner
` (27 preceding siblings ...)
2011-03-23 21:09 ` [patch 27/38] mips: pnx855: " Thomas Gleixner
@ 2011-03-23 21:09 ` Thomas Gleixner
2011-03-24 14:53 ` Ralf Baechle
2011-03-23 21:09 ` [patch 30/38] mips: sgi-ip22: " Thomas Gleixner
` (8 subsequent siblings)
37 siblings, 1 reply; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-23 21:09 UTC (permalink / raw)
To: linux-mips; +Cc: Ralf Baechle
[-- Attachment #1: mips-rb532.patch --]
[-- Type: text/plain, Size: 2456 bytes --]
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/mips/rb532/irq.c | 32 ++++++++++++++++----------------
1 file changed, 16 insertions(+), 16 deletions(-)
Index: linux-mips-next/arch/mips/rb532/irq.c
===================================================================
--- linux-mips-next.orig/arch/mips/rb532/irq.c
+++ linux-mips-next/arch/mips/rb532/irq.c
@@ -111,10 +111,10 @@ static inline void ack_local_irq(unsigne
clear_c0_cause(ipnum);
}
-static void rb532_enable_irq(unsigned int irq_nr)
+static void rb532_enable_irq(struct irq_data *d)
{
+ unsigned int group, intr_bit, irq_nr = d->irq;
int ip = irq_nr - GROUP0_IRQ_BASE;
- unsigned int group, intr_bit;
volatile unsigned int *addr;
if (ip < 0)
@@ -132,10 +132,10 @@ static void rb532_enable_irq(unsigned in
}
}
-static void rb532_disable_irq(unsigned int irq_nr)
+static void rb532_disable_irq(struct irq_data *d)
{
+ unsigned int group, intr_bit, mask, irq_nr = d->irq;
int ip = irq_nr - GROUP0_IRQ_BASE;
- unsigned int group, intr_bit, mask;
volatile unsigned int *addr;
if (ip < 0) {
@@ -163,18 +163,18 @@ static void rb532_disable_irq(unsigned i
}
}
-static void rb532_mask_and_ack_irq(unsigned int irq_nr)
+static void rb532_mask_and_ack_irq(struct irq_data *d)
{
- rb532_disable_irq(irq_nr);
- ack_local_irq(group_to_ip(irq_to_group(irq_nr)));
+ rb532_disable_irq(d);
+ ack_local_irq(group_to_ip(irq_to_group(d->irq)));
}
-static int rb532_set_type(unsigned int irq_nr, unsigned type)
+static int rb532_set_type(struct irq_data *d, unsigned type)
{
- int gpio = irq_nr - GPIO_MAPPED_IRQ_BASE;
- int group = irq_to_group(irq_nr);
+ int gpio = d->irq - GPIO_MAPPED_IRQ_BASE;
+ int group = irq_to_group(d->irq);
- if (group != GPIO_MAPPED_IRQ_GROUP || irq_nr > (GROUP4_IRQ_BASE + 13))
+ if (group != GPIO_MAPPED_IRQ_GROUP || d->irq > (GROUP4_IRQ_BASE + 13))
return (type == IRQ_TYPE_LEVEL_HIGH) ? 0 : -EINVAL;
switch (type) {
@@ -193,11 +193,11 @@ static int rb532_set_type(unsigned int i
static struct irq_chip rc32434_irq_type = {
.name = "RB532",
- .ack = rb532_disable_irq,
- .mask = rb532_disable_irq,
- .mask_ack = rb532_mask_and_ack_irq,
- .unmask = rb532_enable_irq,
- .set_type = rb532_set_type,
+ .irq_ack = rb532_disable_irq,
+ .irq_mask = rb532_disable_irq,
+ .irq_mask_ack = rb532_mask_and_ack_irq,
+ .irq_unmask = rb532_enable_irq,
+ .irq_set_type = rb532_set_type,
};
void __init arch_init_irq(void)
^ permalink raw reply [flat|nested] 97+ messages in thread
* [patch 30/38] mips: sgi-ip22: Convert to new irq_chip functions
2011-03-23 21:08 [patch 00/38] mips: irq chip overhaul and cleanup Thomas Gleixner
` (28 preceding siblings ...)
2011-03-23 21:09 ` [patch 29/38] mips: rb532: " Thomas Gleixner
@ 2011-03-23 21:09 ` Thomas Gleixner
2011-03-24 14:49 ` Ralf Baechle
2011-03-23 21:09 ` [patch 31/38] mips: sgi-ip27: " Thomas Gleixner
` (7 subsequent siblings)
37 siblings, 1 reply; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-23 21:09 UTC (permalink / raw)
To: linux-mips; +Cc: Ralf Baechle
[-- Attachment #1: mips-sgi-ip22.patch --]
[-- Type: text/plain, Size: 3972 bytes --]
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/mips/sgi-ip22/ip22-int.c | 60 ++++++++++++++++++------------------------
1 file changed, 26 insertions(+), 34 deletions(-)
Index: linux-mips-next/arch/mips/sgi-ip22/ip22-int.c
===================================================================
--- linux-mips-next.orig/arch/mips/sgi-ip22/ip22-int.c
+++ linux-mips-next/arch/mips/sgi-ip22/ip22-int.c
@@ -31,88 +31,80 @@ static char lc3msk_to_irqnr[256];
extern int ip22_eisa_init(void);
-static void enable_local0_irq(unsigned int irq)
+static void enable_local0_irq(struct irq_data *d)
{
/* don't allow mappable interrupt to be enabled from setup_irq,
* we have our own way to do so */
- if (irq != SGI_MAP_0_IRQ)
- sgint->imask0 |= (1 << (irq - SGINT_LOCAL0));
+ if (d->irq != SGI_MAP_0_IRQ)
+ sgint->imask0 |= (1 << (d->irq - SGINT_LOCAL0));
}
-static void disable_local0_irq(unsigned int irq)
+static void disable_local0_irq(struct irq_data *d)
{
- sgint->imask0 &= ~(1 << (irq - SGINT_LOCAL0));
+ sgint->imask0 &= ~(1 << (d->irq - SGINT_LOCAL0));
}
static struct irq_chip ip22_local0_irq_type = {
.name = "IP22 local 0",
- .ack = disable_local0_irq,
- .mask = disable_local0_irq,
- .mask_ack = disable_local0_irq,
- .unmask = enable_local0_irq,
+ .irq_mask = disable_local0_irq,
+ .irq_unmask = enable_local0_irq,
};
-static void enable_local1_irq(unsigned int irq)
+static void enable_local1_irq(struct irq_data *d)
{
/* don't allow mappable interrupt to be enabled from setup_irq,
* we have our own way to do so */
- if (irq != SGI_MAP_1_IRQ)
- sgint->imask1 |= (1 << (irq - SGINT_LOCAL1));
+ if (d->irq != SGI_MAP_1_IRQ)
+ sgint->imask1 |= (1 << (d->irq - SGINT_LOCAL1));
}
-static void disable_local1_irq(unsigned int irq)
+static void disable_local1_irq(struct irq_data *d)
{
- sgint->imask1 &= ~(1 << (irq - SGINT_LOCAL1));
+ sgint->imask1 &= ~(1 << (d->irq - SGINT_LOCAL1));
}
static struct irq_chip ip22_local1_irq_type = {
.name = "IP22 local 1",
- .ack = disable_local1_irq,
- .mask = disable_local1_irq,
- .mask_ack = disable_local1_irq,
- .unmask = enable_local1_irq,
+ .irq_mask = disable_local1_irq,
+ .irq_unmask = enable_local1_irq,
};
-static void enable_local2_irq(unsigned int irq)
+static void enable_local2_irq(struct irq_data *d)
{
sgint->imask0 |= (1 << (SGI_MAP_0_IRQ - SGINT_LOCAL0));
- sgint->cmeimask0 |= (1 << (irq - SGINT_LOCAL2));
+ sgint->cmeimask0 |= (1 << (d->irq - SGINT_LOCAL2));
}
-static void disable_local2_irq(unsigned int irq)
+static void disable_local2_irq(struct irq_data *d)
{
- sgint->cmeimask0 &= ~(1 << (irq - SGINT_LOCAL2));
+ sgint->cmeimask0 &= ~(1 << (d->irq - SGINT_LOCAL2));
if (!sgint->cmeimask0)
sgint->imask0 &= ~(1 << (SGI_MAP_0_IRQ - SGINT_LOCAL0));
}
static struct irq_chip ip22_local2_irq_type = {
.name = "IP22 local 2",
- .ack = disable_local2_irq,
- .mask = disable_local2_irq,
- .mask_ack = disable_local2_irq,
- .unmask = enable_local2_irq,
+ .irq_mask = disable_local2_irq,
+ .irq_unmask = enable_local2_irq,
};
-static void enable_local3_irq(unsigned int irq)
+static void enable_local3_irq(struct irq_data *d)
{
sgint->imask1 |= (1 << (SGI_MAP_1_IRQ - SGINT_LOCAL1));
- sgint->cmeimask1 |= (1 << (irq - SGINT_LOCAL3));
+ sgint->cmeimask1 |= (1 << (d->irq - SGINT_LOCAL3));
}
-static void disable_local3_irq(unsigned int irq)
+static void disable_local3_irq(struct irq_data *d)
{
- sgint->cmeimask1 &= ~(1 << (irq - SGINT_LOCAL3));
+ sgint->cmeimask1 &= ~(1 << (d->irq - SGINT_LOCAL3));
if (!sgint->cmeimask1)
sgint->imask1 &= ~(1 << (SGI_MAP_1_IRQ - SGINT_LOCAL1));
}
static struct irq_chip ip22_local3_irq_type = {
.name = "IP22 local 3",
- .ack = disable_local3_irq,
- .mask = disable_local3_irq,
- .mask_ack = disable_local3_irq,
- .unmask = enable_local3_irq,
+ .irq_mask = disable_local3_irq,
+ .irq_unmask = enable_local3_irq,
};
static void indy_local0_irqdispatch(void)
^ permalink raw reply [flat|nested] 97+ messages in thread
* [patch 31/38] mips: sgi-ip27: Convert to new irq_chip functions
2011-03-23 21:08 [patch 00/38] mips: irq chip overhaul and cleanup Thomas Gleixner
` (29 preceding siblings ...)
2011-03-23 21:09 ` [patch 30/38] mips: sgi-ip22: " Thomas Gleixner
@ 2011-03-23 21:09 ` Thomas Gleixner
2011-03-24 14:50 ` Ralf Baechle
2011-03-23 21:09 ` [patch 32/38] mips: sgi32: " Thomas Gleixner
` (6 subsequent siblings)
37 siblings, 1 reply; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-23 21:09 UTC (permalink / raw)
To: linux-mips; +Cc: Ralf Baechle
[-- Attachment #1: mips-sgi-ip27.patch --]
[-- Type: text/plain, Size: 4331 bytes --]
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/mips/sgi-ip27/ip27-irq.c | 38 ++++++++++++++++++--------------------
arch/mips/sgi-ip27/ip27-timer.c | 11 ++++-------
2 files changed, 22 insertions(+), 27 deletions(-)
Index: linux-mips-next/arch/mips/sgi-ip27/ip27-irq.c
===================================================================
--- linux-mips-next.orig/arch/mips/sgi-ip27/ip27-irq.c
+++ linux-mips-next/arch/mips/sgi-ip27/ip27-irq.c
@@ -240,7 +240,7 @@ static int intr_disconnect_level(int cpu
}
/* Startup one of the (PCI ...) IRQs routes over a bridge. */
-static unsigned int startup_bridge_irq(unsigned int irq)
+static unsigned int startup_bridge_irq(struct irq_data *d)
{
struct bridge_controller *bc;
bridgereg_t device;
@@ -248,16 +248,16 @@ static unsigned int startup_bridge_irq(u
int pin, swlevel;
cpuid_t cpu;
- pin = SLOT_FROM_PCI_IRQ(irq);
- bc = IRQ_TO_BRIDGE(irq);
+ pin = SLOT_FROM_PCI_IRQ(d->irq);
+ bc = IRQ_TO_BRIDGE(d->irq);
bridge = bc->base;
- pr_debug("bridge_startup(): irq= 0x%x pin=%d\n", irq, pin);
+ pr_debug("bridge_startup(): irq= 0x%x pin=%d\n", d->irq, pin);
/*
* "map" irq to a swlevel greater than 6 since the first 6 bits
* of INT_PEND0 are taken
*/
- swlevel = find_level(&cpu, irq);
+ swlevel = find_level(&cpu, d->irq);
bridge->b_int_addr[pin].addr = (0x20000 | swlevel | (bc->nasid << 8));
bridge->b_int_enable |= (1 << pin);
bridge->b_int_enable |= 0x7ffffe00; /* more stuff in int_enable */
@@ -288,53 +288,51 @@ static unsigned int startup_bridge_irq(u
}
/* Shutdown one of the (PCI ...) IRQs routes over a bridge. */
-static void shutdown_bridge_irq(unsigned int irq)
+static void shutdown_bridge_irq(struct irq_data *d)
{
- struct bridge_controller *bc = IRQ_TO_BRIDGE(irq);
+ struct bridge_controller *bc = IRQ_TO_BRIDGE(d->irq);
bridge_t *bridge = bc->base;
int pin, swlevel;
cpuid_t cpu;
- pr_debug("bridge_shutdown: irq 0x%x\n", irq);
- pin = SLOT_FROM_PCI_IRQ(irq);
+ pr_debug("bridge_shutdown: irq 0x%x\n", d->irq);
+ pin = SLOT_FROM_PCI_IRQ(d->irq);
/*
* map irq to a swlevel greater than 6 since the first 6 bits
* of INT_PEND0 are taken
*/
- swlevel = find_level(&cpu, irq);
+ swlevel = find_level(&cpu, d->irq);
intr_disconnect_level(cpu, swlevel);
bridge->b_int_enable &= ~(1 << pin);
bridge->b_wid_tflush;
}
-static inline void enable_bridge_irq(unsigned int irq)
+static inline void enable_bridge_irq(struct irq_data *d)
{
cpuid_t cpu;
int swlevel;
- swlevel = find_level(&cpu, irq); /* Criminal offence */
+ swlevel = find_level(&cpu, d->irq); /* Criminal offence */
intr_connect_level(cpu, swlevel);
}
-static inline void disable_bridge_irq(unsigned int irq)
+static inline void disable_bridge_irq(struct irq_data *d)
{
cpuid_t cpu;
int swlevel;
- swlevel = find_level(&cpu, irq); /* Criminal offence */
+ swlevel = find_level(&cpu, d->irq); /* Criminal offence */
intr_disconnect_level(cpu, swlevel);
}
static struct irq_chip bridge_irq_type = {
.name = "bridge",
- .startup = startup_bridge_irq,
- .shutdown = shutdown_bridge_irq,
- .ack = disable_bridge_irq,
- .mask = disable_bridge_irq,
- .mask_ack = disable_bridge_irq,
- .unmask = enable_bridge_irq,
+ .irq_startup = startup_bridge_irq,
+ .irq_shutdown = shutdown_bridge_irq,
+ .irq_mask = disable_bridge_irq,
+ .irq_unmask = enable_bridge_irq,
};
void __devinit register_bridge_irq(unsigned int irq)
Index: linux-mips-next/arch/mips/sgi-ip27/ip27-timer.c
===================================================================
--- linux-mips-next.orig/arch/mips/sgi-ip27/ip27-timer.c
+++ linux-mips-next/arch/mips/sgi-ip27/ip27-timer.c
@@ -36,21 +36,18 @@
#include <asm/sn/sn0/hubio.h>
#include <asm/pci/bridge.h>
-static void enable_rt_irq(unsigned int irq)
+static void enable_rt_irq(struct irq_data *d)
{
}
-static void disable_rt_irq(unsigned int irq)
+static void disable_rt_irq(struct irq_data *d)
{
}
static struct irq_chip rt_irq_type = {
.name = "SN HUB RT timer",
- .ack = disable_rt_irq,
- .mask = disable_rt_irq,
- .mask_ack = disable_rt_irq,
- .unmask = enable_rt_irq,
- .eoi = enable_rt_irq,
+ .irq_mask = disable_rt_irq,
+ .irq_unmask = enable_rt_irq,
};
static int rt_next_event(unsigned long delta, struct clock_event_device *evt)
^ permalink raw reply [flat|nested] 97+ messages in thread
* [patch 32/38] mips: sgi32: Convert to new irq_chip functions
2011-03-23 21:08 [patch 00/38] mips: irq chip overhaul and cleanup Thomas Gleixner
` (30 preceding siblings ...)
2011-03-23 21:09 ` [patch 31/38] mips: sgi-ip27: " Thomas Gleixner
@ 2011-03-23 21:09 ` Thomas Gleixner
2011-03-24 14:50 ` Ralf Baechle
2011-03-23 21:09 ` [patch 33/38] mips: sybyte: " Thomas Gleixner
` (5 subsequent siblings)
37 siblings, 1 reply; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-23 21:09 UTC (permalink / raw)
To: linux-mips; +Cc: Ralf Baechle
[-- Attachment #1: mips-sgi32.patch --]
[-- Type: text/plain, Size: 7771 bytes --]
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/mips/sgi-ip32/ip32-irq.c | 134 +++++++++++++-----------------------------
1 file changed, 42 insertions(+), 92 deletions(-)
Index: linux-mips-next/arch/mips/sgi-ip32/ip32-irq.c
===================================================================
--- linux-mips-next.orig/arch/mips/sgi-ip32/ip32-irq.c
+++ linux-mips-next/arch/mips/sgi-ip32/ip32-irq.c
@@ -130,70 +130,48 @@ static struct irqaction cpuerr_irq = {
static uint64_t crime_mask;
-static inline void crime_enable_irq(unsigned int irq)
+static inline void crime_enable_irq(struct irq_data *d)
{
- unsigned int bit = irq - CRIME_IRQ_BASE;
+ unsigned int bit = d->irq - CRIME_IRQ_BASE;
crime_mask |= 1 << bit;
crime->imask = crime_mask;
}
-static inline void crime_disable_irq(unsigned int irq)
+static inline void crime_disable_irq(struct irq_data *d)
{
- unsigned int bit = irq - CRIME_IRQ_BASE;
+ unsigned int bit = d->irq - CRIME_IRQ_BASE;
crime_mask &= ~(1 << bit);
crime->imask = crime_mask;
flush_crime_bus();
}
-static void crime_level_mask_and_ack_irq(unsigned int irq)
-{
- crime_disable_irq(irq);
-}
-
-static void crime_level_end_irq(unsigned int irq)
-{
- if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS)))
- crime_enable_irq(irq);
-}
-
static struct irq_chip crime_level_interrupt = {
.name = "IP32 CRIME",
- .ack = crime_level_mask_and_ack_irq,
- .mask = crime_disable_irq,
- .mask_ack = crime_level_mask_and_ack_irq,
- .unmask = crime_enable_irq,
- .end = crime_level_end_irq,
+ .irq_mask = crime_disable_irq,
+ .irq_unmask = crime_enable_irq,
};
-static void crime_edge_mask_and_ack_irq(unsigned int irq)
+static void crime_edge_mask_and_ack_irq(struct irq_data *d)
{
- unsigned int bit = irq - CRIME_IRQ_BASE;
+ unsigned int bit = d->irq - CRIME_IRQ_BASE;
uint64_t crime_int;
/* Edge triggered interrupts must be cleared. */
-
crime_int = crime->hard_int;
crime_int &= ~(1 << bit);
crime->hard_int = crime_int;
- crime_disable_irq(irq);
-}
-
-static void crime_edge_end_irq(unsigned int irq)
-{
- if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS)))
- crime_enable_irq(irq);
+ crime_disable_irq(d);
}
static struct irq_chip crime_edge_interrupt = {
.name = "IP32 CRIME",
- .ack = crime_edge_mask_and_ack_irq,
- .mask = crime_disable_irq,
- .mask_ack = crime_edge_mask_and_ack_irq,
- .unmask = crime_enable_irq,
- .end = crime_edge_end_irq,
+ .irq_ack = crime_edge_mask_and_ack_irq,
+ .irq_mask = crime_disable_irq,
+ .irq_mask_ack = crime_edge_mask_and_ack_irq,
+ .irq_unmask = crime_enable_irq,
};
/*
@@ -204,37 +182,28 @@ static struct irq_chip crime_edge_interr
static unsigned long macepci_mask;
-static void enable_macepci_irq(unsigned int irq)
+static void enable_macepci_irq(struct irq_data *d)
{
- macepci_mask |= MACEPCI_CONTROL_INT(irq - MACEPCI_SCSI0_IRQ);
+ macepci_mask |= MACEPCI_CONTROL_INT(d->irq - MACEPCI_SCSI0_IRQ);
mace->pci.control = macepci_mask;
- crime_mask |= 1 << (irq - CRIME_IRQ_BASE);
+ crime_mask |= 1 << (d->irq - CRIME_IRQ_BASE);
crime->imask = crime_mask;
}
-static void disable_macepci_irq(unsigned int irq)
+static void disable_macepci_irq(struct irq_data *d)
{
- crime_mask &= ~(1 << (irq - CRIME_IRQ_BASE));
+ crime_mask &= ~(1 << (d->irq - CRIME_IRQ_BASE));
crime->imask = crime_mask;
flush_crime_bus();
- macepci_mask &= ~MACEPCI_CONTROL_INT(irq - MACEPCI_SCSI0_IRQ);
+ macepci_mask &= ~MACEPCI_CONTROL_INT(d->irq - MACEPCI_SCSI0_IRQ);
mace->pci.control = macepci_mask;
flush_mace_bus();
}
-static void end_macepci_irq(unsigned int irq)
-{
- if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS)))
- enable_macepci_irq(irq);
-}
-
static struct irq_chip ip32_macepci_interrupt = {
.name = "IP32 MACE PCI",
- .ack = disable_macepci_irq,
- .mask = disable_macepci_irq,
- .mask_ack = disable_macepci_irq,
- .unmask = enable_macepci_irq,
- .end = end_macepci_irq,
+ .irq_mask = disable_macepci_irq,
+ .irq_unmask = enable_macepci_irq,
};
/* This is used for MACE ISA interrupts. That means bits 4-6 in the
@@ -276,13 +245,13 @@ static struct irq_chip ip32_macepci_inte
static unsigned long maceisa_mask;
-static void enable_maceisa_irq(unsigned int irq)
+static void enable_maceisa_irq(struct irq_data *d)
{
unsigned int crime_int = 0;
- pr_debug("maceisa enable: %u\n", irq);
+ pr_debug("maceisa enable: %u\n", d->irq);
- switch (irq) {
+ switch (d->irq) {
case MACEISA_AUDIO_SW_IRQ ... MACEISA_AUDIO3_MERR_IRQ:
crime_int = MACE_AUDIO_INT;
break;
@@ -296,15 +265,15 @@ static void enable_maceisa_irq(unsigned
pr_debug("crime_int %08x enabled\n", crime_int);
crime_mask |= crime_int;
crime->imask = crime_mask;
- maceisa_mask |= 1 << (irq - MACEISA_AUDIO_SW_IRQ);
+ maceisa_mask |= 1 << (d->irq - MACEISA_AUDIO_SW_IRQ);
mace->perif.ctrl.imask = maceisa_mask;
}
-static void disable_maceisa_irq(unsigned int irq)
+static void disable_maceisa_irq(struct irq_data *d)
{
unsigned int crime_int = 0;
- maceisa_mask &= ~(1 << (irq - MACEISA_AUDIO_SW_IRQ));
+ maceisa_mask &= ~(1 << (d->irq - MACEISA_AUDIO_SW_IRQ));
if (!(maceisa_mask & MACEISA_AUDIO_INT))
crime_int |= MACE_AUDIO_INT;
if (!(maceisa_mask & MACEISA_MISC_INT))
@@ -318,76 +287,57 @@ static void disable_maceisa_irq(unsigned
flush_mace_bus();
}
-static void mask_and_ack_maceisa_irq(unsigned int irq)
+static void mask_and_ack_maceisa_irq(struct irq_data *d)
{
unsigned long mace_int;
/* edge triggered */
mace_int = mace->perif.ctrl.istat;
- mace_int &= ~(1 << (irq - MACEISA_AUDIO_SW_IRQ));
+ mace_int &= ~(1 << (d->irq - MACEISA_AUDIO_SW_IRQ));
mace->perif.ctrl.istat = mace_int;
- disable_maceisa_irq(irq);
-}
-
-static void end_maceisa_irq(unsigned irq)
-{
- if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS)))
- enable_maceisa_irq(irq);
+ disable_maceisa_irq(d);
}
static struct irq_chip ip32_maceisa_level_interrupt = {
.name = "IP32 MACE ISA",
- .ack = disable_maceisa_irq,
- .mask = disable_maceisa_irq,
- .mask_ack = disable_maceisa_irq,
- .unmask = enable_maceisa_irq,
- .end = end_maceisa_irq,
+ .irq_mask = disable_maceisa_irq,
+ .irq_unmask = enable_maceisa_irq,
};
static struct irq_chip ip32_maceisa_edge_interrupt = {
.name = "IP32 MACE ISA",
- .ack = mask_and_ack_maceisa_irq,
- .mask = disable_maceisa_irq,
- .mask_ack = mask_and_ack_maceisa_irq,
- .unmask = enable_maceisa_irq,
- .end = end_maceisa_irq,
+ .irq_ack = mask_and_ack_maceisa_irq,
+ .irq_mask = disable_maceisa_irq,
+ .irq_mask_ack = mask_and_ack_maceisa_irq,
+ .irq_unmask = enable_maceisa_irq,
};
/* This is used for regular non-ISA, non-PCI MACE interrupts. That means
* bits 0-3 and 7 in the CRIME register.
*/
-static void enable_mace_irq(unsigned int irq)
+static void enable_mace_irq(struct irq_data *d)
{
- unsigned int bit = irq - CRIME_IRQ_BASE;
+ unsigned int bit = d->irq - CRIME_IRQ_BASE;
crime_mask |= (1 << bit);
crime->imask = crime_mask;
}
-static void disable_mace_irq(unsigned int irq)
+static void disable_mace_irq(struct irq_data *d)
{
- unsigned int bit = irq - CRIME_IRQ_BASE;
+ unsigned int bit = d->irq - CRIME_IRQ_BASE;
crime_mask &= ~(1 << bit);
crime->imask = crime_mask;
flush_crime_bus();
}
-static void end_mace_irq(unsigned int irq)
-{
- if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS)))
- enable_mace_irq(irq);
-}
-
static struct irq_chip ip32_mace_interrupt = {
.name = "IP32 MACE",
- .ack = disable_mace_irq,
- .mask = disable_mace_irq,
- .mask_ack = disable_mace_irq,
- .unmask = enable_mace_irq,
- .end = end_mace_irq,
+ .irq_mask = disable_mace_irq,
+ .irq_unmask = enable_mace_irq,
};
static void ip32_unknown_interrupt(void)
^ permalink raw reply [flat|nested] 97+ messages in thread
* [patch 33/38] mips: sybyte: Convert to new irq_chip functions
2011-03-23 21:08 [patch 00/38] mips: irq chip overhaul and cleanup Thomas Gleixner
` (31 preceding siblings ...)
2011-03-23 21:09 ` [patch 32/38] mips: sgi32: " Thomas Gleixner
@ 2011-03-23 21:09 ` Thomas Gleixner
2011-03-24 14:51 ` Ralf Baechle
2011-03-23 21:09 ` [patch 34/38] mips: sni: " Thomas Gleixner
` (4 subsequent siblings)
37 siblings, 1 reply; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-23 21:09 UTC (permalink / raw)
To: linux-mips; +Cc: Ralf Baechle
[-- Attachment #1: mips-sybyte.patch --]
[-- Type: text/plain, Size: 5634 bytes --]
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/mips/sibyte/bcm1480/irq.c | 55 ++++++++++++++---------------------------
arch/mips/sibyte/sb1250/irq.c | 53 +++++++++++----------------------------
2 files changed, 35 insertions(+), 73 deletions(-)
Index: linux-mips-next/arch/mips/sibyte/bcm1480/irq.c
===================================================================
--- linux-mips-next.orig/arch/mips/sibyte/bcm1480/irq.c
+++ linux-mips-next/arch/mips/sibyte/bcm1480/irq.c
@@ -44,31 +44,10 @@
* for interrupt lines
*/
-
-static void end_bcm1480_irq(unsigned int irq);
-static void enable_bcm1480_irq(unsigned int irq);
-static void disable_bcm1480_irq(unsigned int irq);
-static void ack_bcm1480_irq(unsigned int irq);
-#ifdef CONFIG_SMP
-static int bcm1480_set_affinity(unsigned int irq, const struct cpumask *mask);
-#endif
-
#ifdef CONFIG_PCI
extern unsigned long ht_eoi_space;
#endif
-static struct irq_chip bcm1480_irq_type = {
- .name = "BCM1480-IMR",
- .ack = ack_bcm1480_irq,
- .mask = disable_bcm1480_irq,
- .mask_ack = ack_bcm1480_irq,
- .unmask = enable_bcm1480_irq,
- .end = end_bcm1480_irq,
-#ifdef CONFIG_SMP
- .set_affinity = bcm1480_set_affinity
-#endif
-};
-
/* Store the CPU id (not the logical number) */
int bcm1480_irq_owner[BCM1480_NR_IRQS];
@@ -109,12 +88,13 @@ void bcm1480_unmask_irq(int cpu, int irq
}
#ifdef CONFIG_SMP
-static int bcm1480_set_affinity(unsigned int irq, const struct cpumask *mask)
+static int bcm1480_set_affinity(struct irq_data *d, const struct cpumask *mask,
+ bool force)
{
+ unsigned int irq_dirty, irq = d->irq;
int i = 0, old_cpu, cpu, int_on, k;
u64 cur_ints;
unsigned long flags;
- unsigned int irq_dirty;
i = cpumask_first(mask);
@@ -156,21 +136,25 @@ static int bcm1480_set_affinity(unsigned
/*****************************************************************************/
-static void disable_bcm1480_irq(unsigned int irq)
+static void disable_bcm1480_irq(struct irq_data *d)
{
+ unsigned int irq = d->irq;
+
bcm1480_mask_irq(bcm1480_irq_owner[irq], irq);
}
-static void enable_bcm1480_irq(unsigned int irq)
+static void enable_bcm1480_irq(struct irq_data *d)
{
+ unsigned int irq = d->irq;
+
bcm1480_unmask_irq(bcm1480_irq_owner[irq], irq);
}
-static void ack_bcm1480_irq(unsigned int irq)
+static void ack_bcm1480_irq(struct irq_data *d)
{
+ unsigned int irq_dirty, irq = d->irq;
u64 pending;
- unsigned int irq_dirty;
int k;
/*
@@ -217,14 +201,15 @@ static void ack_bcm1480_irq(unsigned int
bcm1480_mask_irq(bcm1480_irq_owner[irq], irq);
}
-
-static void end_bcm1480_irq(unsigned int irq)
-{
- if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS))) {
- bcm1480_unmask_irq(bcm1480_irq_owner[irq], irq);
- }
-}
-
+static struct irq_chip bcm1480_irq_type = {
+ .name = "BCM1480-IMR",
+ .irq_mask_ack = ack_bcm1480_irq,
+ .irq_mask = disable_bcm1480_irq,
+ .irq_unmask = enable_bcm1480_irq,
+#ifdef CONFIG_SMP
+ .irq_set_affinity = bcm1480_set_affinity
+#endif
+};
void __init init_bcm1480_irqs(void)
{
Index: linux-mips-next/arch/mips/sibyte/sb1250/irq.c
===================================================================
--- linux-mips-next.orig/arch/mips/sibyte/sb1250/irq.c
+++ linux-mips-next/arch/mips/sibyte/sb1250/irq.c
@@ -43,31 +43,10 @@
* for interrupt lines
*/
-
-static void end_sb1250_irq(unsigned int irq);
-static void enable_sb1250_irq(unsigned int irq);
-static void disable_sb1250_irq(unsigned int irq);
-static void ack_sb1250_irq(unsigned int irq);
-#ifdef CONFIG_SMP
-static int sb1250_set_affinity(unsigned int irq, const struct cpumask *mask);
-#endif
-
#ifdef CONFIG_SIBYTE_HAS_LDT
extern unsigned long ldt_eoi_space;
#endif
-static struct irq_chip sb1250_irq_type = {
- .name = "SB1250-IMR",
- .ack = ack_sb1250_irq,
- .mask = disable_sb1250_irq,
- .mask_ack = ack_sb1250_irq,
- .unmask = enable_sb1250_irq,
- .end = end_sb1250_irq,
-#ifdef CONFIG_SMP
- .set_affinity = sb1250_set_affinity
-#endif
-};
-
/* Store the CPU id (not the logical number) */
int sb1250_irq_owner[SB1250_NR_IRQS];
@@ -102,9 +81,11 @@ void sb1250_unmask_irq(int cpu, int irq)
}
#ifdef CONFIG_SMP
-static int sb1250_set_affinity(unsigned int irq, const struct cpumask *mask)
+static int sb1250_set_affinity(struct irq_data *d, const struct cpumask *mask,
+ bool force)
{
int i = 0, old_cpu, cpu, int_on;
+ unsigned int irq = d->irq;
u64 cur_ints;
unsigned long flags;
@@ -142,21 +123,17 @@ static int sb1250_set_affinity(unsigned
}
#endif
-/*****************************************************************************/
-
-static void disable_sb1250_irq(unsigned int irq)
+static void enable_sb1250_irq(struct irq_data *d)
{
- sb1250_mask_irq(sb1250_irq_owner[irq], irq);
-}
+ unsigned int irq = d->irq;
-static void enable_sb1250_irq(unsigned int irq)
-{
sb1250_unmask_irq(sb1250_irq_owner[irq], irq);
}
-static void ack_sb1250_irq(unsigned int irq)
+static void ack_sb1250_irq(struct irq_data *d)
{
+ unsigned int irq = d->irq;
#ifdef CONFIG_SIBYTE_HAS_LDT
u64 pending;
@@ -199,14 +176,14 @@ static void ack_sb1250_irq(unsigned int
sb1250_mask_irq(sb1250_irq_owner[irq], irq);
}
-
-static void end_sb1250_irq(unsigned int irq)
-{
- if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS))) {
- sb1250_unmask_irq(sb1250_irq_owner[irq], irq);
- }
-}
-
+static struct irq_chip sb1250_irq_type = {
+ .name = "SB1250-IMR",
+ .irq_mask_ack = ack_sb1250_irq,
+ .irq_unmask = enable_sb1250_irq,
+#ifdef CONFIG_SMP
+ .irq_set_affinity = sb1250_set_affinity
+#endif
+};
void __init init_sb1250_irqs(void)
{
^ permalink raw reply [flat|nested] 97+ messages in thread
* [patch 34/38] mips: sni: Convert to new irq_chip functions
2011-03-23 21:08 [patch 00/38] mips: irq chip overhaul and cleanup Thomas Gleixner
` (32 preceding siblings ...)
2011-03-23 21:09 ` [patch 33/38] mips: sybyte: " Thomas Gleixner
@ 2011-03-23 21:09 ` Thomas Gleixner
2011-03-24 14:52 ` Ralf Baechle
2011-03-23 21:09 ` [patch 35/38] mips: txx9: " Thomas Gleixner
` (3 subsequent siblings)
37 siblings, 1 reply; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-23 21:09 UTC (permalink / raw)
To: linux-mips; +Cc: Ralf Baechle
[-- Attachment #1: mips-sni.patch --]
[-- Type: text/plain, Size: 7250 bytes --]
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/mips/sni/a20r.c | 23 ++++++-----------------
arch/mips/sni/pcimt.c | 21 ++++++---------------
arch/mips/sni/pcit.c | 21 ++++++---------------
arch/mips/sni/rm200.c | 42 +++++++++++++++---------------------------
4 files changed, 33 insertions(+), 74 deletions(-)
Index: linux-mips-next/arch/mips/sni/a20r.c
===================================================================
--- linux-mips-next.orig/arch/mips/sni/a20r.c
+++ linux-mips-next/arch/mips/sni/a20r.c
@@ -168,33 +168,22 @@ static u32 a20r_ack_hwint(void)
return status;
}
-static inline void unmask_a20r_irq(unsigned int irq)
+static inline void unmask_a20r_irq(struct irq_data *d)
{
- set_c0_status(0x100 << (irq - SNI_A20R_IRQ_BASE));
+ set_c0_status(0x100 << (d->irq - SNI_A20R_IRQ_BASE));
irq_enable_hazard();
}
-static inline void mask_a20r_irq(unsigned int irq)
+static inline void mask_a20r_irq(struct irq_data *d)
{
- clear_c0_status(0x100 << (irq - SNI_A20R_IRQ_BASE));
+ clear_c0_status(0x100 << (d->irq - SNI_A20R_IRQ_BASE));
irq_disable_hazard();
}
-static void end_a20r_irq(unsigned int irq)
-{
- if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS))) {
- a20r_ack_hwint();
- unmask_a20r_irq(irq);
- }
-}
-
static struct irq_chip a20r_irq_type = {
.name = "A20R",
- .ack = mask_a20r_irq,
- .mask = mask_a20r_irq,
- .mask_ack = mask_a20r_irq,
- .unmask = unmask_a20r_irq,
- .end = end_a20r_irq,
+ .irq_mask = mask_a20r_irq,
+ .irq_unmask = unmask_a20r_irq,
};
/*
Index: linux-mips-next/arch/mips/sni/pcimt.c
===================================================================
--- linux-mips-next.orig/arch/mips/sni/pcimt.c
+++ linux-mips-next/arch/mips/sni/pcimt.c
@@ -194,33 +194,24 @@ static struct pci_controller sni_control
.io_map_base = SNI_PORT_BASE
};
-static void enable_pcimt_irq(unsigned int irq)
+static void enable_pcimt_irq(struct irq_data *d)
{
- unsigned int mask = 1 << (irq - PCIMT_IRQ_INT2);
+ unsigned int mask = 1 << (d->irq - PCIMT_IRQ_INT2);
*(volatile u8 *) PCIMT_IRQSEL |= mask;
}
-void disable_pcimt_irq(unsigned int irq)
+void disable_pcimt_irq(struct irq_data *d)
{
- unsigned int mask = ~(1 << (irq - PCIMT_IRQ_INT2));
+ unsigned int mask = ~(1 << (d->irq - PCIMT_IRQ_INT2));
*(volatile u8 *) PCIMT_IRQSEL &= mask;
}
-static void end_pcimt_irq(unsigned int irq)
-{
- if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS)))
- enable_pcimt_irq(irq);
-}
-
static struct irq_chip pcimt_irq_type = {
.name = "PCIMT",
- .ack = disable_pcimt_irq,
- .mask = disable_pcimt_irq,
- .mask_ack = disable_pcimt_irq,
- .unmask = enable_pcimt_irq,
- .end = end_pcimt_irq,
+ .irq_mask = disable_pcimt_irq,
+ .irq_unmask = enable_pcimt_irq,
};
/*
Index: linux-mips-next/arch/mips/sni/pcit.c
===================================================================
--- linux-mips-next.orig/arch/mips/sni/pcit.c
+++ linux-mips-next/arch/mips/sni/pcit.c
@@ -156,33 +156,24 @@ static struct pci_controller sni_pcit_co
.io_map_base = SNI_PORT_BASE
};
-static void enable_pcit_irq(unsigned int irq)
+static void enable_pcit_irq(struct irq_data *d)
{
- u32 mask = 1 << (irq - SNI_PCIT_INT_START + 24);
+ u32 mask = 1 << (d->irq - SNI_PCIT_INT_START + 24);
*(volatile u32 *)SNI_PCIT_INT_REG |= mask;
}
-void disable_pcit_irq(unsigned int irq)
+void disable_pcit_irq(struct irq_data *d)
{
- u32 mask = 1 << (irq - SNI_PCIT_INT_START + 24);
+ u32 mask = 1 << (d->irq - SNI_PCIT_INT_START + 24);
*(volatile u32 *)SNI_PCIT_INT_REG &= ~mask;
}
-void end_pcit_irq(unsigned int irq)
-{
- if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS)))
- enable_pcit_irq(irq);
-}
-
static struct irq_chip pcit_irq_type = {
.name = "PCIT",
- .ack = disable_pcit_irq,
- .mask = disable_pcit_irq,
- .mask_ack = disable_pcit_irq,
- .unmask = enable_pcit_irq,
- .end = end_pcit_irq,
+ .irq_mask = disable_pcit_irq,
+ .irq_unmask = enable_pcit_irq,
};
static void pcit_hwint1(void)
Index: linux-mips-next/arch/mips/sni/rm200.c
===================================================================
--- linux-mips-next.orig/arch/mips/sni/rm200.c
+++ linux-mips-next/arch/mips/sni/rm200.c
@@ -155,12 +155,11 @@ static __iomem u8 *rm200_pic_slave;
#define cached_master_mask (rm200_cached_irq_mask)
#define cached_slave_mask (rm200_cached_irq_mask >> 8)
-static void sni_rm200_disable_8259A_irq(unsigned int irq)
+static void sni_rm200_disable_8259A_irq(struct irq_data *d)
{
- unsigned int mask;
+ unsigned int mask, irq = d->irq - RM200_I8259A_IRQ_BASE;
unsigned long flags;
- irq -= RM200_I8259A_IRQ_BASE;
mask = 1 << irq;
raw_spin_lock_irqsave(&sni_rm200_i8259A_lock, flags);
rm200_cached_irq_mask |= mask;
@@ -171,12 +170,11 @@ static void sni_rm200_disable_8259A_irq(
raw_spin_unlock_irqrestore(&sni_rm200_i8259A_lock, flags);
}
-static void sni_rm200_enable_8259A_irq(unsigned int irq)
+static void sni_rm200_enable_8259A_irq(struct irq_data *d)
{
- unsigned int mask;
+ unsigned int mask, irq = d->irq - RM200_I8259A_IRQ_BASE;
unsigned long flags;
- irq -= RM200_I8259A_IRQ_BASE;
mask = ~(1 << irq);
raw_spin_lock_irqsave(&sni_rm200_i8259A_lock, flags);
rm200_cached_irq_mask &= mask;
@@ -210,12 +208,11 @@ static inline int sni_rm200_i8259A_irq_r
* first, _then_ send the EOI, and the order of EOI
* to the two 8259s is important!
*/
-void sni_rm200_mask_and_ack_8259A(unsigned int irq)
+void sni_rm200_mask_and_ack_8259A(struct irq_data *d)
{
- unsigned int irqmask;
+ unsigned int irqmask, irq = d->irq - RM200_I8259A_IRQ_BASE;
unsigned long flags;
- irq -= RM200_I8259A_IRQ_BASE;
irqmask = 1 << irq;
raw_spin_lock_irqsave(&sni_rm200_i8259A_lock, flags);
/*
@@ -285,9 +282,9 @@ spurious_8259A_irq:
static struct irq_chip sni_rm200_i8259A_chip = {
.name = "RM200-XT-PIC",
- .mask = sni_rm200_disable_8259A_irq,
- .unmask = sni_rm200_enable_8259A_irq,
- .mask_ack = sni_rm200_mask_and_ack_8259A,
+ .irq_mask = sni_rm200_disable_8259A_irq,
+ .irq_unmask = sni_rm200_enable_8259A_irq,
+ .irq_mask_ack = sni_rm200_mask_and_ack_8259A,
};
/*
@@ -429,33 +426,24 @@ void __init sni_rm200_i8259_irqs(void)
#define SNI_RM200_INT_START 24
#define SNI_RM200_INT_END 28
-static void enable_rm200_irq(unsigned int irq)
+static void enable_rm200_irq(struct irq_data *d)
{
- unsigned int mask = 1 << (irq - SNI_RM200_INT_START);
+ unsigned int mask = 1 << (d->irq - SNI_RM200_INT_START);
*(volatile u8 *)SNI_RM200_INT_ENA_REG &= ~mask;
}
-void disable_rm200_irq(unsigned int irq)
+void disable_rm200_irq(struct irq_data *d)
{
- unsigned int mask = 1 << (irq - SNI_RM200_INT_START);
+ unsigned int mask = 1 << (d->irq - SNI_RM200_INT_START);
*(volatile u8 *)SNI_RM200_INT_ENA_REG |= mask;
}
-void end_rm200_irq(unsigned int irq)
-{
- if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS)))
- enable_rm200_irq(irq);
-}
-
static struct irq_chip rm200_irq_type = {
.name = "RM200",
- .ack = disable_rm200_irq,
- .mask = disable_rm200_irq,
- .mask_ack = disable_rm200_irq,
- .unmask = enable_rm200_irq,
- .end = end_rm200_irq,
+ .irq_mask = disable_rm200_irq,
+ .irq_unmask = enable_rm200_irq,
};
static void sni_rm200_hwint(void)
^ permalink raw reply [flat|nested] 97+ messages in thread
* [patch 35/38] mips: txx9: Convert to new irq_chip functions
2011-03-23 21:08 [patch 00/38] mips: irq chip overhaul and cleanup Thomas Gleixner
` (33 preceding siblings ...)
2011-03-23 21:09 ` [patch 34/38] mips: sni: " Thomas Gleixner
@ 2011-03-23 21:09 ` Thomas Gleixner
2011-03-24 14:53 ` Ralf Baechle
2011-03-23 21:09 ` [patch 36/38] mips: vr41: " Thomas Gleixner
` (2 subsequent siblings)
37 siblings, 1 reply; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-23 21:09 UTC (permalink / raw)
To: linux-mips; +Cc: Ralf Baechle
[-- Attachment #1: mips-txx9.patch --]
[-- Type: text/plain, Size: 10912 bytes --]
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/mips/txx9/generic/irq_tx4939.c | 28 ++++++++---------
arch/mips/txx9/jmr3927/irq.c | 14 +++-----
arch/mips/txx9/rbtx4927/irq.c | 58 ++++++++++++++++--------------------
arch/mips/txx9/rbtx4938/irq.c | 54 ++++++++++++++-------------------
arch/mips/txx9/rbtx4939/irq.c | 14 +++-----
5 files changed, 75 insertions(+), 93 deletions(-)
Index: linux-mips-next/arch/mips/txx9/generic/irq_tx4939.c
===================================================================
--- linux-mips-next.orig/arch/mips/txx9/generic/irq_tx4939.c
+++ linux-mips-next/arch/mips/txx9/generic/irq_tx4939.c
@@ -50,9 +50,9 @@ static struct {
unsigned char mode;
} tx4939irq[TX4939_NUM_IR] __read_mostly;
-static void tx4939_irq_unmask(unsigned int irq)
+static void tx4939_irq_unmask(struct irq_data *d)
{
- unsigned int irq_nr = irq - TXX9_IRQ_BASE;
+ unsigned int irq_nr = d->irq - TXX9_IRQ_BASE;
u32 __iomem *lvlp;
int ofs;
if (irq_nr < 32) {
@@ -68,9 +68,9 @@ static void tx4939_irq_unmask(unsigned i
lvlp);
}
-static inline void tx4939_irq_mask(unsigned int irq)
+static inline void tx4939_irq_mask(struct irq_data *d)
{
- unsigned int irq_nr = irq - TXX9_IRQ_BASE;
+ unsigned int irq_nr = d->irq - TXX9_IRQ_BASE;
u32 __iomem *lvlp;
int ofs;
if (irq_nr < 32) {
@@ -87,11 +87,11 @@ static inline void tx4939_irq_mask(unsig
mmiowb();
}
-static void tx4939_irq_mask_ack(unsigned int irq)
+static void tx4939_irq_mask_ack(struct irq_data *d)
{
- unsigned int irq_nr = irq - TXX9_IRQ_BASE;
+ unsigned int irq_nr = d->irq - TXX9_IRQ_BASE;
- tx4939_irq_mask(irq);
+ tx4939_irq_mask(d);
if (TXx9_IRCR_EDGE(tx4939irq[irq_nr].mode)) {
irq_nr--;
/* clear edge detection */
@@ -101,9 +101,9 @@ static void tx4939_irq_mask_ack(unsigned
}
}
-static int tx4939_irq_set_type(unsigned int irq, unsigned int flow_type)
+static int tx4939_irq_set_type(struct irq_data *d, unsigned int flow_type)
{
- unsigned int irq_nr = irq - TXX9_IRQ_BASE;
+ unsigned int irq_nr = d->irq - TXX9_IRQ_BASE;
u32 cr;
u32 __iomem *crp;
int ofs;
@@ -145,11 +145,11 @@ static int tx4939_irq_set_type(unsigned
static struct irq_chip tx4939_irq_chip = {
.name = "TX4939",
- .ack = tx4939_irq_mask_ack,
- .mask = tx4939_irq_mask,
- .mask_ack = tx4939_irq_mask_ack,
- .unmask = tx4939_irq_unmask,
- .set_type = tx4939_irq_set_type,
+ .irq_ack = tx4939_irq_mask_ack,
+ .irq_mask = tx4939_irq_mask,
+ .irq_mask_ack = tx4939_irq_mask_ack,
+ .irq_unmask = tx4939_irq_unmask,
+ .irq_set_type = tx4939_irq_set_type,
};
static int tx4939_irq_set_pri(int irc_irq, int new_pri)
Index: linux-mips-next/arch/mips/txx9/jmr3927/irq.c
===================================================================
--- linux-mips-next.orig/arch/mips/txx9/jmr3927/irq.c
+++ linux-mips-next/arch/mips/txx9/jmr3927/irq.c
@@ -47,20 +47,20 @@
* CP0_STATUS is a thread's resource (saved/restored on context switch).
* So disable_irq/enable_irq MUST handle IOC/IRC registers.
*/
-static void mask_irq_ioc(unsigned int irq)
+static void mask_irq_ioc(struct irq_data *d)
{
/* 0: mask */
- unsigned int irq_nr = irq - JMR3927_IRQ_IOC;
+ unsigned int irq_nr = d->irq - JMR3927_IRQ_IOC;
unsigned char imask = jmr3927_ioc_reg_in(JMR3927_IOC_INTM_ADDR);
unsigned int bit = 1 << irq_nr;
jmr3927_ioc_reg_out(imask & ~bit, JMR3927_IOC_INTM_ADDR);
/* flush write buffer */
(void)jmr3927_ioc_reg_in(JMR3927_IOC_REV_ADDR);
}
-static void unmask_irq_ioc(unsigned int irq)
+static void unmask_irq_ioc(struct irq_data *d)
{
/* 0: mask */
- unsigned int irq_nr = irq - JMR3927_IRQ_IOC;
+ unsigned int irq_nr = d->irq - JMR3927_IRQ_IOC;
unsigned char imask = jmr3927_ioc_reg_in(JMR3927_IOC_INTM_ADDR);
unsigned int bit = 1 << irq_nr;
jmr3927_ioc_reg_out(imask | bit, JMR3927_IOC_INTM_ADDR);
@@ -95,10 +95,8 @@ static int jmr3927_irq_dispatch(int pend
static struct irq_chip jmr3927_irq_ioc = {
.name = "jmr3927_ioc",
- .ack = mask_irq_ioc,
- .mask = mask_irq_ioc,
- .mask_ack = mask_irq_ioc,
- .unmask = unmask_irq_ioc,
+ .irq_mask = mask_irq_ioc,
+ .irq_unmask = unmask_irq_ioc,
};
void __init jmr3927_irq_setup(void)
Index: linux-mips-next/arch/mips/txx9/rbtx4927/irq.c
===================================================================
--- linux-mips-next.orig/arch/mips/txx9/rbtx4927/irq.c
+++ linux-mips-next/arch/mips/txx9/rbtx4927/irq.c
@@ -117,18 +117,6 @@
#include <asm/txx9/generic.h>
#include <asm/txx9/rbtx4927.h>
-static void toshiba_rbtx4927_irq_ioc_enable(unsigned int irq);
-static void toshiba_rbtx4927_irq_ioc_disable(unsigned int irq);
-
-#define TOSHIBA_RBTX4927_IOC_NAME "RBTX4927-IOC"
-static struct irq_chip toshiba_rbtx4927_irq_ioc_type = {
- .name = TOSHIBA_RBTX4927_IOC_NAME,
- .ack = toshiba_rbtx4927_irq_ioc_disable,
- .mask = toshiba_rbtx4927_irq_ioc_disable,
- .mask_ack = toshiba_rbtx4927_irq_ioc_disable,
- .unmask = toshiba_rbtx4927_irq_ioc_enable,
-};
-
static int toshiba_rbtx4927_irq_nested(int sw_irq)
{
u8 level3;
@@ -139,41 +127,47 @@ static int toshiba_rbtx4927_irq_nested(i
return RBTX4927_IRQ_IOC + __fls8(level3);
}
-static void __init toshiba_rbtx4927_irq_ioc_init(void)
-{
- int i;
-
- /* mask all IOC interrupts */
- writeb(0, rbtx4927_imask_addr);
- /* clear SoftInt interrupts */
- writeb(0, rbtx4927_softint_addr);
-
- for (i = RBTX4927_IRQ_IOC;
- i < RBTX4927_IRQ_IOC + RBTX4927_NR_IRQ_IOC; i++)
- set_irq_chip_and_handler(i, &toshiba_rbtx4927_irq_ioc_type,
- handle_level_irq);
- set_irq_chained_handler(RBTX4927_IRQ_IOCINT, handle_simple_irq);
-}
-
-static void toshiba_rbtx4927_irq_ioc_enable(unsigned int irq)
+static void toshiba_rbtx4927_irq_ioc_enable(struct irq_data *d)
{
unsigned char v;
v = readb(rbtx4927_imask_addr);
- v |= (1 << (irq - RBTX4927_IRQ_IOC));
+ v |= (1 << (d->irq - RBTX4927_IRQ_IOC));
writeb(v, rbtx4927_imask_addr);
}
-static void toshiba_rbtx4927_irq_ioc_disable(unsigned int irq)
+static void toshiba_rbtx4927_irq_ioc_disable(struct irq_data *d)
{
unsigned char v;
v = readb(rbtx4927_imask_addr);
- v &= ~(1 << (irq - RBTX4927_IRQ_IOC));
+ v &= ~(1 << (d->irq - RBTX4927_IRQ_IOC));
writeb(v, rbtx4927_imask_addr);
mmiowb();
}
+#define TOSHIBA_RBTX4927_IOC_NAME "RBTX4927-IOC"
+static struct irq_chip toshiba_rbtx4927_irq_ioc_type = {
+ .name = TOSHIBA_RBTX4927_IOC_NAME,
+ .irq_mask = toshiba_rbtx4927_irq_ioc_disable,
+ .irq_unmask = toshiba_rbtx4927_irq_ioc_enable,
+};
+
+static void __init toshiba_rbtx4927_irq_ioc_init(void)
+{
+ int i;
+
+ /* mask all IOC interrupts */
+ writeb(0, rbtx4927_imask_addr);
+ /* clear SoftInt interrupts */
+ writeb(0, rbtx4927_softint_addr);
+
+ for (i = RBTX4927_IRQ_IOC;
+ i < RBTX4927_IRQ_IOC + RBTX4927_NR_IRQ_IOC; i++)
+ set_irq_chip_and_handler(i, &toshiba_rbtx4927_irq_ioc_type,
+ handle_level_irq);
+ set_irq_chained_handler(RBTX4927_IRQ_IOCINT, handle_simple_irq);
+}
static int rbtx4927_irq_dispatch(int pending)
{
Index: linux-mips-next/arch/mips/txx9/rbtx4938/irq.c
===================================================================
--- linux-mips-next.orig/arch/mips/txx9/rbtx4938/irq.c
+++ linux-mips-next/arch/mips/txx9/rbtx4938/irq.c
@@ -69,18 +69,6 @@
#include <asm/txx9/generic.h>
#include <asm/txx9/rbtx4938.h>
-static void toshiba_rbtx4938_irq_ioc_enable(unsigned int irq);
-static void toshiba_rbtx4938_irq_ioc_disable(unsigned int irq);
-
-#define TOSHIBA_RBTX4938_IOC_NAME "RBTX4938-IOC"
-static struct irq_chip toshiba_rbtx4938_irq_ioc_type = {
- .name = TOSHIBA_RBTX4938_IOC_NAME,
- .ack = toshiba_rbtx4938_irq_ioc_disable,
- .mask = toshiba_rbtx4938_irq_ioc_disable,
- .mask_ack = toshiba_rbtx4938_irq_ioc_disable,
- .unmask = toshiba_rbtx4938_irq_ioc_enable,
-};
-
static int toshiba_rbtx4938_irq_nested(int sw_irq)
{
u8 level3;
@@ -92,41 +80,33 @@ static int toshiba_rbtx4938_irq_nested(i
return RBTX4938_IRQ_IOC + __fls8(level3);
}
-static void __init
-toshiba_rbtx4938_irq_ioc_init(void)
-{
- int i;
-
- for (i = RBTX4938_IRQ_IOC;
- i < RBTX4938_IRQ_IOC + RBTX4938_NR_IRQ_IOC; i++)
- set_irq_chip_and_handler(i, &toshiba_rbtx4938_irq_ioc_type,
- handle_level_irq);
-
- set_irq_chained_handler(RBTX4938_IRQ_IOCINT, handle_simple_irq);
-}
-
-static void
-toshiba_rbtx4938_irq_ioc_enable(unsigned int irq)
+static void toshiba_rbtx4938_irq_ioc_enable(struct irq_data *d)
{
unsigned char v;
v = readb(rbtx4938_imask_addr);
- v |= (1 << (irq - RBTX4938_IRQ_IOC));
+ v |= (1 << (d->irq - RBTX4938_IRQ_IOC));
writeb(v, rbtx4938_imask_addr);
mmiowb();
}
-static void
-toshiba_rbtx4938_irq_ioc_disable(unsigned int irq)
+static void toshiba_rbtx4938_irq_ioc_disable(struct irq_data *d)
{
unsigned char v;
v = readb(rbtx4938_imask_addr);
- v &= ~(1 << (irq - RBTX4938_IRQ_IOC));
+ v &= ~(1 << (d->irq - RBTX4938_IRQ_IOC));
writeb(v, rbtx4938_imask_addr);
mmiowb();
}
+#define TOSHIBA_RBTX4938_IOC_NAME "RBTX4938-IOC"
+static struct irq_chip toshiba_rbtx4938_irq_ioc_type = {
+ .name = TOSHIBA_RBTX4938_IOC_NAME,
+ .irq_mask = toshiba_rbtx4938_irq_ioc_disable,
+ .irq_unmask = toshiba_rbtx4938_irq_ioc_enable,
+};
+
static int rbtx4938_irq_dispatch(int pending)
{
int irq;
@@ -146,6 +126,18 @@ static int rbtx4938_irq_dispatch(int pen
return irq;
}
+static void __init toshiba_rbtx4938_irq_ioc_init(void)
+{
+ int i;
+
+ for (i = RBTX4938_IRQ_IOC;
+ i < RBTX4938_IRQ_IOC + RBTX4938_NR_IRQ_IOC; i++)
+ set_irq_chip_and_handler(i, &toshiba_rbtx4938_irq_ioc_type,
+ handle_level_irq);
+
+ set_irq_chained_handler(RBTX4938_IRQ_IOCINT, handle_simple_irq);
+}
+
void __init rbtx4938_irq_setup(void)
{
txx9_irq_dispatch = rbtx4938_irq_dispatch;
Index: linux-mips-next/arch/mips/txx9/rbtx4939/irq.c
===================================================================
--- linux-mips-next.orig/arch/mips/txx9/rbtx4939/irq.c
+++ linux-mips-next/arch/mips/txx9/rbtx4939/irq.c
@@ -19,16 +19,16 @@
* RBTX4939 IOC controller definition
*/
-static void rbtx4939_ioc_irq_unmask(unsigned int irq)
+static void rbtx4939_ioc_irq_unmask(struct irq_data *d)
{
- int ioc_nr = irq - RBTX4939_IRQ_IOC;
+ int ioc_nr = d->irq - RBTX4939_IRQ_IOC;
writeb(readb(rbtx4939_ien_addr) | (1 << ioc_nr), rbtx4939_ien_addr);
}
-static void rbtx4939_ioc_irq_mask(unsigned int irq)
+static void rbtx4939_ioc_irq_mask(struct irq_data *d)
{
- int ioc_nr = irq - RBTX4939_IRQ_IOC;
+ int ioc_nr = d->irq - RBTX4939_IRQ_IOC;
writeb(readb(rbtx4939_ien_addr) & ~(1 << ioc_nr), rbtx4939_ien_addr);
mmiowb();
@@ -36,10 +36,8 @@ static void rbtx4939_ioc_irq_mask(unsign
static struct irq_chip rbtx4939_ioc_irq_chip = {
.name = "IOC",
- .ack = rbtx4939_ioc_irq_mask,
- .mask = rbtx4939_ioc_irq_mask,
- .mask_ack = rbtx4939_ioc_irq_mask,
- .unmask = rbtx4939_ioc_irq_unmask,
+ .irq_mask = rbtx4939_ioc_irq_mask,
+ .irq_unmask = rbtx4939_ioc_irq_unmask,
};
^ permalink raw reply [flat|nested] 97+ messages in thread
* [patch 36/38] mips: vr41: Convert to new irq_chip functions
2011-03-23 21:08 [patch 00/38] mips: irq chip overhaul and cleanup Thomas Gleixner
` (34 preceding siblings ...)
2011-03-23 21:09 ` [patch 35/38] mips: txx9: " Thomas Gleixner
@ 2011-03-23 21:09 ` Thomas Gleixner
2011-03-24 12:36 ` Sergei Shtylyov
2011-03-23 21:09 ` [patch 37/38] mips: vr41xx: Cleanup the direct access to irq_desc[] Thomas Gleixner
2011-03-23 21:09 ` [patch 38/38] mips: Select GENERIC_HARDIRQS_NO_DEPRECATED Thomas Gleixner
37 siblings, 1 reply; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-23 21:09 UTC (permalink / raw)
To: linux-mips; +Cc: Ralf Baechle
[-- Attachment #1: mips-vr41.patch --]
[-- Type: text/plain, Size: 2031 bytes --]
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/mips/vr41xx/common/icu.c | 28 ++++++++++++----------------
1 file changed, 12 insertions(+), 16 deletions(-)
Index: linux-mips-next/arch/mips/vr41xx/common/icu.c
===================================================================
--- linux-mips-next.orig/arch/mips/vr41xx/common/icu.c
+++ linux-mips-next/arch/mips/vr41xx/common/icu.c
@@ -442,40 +442,36 @@ void vr41xx_disable_bcuint(void)
EXPORT_SYMBOL(vr41xx_disable_bcuint);
-static void disable_sysint1_irq(unsigned int irq)
+static void disable_sysint1_irq(struct irq_data *d)
{
- icu1_clear(MSYSINT1REG, 1 << SYSINT1_IRQ_TO_PIN(irq));
+ icu1_clear(MSYSINT1REG, 1 << SYSINT1_IRQ_TO_PIN(d->irq));
}
-static void enable_sysint1_irq(unsigned int irq)
+static void enable_sysint1_irq(struct irq_data *d)
{
- icu1_set(MSYSINT1REG, 1 << SYSINT1_IRQ_TO_PIN(irq));
+ icu1_set(MSYSINT1REG, 1 << SYSINT1_IRQ_TO_PIN(d->irq));
}
static struct irq_chip sysint1_irq_type = {
.name = "SYSINT1",
- .ack = disable_sysint1_irq,
- .mask = disable_sysint1_irq,
- .mask_ack = disable_sysint1_irq,
- .unmask = enable_sysint1_irq,
+ .irq_mask = disable_sysint1_irq,
+ .irq_unmask = enable_sysint1_irq,
};
-static void disable_sysint2_irq(unsigned int irq)
+static void disable_sysint2_irq(struct irq_data *d)
{
- icu2_clear(MSYSINT2REG, 1 << SYSINT2_IRQ_TO_PIN(irq));
+ icu2_clear(MSYSINT2REG, 1 << SYSINT2_IRQ_TO_PIN(d->irq));
}
-static void enable_sysint2_irq(unsigned int irq)
+static void enable_sysint2_irq(struct irq_data *d)
{
- icu2_set(MSYSINT2REG, 1 << SYSINT2_IRQ_TO_PIN(irq));
+ icu2_set(MSYSINT2REG, 1 << SYSINT2_IRQ_TO_PIN(d->irq));
}
static struct irq_chip sysint2_irq_type = {
.name = "SYSINT2",
- .ack = disable_sysint2_irq,
- .mask = disable_sysint2_irq,
- .mask_ack = disable_sysint2_irq,
- .unmask = enable_sysint2_irq,
+ .irq_mask = disable_sysint2_irq,
+ .irq_unmask = enable_sysint2_irq,
};
static inline int set_sysint1_assign(unsigned int irq, unsigned char assign)
^ permalink raw reply [flat|nested] 97+ messages in thread
* [patch 37/38] mips: vr41xx: Cleanup the direct access to irq_desc[]
2011-03-23 21:08 [patch 00/38] mips: irq chip overhaul and cleanup Thomas Gleixner
` (35 preceding siblings ...)
2011-03-23 21:09 ` [patch 36/38] mips: vr41: " Thomas Gleixner
@ 2011-03-23 21:09 ` Thomas Gleixner
2011-03-24 12:44 ` Sergei Shtylyov
2011-03-23 21:09 ` [patch 38/38] mips: Select GENERIC_HARDIRQS_NO_DEPRECATED Thomas Gleixner
37 siblings, 1 reply; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-23 21:09 UTC (permalink / raw)
To: linux-mips; +Cc: Ralf Baechle
[-- Attachment #1: mips-vr41xx-mess.patch --]
[-- Type: text/plain, Size: 7845 bytes --]
Tons of unused code, but that's Ralfs problem.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/mips/vr41xx/common/icu.c | 44 +++++++++++++++++++++---------------------
arch/mips/vr41xx/common/irq.c | 19 +++++++++---------
2 files changed, 32 insertions(+), 31 deletions(-)
Index: linux-mips-next/arch/mips/vr41xx/common/icu.c
===================================================================
--- linux-mips-next.orig/arch/mips/vr41xx/common/icu.c
+++ linux-mips-next/arch/mips/vr41xx/common/icu.c
@@ -154,7 +154,7 @@ static inline uint16_t icu2_clear(uint8_
void vr41xx_enable_piuint(uint16_t mask)
{
- struct irq_desc *desc = irq_desc + PIU_IRQ;
+ struct irq_desc *desc = irq_to_desc(PIU_IRQ);
unsigned long flags;
if (current_cpu_type() == CPU_VR4111 ||
@@ -169,7 +169,7 @@ EXPORT_SYMBOL(vr41xx_enable_piuint);
void vr41xx_disable_piuint(uint16_t mask)
{
- struct irq_desc *desc = irq_desc + PIU_IRQ;
+ struct irq_desc *desc = irq_to_desc(PIU_IRQ);
unsigned long flags;
if (current_cpu_type() == CPU_VR4111 ||
@@ -184,7 +184,7 @@ EXPORT_SYMBOL(vr41xx_disable_piuint);
void vr41xx_enable_aiuint(uint16_t mask)
{
- struct irq_desc *desc = irq_desc + AIU_IRQ;
+ struct irq_desc *desc = irq_to_desc(AIU_IRQ);
unsigned long flags;
if (current_cpu_type() == CPU_VR4111 ||
@@ -199,7 +199,7 @@ EXPORT_SYMBOL(vr41xx_enable_aiuint);
void vr41xx_disable_aiuint(uint16_t mask)
{
- struct irq_desc *desc = irq_desc + AIU_IRQ;
+ struct irq_desc *desc = irq_to_desc(AIU_IRQ);
unsigned long flags;
if (current_cpu_type() == CPU_VR4111 ||
@@ -214,7 +214,7 @@ EXPORT_SYMBOL(vr41xx_disable_aiuint);
void vr41xx_enable_kiuint(uint16_t mask)
{
- struct irq_desc *desc = irq_desc + KIU_IRQ;
+ struct irq_desc *desc = irq_to_desc(KIU_IRQ);
unsigned long flags;
if (current_cpu_type() == CPU_VR4111 ||
@@ -229,7 +229,7 @@ EXPORT_SYMBOL(vr41xx_enable_kiuint);
void vr41xx_disable_kiuint(uint16_t mask)
{
- struct irq_desc *desc = irq_desc + KIU_IRQ;
+ struct irq_desc *desc = irq_to_desc(KIU_IRQ);
unsigned long flags;
if (current_cpu_type() == CPU_VR4111 ||
@@ -244,7 +244,7 @@ EXPORT_SYMBOL(vr41xx_disable_kiuint);
void vr41xx_enable_macint(uint16_t mask)
{
- struct irq_desc *desc = irq_desc + ETHERNET_IRQ;
+ struct irq_desc *desc = irq_to_desc(ETHERNET_IRQ);
unsigned long flags;
raw_spin_lock_irqsave(&desc->lock, flags);
@@ -256,7 +256,7 @@ EXPORT_SYMBOL(vr41xx_enable_macint);
void vr41xx_disable_macint(uint16_t mask)
{
- struct irq_desc *desc = irq_desc + ETHERNET_IRQ;
+ struct irq_desc *desc = irq_to_desc(ETHERNET_IRQ);
unsigned long flags;
raw_spin_lock_irqsave(&desc->lock, flags);
@@ -268,7 +268,7 @@ EXPORT_SYMBOL(vr41xx_disable_macint);
void vr41xx_enable_dsiuint(uint16_t mask)
{
- struct irq_desc *desc = irq_desc + DSIU_IRQ;
+ struct irq_desc *desc = irq_to_desc(DSIU_IRQ);
unsigned long flags;
raw_spin_lock_irqsave(&desc->lock, flags);
@@ -280,7 +280,7 @@ EXPORT_SYMBOL(vr41xx_enable_dsiuint);
void vr41xx_disable_dsiuint(uint16_t mask)
{
- struct irq_desc *desc = irq_desc + DSIU_IRQ;
+ struct irq_desc *desc = irq_to_desc(DSIU_IRQ);
unsigned long flags;
raw_spin_lock_irqsave(&desc->lock, flags);
@@ -292,7 +292,7 @@ EXPORT_SYMBOL(vr41xx_disable_dsiuint);
void vr41xx_enable_firint(uint16_t mask)
{
- struct irq_desc *desc = irq_desc + FIR_IRQ;
+ struct irq_desc *desc = irq_to_desc(FIR_IRQ);
unsigned long flags;
raw_spin_lock_irqsave(&desc->lock, flags);
@@ -304,7 +304,7 @@ EXPORT_SYMBOL(vr41xx_enable_firint);
void vr41xx_disable_firint(uint16_t mask)
{
- struct irq_desc *desc = irq_desc + FIR_IRQ;
+ struct irq_desc *desc = irq_to_desc(FIR_IRQ);
unsigned long flags;
raw_spin_lock_irqsave(&desc->lock, flags);
@@ -316,7 +316,7 @@ EXPORT_SYMBOL(vr41xx_disable_firint);
void vr41xx_enable_pciint(void)
{
- struct irq_desc *desc = irq_desc + PCI_IRQ;
+ struct irq_desc *desc = irq_to_desc(PCI_IRQ);
unsigned long flags;
if (current_cpu_type() == CPU_VR4122 ||
@@ -332,7 +332,7 @@ EXPORT_SYMBOL(vr41xx_enable_pciint);
void vr41xx_disable_pciint(void)
{
- struct irq_desc *desc = irq_desc + PCI_IRQ;
+ struct irq_desc *desc = irq_to_desc(PCI_IRQ);
unsigned long flags;
if (current_cpu_type() == CPU_VR4122 ||
@@ -348,7 +348,7 @@ EXPORT_SYMBOL(vr41xx_disable_pciint);
void vr41xx_enable_scuint(void)
{
- struct irq_desc *desc = irq_desc + SCU_IRQ;
+ struct irq_desc *desc = irq_to_desc(SCU_IRQ);
unsigned long flags;
if (current_cpu_type() == CPU_VR4122 ||
@@ -364,7 +364,7 @@ EXPORT_SYMBOL(vr41xx_enable_scuint);
void vr41xx_disable_scuint(void)
{
- struct irq_desc *desc = irq_desc + SCU_IRQ;
+ struct irq_desc *desc = irq_to_desc(SCU_IRQ);
unsigned long flags;
if (current_cpu_type() == CPU_VR4122 ||
@@ -380,7 +380,7 @@ EXPORT_SYMBOL(vr41xx_disable_scuint);
void vr41xx_enable_csiint(uint16_t mask)
{
- struct irq_desc *desc = irq_desc + CSI_IRQ;
+ struct irq_desc *desc = irq_to_desc(CSI_IRQ);
unsigned long flags;
if (current_cpu_type() == CPU_VR4122 ||
@@ -396,7 +396,7 @@ EXPORT_SYMBOL(vr41xx_enable_csiint);
void vr41xx_disable_csiint(uint16_t mask)
{
- struct irq_desc *desc = irq_desc + CSI_IRQ;
+ struct irq_desc *desc = irq_to_desc(CSI_IRQ);
unsigned long flags;
if (current_cpu_type() == CPU_VR4122 ||
@@ -412,7 +412,7 @@ EXPORT_SYMBOL(vr41xx_disable_csiint);
void vr41xx_enable_bcuint(void)
{
- struct irq_desc *desc = irq_desc + BCU_IRQ;
+ struct irq_desc *desc = irq_to_desc(BCU_IRQ);
unsigned long flags;
if (current_cpu_type() == CPU_VR4122 ||
@@ -428,7 +428,7 @@ EXPORT_SYMBOL(vr41xx_enable_bcuint);
void vr41xx_disable_bcuint(void)
{
- struct irq_desc *desc = irq_desc + BCU_IRQ;
+ struct irq_desc *desc = irq_to_desc(BCU_IRQ);
unsigned long flags;
if (current_cpu_type() == CPU_VR4122 ||
@@ -476,7 +476,7 @@ static struct irq_chip sysint2_irq_type
static inline int set_sysint1_assign(unsigned int irq, unsigned char assign)
{
- struct irq_desc *desc = irq_desc + irq;
+ struct irq_desc *desc = irq_to_desc(irq);
uint16_t intassign0, intassign1;
unsigned int pin;
@@ -536,7 +536,7 @@ static inline int set_sysint1_assign(uns
static inline int set_sysint2_assign(unsigned int irq, unsigned char assign)
{
- struct irq_desc *desc = irq_desc + irq;
+ struct irq_desc *desc = irq_to_desc(irq);
uint16_t intassign2, intassign3;
unsigned int pin;
Index: linux-mips-next/arch/mips/vr41xx/common/irq.c
===================================================================
--- linux-mips-next.orig/arch/mips/vr41xx/common/irq.c
+++ linux-mips-next/arch/mips/vr41xx/common/irq.c
@@ -62,7 +62,6 @@ EXPORT_SYMBOL_GPL(cascade_irq);
static void irq_dispatch(unsigned int irq)
{
irq_cascade_t *cascade;
- struct irq_desc *desc;
if (irq >= NR_IRQS) {
atomic_inc(&irq_err_count);
@@ -71,14 +70,16 @@ static void irq_dispatch(unsigned int ir
cascade = irq_cascade + irq;
if (cascade->get_irq != NULL) {
- unsigned int source_irq = irq;
+ struct irq_desc *desc = irq_to_desc(irq);
+ struct irq_data *idata = irq_desc_get_irq_data(desc);
+ struct irq_chip *chip = irq_desc_get_chip(desc);
int ret;
- desc = irq_desc + source_irq;
- if (desc->chip->mask_ack)
- desc->chip->mask_ack(source_irq);
+
+ if (chip->irq_mask_ack)
+ chip->irq_mask_ack(idata);
else {
- desc->chip->mask(source_irq);
- desc->chip->ack(source_irq);
+ chip->irq_mask(idata);
+ chip->irq_ack(idata);
}
ret = cascade->get_irq(irq);
irq = ret;
@@ -86,8 +87,8 @@ static void irq_dispatch(unsigned int ir
atomic_inc(&irq_err_count);
else
irq_dispatch(irq);
- if (!(desc->status & IRQ_DISABLED) && desc->chip->unmask)
- desc->chip->unmask(source_irq);
+ if (!(desc->status & IRQ_DISABLED) && chip->irq_unmask)
+ chip->irq_unmask(idata);
} else
do_IRQ(irq);
}
^ permalink raw reply [flat|nested] 97+ messages in thread
* [patch 38/38] mips: Select GENERIC_HARDIRQS_NO_DEPRECATED
2011-03-23 21:08 [patch 00/38] mips: irq chip overhaul and cleanup Thomas Gleixner
` (36 preceding siblings ...)
2011-03-23 21:09 ` [patch 37/38] mips: vr41xx: Cleanup the direct access to irq_desc[] Thomas Gleixner
@ 2011-03-23 21:09 ` Thomas Gleixner
2011-03-24 14:15 ` Ralf Baechle
37 siblings, 1 reply; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-23 21:09 UTC (permalink / raw)
To: linux-mips; +Cc: Ralf Baechle
[-- Attachment #1: mips-set-nodepr.patch --]
[-- Type: text/plain, Size: 519 bytes --]
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/mips/Kconfig | 1 +
1 file changed, 1 insertion(+)
Index: linux-mips-next/arch/mips/Kconfig
===================================================================
--- linux-mips-next.orig/arch/mips/Kconfig
+++ linux-mips-next/arch/mips/Kconfig
@@ -23,6 +23,7 @@ config MIPS
select HAVE_GENERIC_HARDIRQS
select GENERIC_IRQ_PROBE
select GENERIC_IRQ_SHOW
+ select GENERIC_HARDIRQS_NO_DEPRECATED
select HAVE_ARCH_JUMP_LABEL
menu "Machine selection"
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 05/38] mips: cavium-octeon: Convert to new irq_chip functions
2011-03-23 21:08 ` [patch 05/38] mips: cavium-octeon: " Thomas Gleixner
@ 2011-03-23 21:31 ` David Daney
2011-03-24 14:12 ` Ralf Baechle
0 siblings, 1 reply; 97+ messages in thread
From: David Daney @ 2011-03-23 21:31 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: linux-mips, Ralf Baechle
On 03/23/2011 02:08 PM, Thomas Gleixner wrote:
> Signed-off-by: Thomas Gleixner<tglx@linutronix.de>
> ---
> arch/mips/cavium-octeon/octeon-irq.c | 237 ++++++++++++++++-------------------
> arch/mips/pci/msi-octeon.c | 20 +-
> 2 files changed, 120 insertions(+), 137 deletions(-)
>
[...]
Argh!
This definitely collides with my Octeon IRQ rewrite, which does the same
thing and more. My patch is pending my cpu_{on,off}line chip function
patch for the IRQ core.
David Daney
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 01/38] mips; Convert alchemy to new irq chip functions
2011-03-23 21:08 ` [patch 01/38] mips; Convert alchemy to new irq chip functions Thomas Gleixner
@ 2011-03-24 7:41 ` Manuel Lauss
2011-03-24 8:14 ` Thomas Gleixner
0 siblings, 1 reply; 97+ messages in thread
From: Manuel Lauss @ 2011-03-24 7:41 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: linux-mips, Ralf Baechle
On Wed, Mar 23, 2011 at 10:08 PM, Thomas Gleixner <tglx@linutronix.de> wrote:
> Fix the deadlock in set_type() while at it.
>
> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
> ---
> arch/mips/alchemy/common/irq.c | 98 ++++++++++++++++++-------------------
> arch/mips/alchemy/devboards/bcsr.c | 18 +++---
> 2 files changed, 59 insertions(+), 57 deletions(-)
Tested on the db1200, works fine.
I'm curious though: could you please elaborate on where the deadlock came from?
Is it not safe to call set_irq_type() at all times?
Thanks!
Manuel Lauss
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 01/38] mips; Convert alchemy to new irq chip functions
2011-03-24 7:41 ` Manuel Lauss
@ 2011-03-24 8:14 ` Thomas Gleixner
2011-03-24 14:06 ` Ralf Baechle
0 siblings, 1 reply; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-24 8:14 UTC (permalink / raw)
To: Manuel Lauss; +Cc: linux-mips, Ralf Baechle
[-- Attachment #1: Type: TEXT/PLAIN, Size: 872 bytes --]
On Thu, 24 Mar 2011, Manuel Lauss wrote:
> On Wed, Mar 23, 2011 at 10:08 PM, Thomas Gleixner <tglx@linutronix.de> wrote:
> > Fix the deadlock in set_type() while at it.
> >
> > Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
> > ---
> > arch/mips/alchemy/common/irq.c | 98 ++++++++++++++++++-------------------
> > arch/mips/alchemy/devboards/bcsr.c | 18 +++---
> > 2 files changed, 59 insertions(+), 57 deletions(-)
>
> Tested on the db1200, works fine.
>
> I'm curious though: could you please elaborate on where the deadlock came from?
> Is it not safe to call set_irq_type() at all times?
The code called set_irq_chip_and_handler_name() resp. set_irq_chip()
from the set_type() callback. That only works on UP and lock debugging
disabled. Otherwise it would dead lock on desc->lock.
__irq_set_chip_handler_name_locked() avoids that.
Thanks,
tglx
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 10/38] MIPS: JZ4740: GPIO: Use shared irq chip for all gpios
2011-03-23 21:08 ` [patch 10/38] MIPS: JZ4740: GPIO: Use shared irq chip for all gpios Thomas Gleixner
@ 2011-03-24 12:15 ` Sergei Shtylyov
2011-03-24 12:59 ` Thomas Gleixner
2011-03-24 14:28 ` Ralf Baechle
0 siblings, 2 replies; 97+ messages in thread
From: Sergei Shtylyov @ 2011-03-24 12:15 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: linux-mips, Ralf Baechle, Lars-Peter Clausen
Hello.
On 24-03-2011 0:08, Thomas Gleixner wrote:
> Currently there is one irq_chip per gpio_chip with the only difference
> being the name. Since the information whether the irq belong to GPIO
> bank A, B, C or D is not that important rewrite the code to simply use
> a single irq_chip for all gpio_chips.
> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
If these 2 patches are from Lars, shouldn't there be "From: Lars-Peter
Clausen <lars@metafoo.de>" line at the start of the patches?
WBR, Sergei
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 14/38] mips: gic: Convert to new irq_chip functions
2011-03-23 21:08 ` [patch 14/38] mips: gic: " Thomas Gleixner
@ 2011-03-24 12:22 ` Sergei Shtylyov
2011-03-24 14:34 ` Ralf Baechle
0 siblings, 1 reply; 97+ messages in thread
From: Sergei Shtylyov @ 2011-03-24 12:22 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: linux-mips, Ralf Baechle
Hello.
On 24-03-2011 0:08, Thomas Gleixner wrote:
> Signed-off-by: Thomas Gleixner<tglx@linutronix.de>
> ---
> arch/mips/kernel/irq-gic.c | 44 ++++++++++++++++++--------------------------
> 1 file changed, 18 insertions(+), 26 deletions(-)
> Index: linux-mips-next/arch/mips/kernel/irq-gic.c
> ===================================================================
> --- linux-mips-next.orig/arch/mips/kernel/irq-gic.c
> +++ linux-mips-next/arch/mips/kernel/irq-gic.c
> @@ -87,17 +87,9 @@ unsigned int gic_get_int(void)
> return i;
> }
>
> -static unsigned int gic_irq_startup(unsigned int irq)
> +static void gic_irq_ack(struct irq_data *d)
> {
> - irq -= _irqbase;
> - pr_debug("CPU%d: %s: irq%d\n", smp_processor_id(), __func__, irq);
> - GIC_SET_INTR_MASK(irq);
> - return 0;
> -}
> -
> -static void gic_irq_ack(unsigned int irq)
> -{
> - irq -= _irqbase;
> + unsigned int irq = d->irq - _irqbase;
The style of this file assumes empty lines aftrer the declaration block:
> @@ -123,13 +115,14 @@ static void gic_unmask_irq(unsigned int
>
> static DEFINE_SPINLOCK(gic_lock);
>
> -static int gic_set_affinity(unsigned int irq, const struct cpumask *cpumask)
> +static int gic_set_affinity(struct irq_data *d, const struct cpumask *cpumask,
> + bool force)
> {
> + unsigned int irq = d->irq - _irqbase;
> cpumask_t tmp = CPU_MASK_NONE;
> unsigned long flags;
> int i;
>
> - irq -= _irqbase;
> pr_debug("%s(%d) called\n", __func__, irq);
> cpumask_and(&tmp, cpumask, cpu_online_mask);
> if (cpus_empty(tmp))
WBR, Sergei
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 19/38] misp: irq_cpu: Convert to new irq_chip functions
2011-03-23 21:09 ` [patch 19/38] misp: irq_cpu: " Thomas Gleixner
@ 2011-03-24 12:28 ` Sergei Shtylyov
2011-03-24 14:37 ` Ralf Baechle
0 siblings, 1 reply; 97+ messages in thread
From: Sergei Shtylyov @ 2011-03-24 12:28 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: linux-mips, Ralf Baechle
Hello.
On 24-03-2011 0:09, Thomas Gleixner wrote:
> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
You typoed in the subject: s/misp/mips/. :-)
WBR, Sergei
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 27/38] mips: pnx855: Convert to new irq_chip functions
2011-03-23 21:09 ` [patch 27/38] mips: pnx855: " Thomas Gleixner
@ 2011-03-24 12:32 ` Sergei Shtylyov
2011-03-24 14:45 ` Ralf Baechle
0 siblings, 1 reply; 97+ messages in thread
From: Sergei Shtylyov @ 2011-03-24 12:32 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: linux-mips, Ralf Baechle
On 24-03-2011 0:09, Thomas Gleixner wrote:
> Signed-off-by: Thomas Gleixner<tglx@linutronix.de>
Typo in the subject: s/pnx855/pnx8550/
WBR, Sergei
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 36/38] mips: vr41: Convert to new irq_chip functions
2011-03-23 21:09 ` [patch 36/38] mips: vr41: " Thomas Gleixner
@ 2011-03-24 12:36 ` Sergei Shtylyov
2011-03-24 14:55 ` Ralf Baechle
0 siblings, 1 reply; 97+ messages in thread
From: Sergei Shtylyov @ 2011-03-24 12:36 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: linux-mips, Ralf Baechle
On 24-03-2011 0:09, Thomas Gleixner wrote:
> Signed-off-by: Thomas Gleixner<tglx@linutronix.de>
s/vr41/vr41xx/ in the subject?
WBR, Sergei
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 37/38] mips: vr41xx: Cleanup the direct access to irq_desc[]
2011-03-23 21:09 ` [patch 37/38] mips: vr41xx: Cleanup the direct access to irq_desc[] Thomas Gleixner
@ 2011-03-24 12:44 ` Sergei Shtylyov
2011-03-24 13:00 ` Thomas Gleixner
0 siblings, 1 reply; 97+ messages in thread
From: Sergei Shtylyov @ 2011-03-24 12:44 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: linux-mips, Ralf Baechle
Hello.
On 24.03.2011 0:09, Thomas Gleixner wrote:
> Tons of unused code, but that's Ralfs problem.
> Signed-off-by: Thomas Gleixner<tglx@linutronix.de>
[...]
> Index: linux-mips-next/arch/mips/vr41xx/common/irq.c
> ===================================================================
> --- linux-mips-next.orig/arch/mips/vr41xx/common/irq.c
> +++ linux-mips-next/arch/mips/vr41xx/common/irq.c
> @@ -62,7 +62,6 @@ EXPORT_SYMBOL_GPL(cascade_irq);
> static void irq_dispatch(unsigned int irq)
> {
> irq_cascade_t *cascade;
> - struct irq_desc *desc;
>
> if (irq>= NR_IRQS) {
> atomic_inc(&irq_err_count);
> @@ -71,14 +70,16 @@ static void irq_dispatch(unsigned int ir
>
> cascade = irq_cascade + irq;
> if (cascade->get_irq != NULL) {
> - unsigned int source_irq = irq;
> + struct irq_desc *desc = irq_to_desc(irq);
> + struct irq_data *idata = irq_desc_get_irq_data(desc);
> + struct irq_chip *chip = irq_desc_get_chip(desc);
> int ret;
> - desc = irq_desc + source_irq;
> - if (desc->chip->mask_ack)
> - desc->chip->mask_ack(source_irq);
> +
> + if (chip->irq_mask_ack)
> + chip->irq_mask_ack(idata);
> else {
> - desc->chip->mask(source_irq);
> - desc->chip->ack(source_irq);
> + chip->irq_mask(idata);
> + chip->irq_ack(idata);
> }
> ret = cascade->get_irq(irq);
> irq = ret;
> @@ -86,8 +87,8 @@ static void irq_dispatch(unsigned int ir
> atomic_inc(&irq_err_count);
> else
> irq_dispatch(irq);
> - if (!(desc->status& IRQ_DISABLED)&& desc->chip->unmask)
> - desc->chip->unmask(source_irq);
> + if (!(desc->status& IRQ_DISABLED)&& chip->irq_unmask)
> + chip->irq_unmask(idata);
Hm, doesn't this (I mean the old) code break after the previous patch?
WBR, Sergei
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 10/38] MIPS: JZ4740: GPIO: Use shared irq chip for all gpios
2011-03-24 12:15 ` Sergei Shtylyov
@ 2011-03-24 12:59 ` Thomas Gleixner
2011-03-24 14:28 ` Ralf Baechle
1 sibling, 0 replies; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-24 12:59 UTC (permalink / raw)
To: Sergei Shtylyov; +Cc: linux-mips, Ralf Baechle, Lars-Peter Clausen
On Thu, 24 Mar 2011, Sergei Shtylyov wrote:
> Hello.
>
> On 24-03-2011 0:08, Thomas Gleixner wrote:
>
> > Currently there is one irq_chip per gpio_chip with the only difference
> > being the name. Since the information whether the irq belong to GPIO
> > bank A, B, C or D is not that important rewrite the code to simply use
> > a single irq_chip for all gpio_chips.
>
> > Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
> > Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
>
> If these 2 patches are from Lars, shouldn't there be "From: Lars-Peter
> Clausen <lars@metafoo.de>" line at the start of the patches?
Yep. Mangled that, sorry.
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 37/38] mips: vr41xx: Cleanup the direct access to irq_desc[]
2011-03-24 12:44 ` Sergei Shtylyov
@ 2011-03-24 13:00 ` Thomas Gleixner
2011-03-24 13:56 ` Sergei Shtylyov
0 siblings, 1 reply; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-24 13:00 UTC (permalink / raw)
To: Sergei Shtylyov; +Cc: linux-mips, Ralf Baechle
On Thu, 24 Mar 2011, Sergei Shtylyov wrote:
> > - if (!(desc->status& IRQ_DISABLED)&& desc->chip->unmask)
> > - desc->chip->unmask(source_irq);
> > + if (!(desc->status& IRQ_DISABLED)&& chip->irq_unmask)
> > + chip->irq_unmask(idata);
>
> Hm, doesn't this (I mean the old) code break after the previous patch?
Not as long as the compat functions are active in the core.
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 37/38] mips: vr41xx: Cleanup the direct access to irq_desc[]
2011-03-24 13:00 ` Thomas Gleixner
@ 2011-03-24 13:56 ` Sergei Shtylyov
2011-03-24 14:21 ` Thomas Gleixner
0 siblings, 1 reply; 97+ messages in thread
From: Sergei Shtylyov @ 2011-03-24 13:56 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: linux-mips, Ralf Baechle
Hello.
On 24-03-2011 16:00, Thomas Gleixner wrote:
>>> - if (!(desc->status& IRQ_DISABLED)&& desc->chip->unmask)
>>> - desc->chip->unmask(source_irq);
>>> + if (!(desc->status& IRQ_DISABLED)&& chip->irq_unmask)
>>> + chip->irq_unmask(idata);
>> Hm, doesn't this (I mean the old) code break after the previous patch?
> Not as long as the compat functions are active in the core.
I've looked at compat_*() before replying: it seems that they work vice
versa, i.e. the new functions are emulated by calling the old, and you're
moving away from old to new in the previous patch. Maybe I miss something...
WBR, Sergei
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 01/38] mips; Convert alchemy to new irq chip functions
2011-03-24 8:14 ` Thomas Gleixner
@ 2011-03-24 14:06 ` Ralf Baechle
0 siblings, 0 replies; 97+ messages in thread
From: Ralf Baechle @ 2011-03-24 14:06 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: Manuel Lauss, linux-mips
Thanks, queued for 2.6.39.
Ralf
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 03/38] mips: ath79: Convert to new irq_chip functions
2011-03-23 21:08 ` [patch 03/38] mips: ath79: " Thomas Gleixner
@ 2011-03-24 14:07 ` Ralf Baechle
0 siblings, 0 replies; 97+ messages in thread
From: Ralf Baechle @ 2011-03-24 14:07 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: linux-mips
Thanks, queued for 2.6.39.
Ralf
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 02/38] mips: ar7: Convert to new irq_chip functions
2011-03-23 21:08 ` [patch 02/38] mips: ar7: Convert to new irq_chip functions Thomas Gleixner
@ 2011-03-24 14:09 ` Ralf Baechle
0 siblings, 0 replies; 97+ messages in thread
From: Ralf Baechle @ 2011-03-24 14:09 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: linux-mips
Thanks, queued for 2.6.39.
Ralf
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 04/38] mips: bcm63xx: Convert to new irq_chip functions
2011-03-23 21:08 ` [patch 04/38] mips: bcm63xx: " Thomas Gleixner
@ 2011-03-24 14:10 ` Ralf Baechle
0 siblings, 0 replies; 97+ messages in thread
From: Ralf Baechle @ 2011-03-24 14:10 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: linux-mips
Thanks, queued for 2.6.39.
Ralf
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 05/38] mips: cavium-octeon: Convert to new irq_chip functions
2011-03-23 21:31 ` David Daney
@ 2011-03-24 14:12 ` Ralf Baechle
0 siblings, 0 replies; 97+ messages in thread
From: Ralf Baechle @ 2011-03-24 14:12 UTC (permalink / raw)
To: David Daney; +Cc: Thomas Gleixner, linux-mips
On Wed, Mar 23, 2011 at 02:31:49PM -0700, David Daney wrote:
> Argh!
>
> This definitely collides with my Octeon IRQ rewrite, which does the
> same thing and more. My patch is pending my cpu_{on,off}line chip
> function patch for the IRQ core.
I'll drop this patch and put 38/38 on hold for now then.
Ralf
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 38/38] mips: Select GENERIC_HARDIRQS_NO_DEPRECATED
2011-03-23 21:09 ` [patch 38/38] mips: Select GENERIC_HARDIRQS_NO_DEPRECATED Thomas Gleixner
@ 2011-03-24 14:15 ` Ralf Baechle
0 siblings, 0 replies; 97+ messages in thread
From: Ralf Baechle @ 2011-03-24 14:15 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: linux-mips, David Daney
And as posted a minute ago in my reply to 5/38 I put this one on hold
until David had a chance to sort his Cavium patches out.
Ralf
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 06/38] mips: dec: Convert to new irq_chip functions
2011-03-23 21:08 ` [patch 06/38] mips: dec: " Thomas Gleixner
@ 2011-03-24 14:18 ` Ralf Baechle
2011-03-24 15:21 ` Maciej W. Rozycki
0 siblings, 1 reply; 97+ messages in thread
From: Ralf Baechle @ 2011-03-24 14:18 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: linux-mips, Maciej W. Rozycki
Thanks, queued for 2.6.39.
Ralf
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 07/38] mips: emma: Convert to new irq_chip functions
2011-03-23 21:08 ` [patch 07/38] mips: emma: " Thomas Gleixner
@ 2011-03-24 14:18 ` Ralf Baechle
0 siblings, 0 replies; 97+ messages in thread
From: Ralf Baechle @ 2011-03-24 14:18 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: linux-mips
Queued for 2.6.39. Thanks,
Ralf
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 08/38] mips: jazz: Convert to new irq_chip functions
2011-03-23 21:08 ` [patch 08/38] mips: jazz: " Thomas Gleixner
@ 2011-03-24 14:19 ` Ralf Baechle
0 siblings, 0 replies; 97+ messages in thread
From: Ralf Baechle @ 2011-03-24 14:19 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: linux-mips
Queued for 2.6.39. Thanks,
Ralf
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 09/38] MIPS: JZ4740: Convert to new irq functions
2011-03-23 21:08 ` [patch 09/38] MIPS: JZ4740: Convert to new irq functions Thomas Gleixner
@ 2011-03-24 14:20 ` Ralf Baechle
0 siblings, 0 replies; 97+ messages in thread
From: Ralf Baechle @ 2011-03-24 14:20 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: linux-mips, Lars-Peter Clausen
Queued for 2.6.39. Thanks,
Ralf
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 37/38] mips: vr41xx: Cleanup the direct access to irq_desc[]
2011-03-24 13:56 ` Sergei Shtylyov
@ 2011-03-24 14:21 ` Thomas Gleixner
2011-03-24 15:12 ` Ralf Baechle
0 siblings, 1 reply; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-24 14:21 UTC (permalink / raw)
To: Sergei Shtylyov; +Cc: linux-mips, Ralf Baechle
On Thu, 24 Mar 2011, Sergei Shtylyov wrote:
> Hello.
>
> On 24-03-2011 16:00, Thomas Gleixner wrote:
>
> > > > - if (!(desc->status& IRQ_DISABLED)&& desc->chip->unmask)
> > > > - desc->chip->unmask(source_irq);
> > > > + if (!(desc->status& IRQ_DISABLED)&& chip->irq_unmask)
> > > > + chip->irq_unmask(idata);
>
> > > Hm, doesn't this (I mean the old) code break after the previous patch?
>
> > Not as long as the compat functions are active in the core.
>
> I've looked at compat_*() before replying: it seems that they work vice
> versa, i.e. the new functions are emulated by calling the old, and you're
> moving away from old to new in the previous patch. Maybe I miss something...
Oops. Yes. So the patches should be folded
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 10/38] MIPS: JZ4740: GPIO: Use shared irq chip for all gpios
2011-03-24 12:15 ` Sergei Shtylyov
2011-03-24 12:59 ` Thomas Gleixner
@ 2011-03-24 14:28 ` Ralf Baechle
1 sibling, 0 replies; 97+ messages in thread
From: Ralf Baechle @ 2011-03-24 14:28 UTC (permalink / raw)
To: Sergei Shtylyov; +Cc: Thomas Gleixner, linux-mips, Lars-Peter Clausen
Queued for 2.6.39 with the fixed author attribution.
Thanks,
Ralf
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 11/38] mips: jz4740: Cleanup the mechanical irq_chip conversion
2011-03-23 21:08 ` [patch 11/38] mips: jz4740: Cleanup the mechanical irq_chip conversion Thomas Gleixner
@ 2011-03-24 14:29 ` Ralf Baechle
0 siblings, 0 replies; 97+ messages in thread
From: Ralf Baechle @ 2011-03-24 14:29 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: linux-mips
Queued for 2.6.39 with the fixed author attribution.
Thanks,
Ralf
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 12/38] misp: lasat: Convert to new irq_chip functions
2011-03-23 21:08 ` [patch 12/38] misp: lasat: Convert to new irq_chip functions Thomas Gleixner
@ 2011-03-24 14:31 ` Ralf Baechle
0 siblings, 0 replies; 97+ messages in thread
From: Ralf Baechle @ 2011-03-24 14:31 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: linux-mips
Queued for 2.6.39. Thanks,
Ralf
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 13/38] mips: i8259: Convert to new irq_chip functions
2011-03-23 21:08 ` [patch 13/38] mips: i8259: " Thomas Gleixner
@ 2011-03-24 14:32 ` Ralf Baechle
0 siblings, 0 replies; 97+ messages in thread
From: Ralf Baechle @ 2011-03-24 14:32 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: linux-mips
Queued for 2.6.39. Thanks,
Ralf
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 14/38] mips: gic: Convert to new irq_chip functions
2011-03-24 12:22 ` Sergei Shtylyov
@ 2011-03-24 14:34 ` Ralf Baechle
0 siblings, 0 replies; 97+ messages in thread
From: Ralf Baechle @ 2011-03-24 14:34 UTC (permalink / raw)
To: Sergei Shtylyov; +Cc: Thomas Gleixner, linux-mips
Queued for 2.6.39 with the allmighty blank line added. Thanks,
Ralf
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 15/38] mips: gt641: Convert to new irq_chip functions
2011-03-23 21:08 ` [patch 15/38] mips: gt641: " Thomas Gleixner
@ 2011-03-24 14:34 ` Ralf Baechle
0 siblings, 0 replies; 97+ messages in thread
From: Ralf Baechle @ 2011-03-24 14:34 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: linux-mips
Queued for 2.6.39. Thanks,
Ralf
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 16/38] mips: msc01: Convert to new irq_chip functions
2011-03-23 21:08 ` [patch 16/38] mips: msc01: " Thomas Gleixner
@ 2011-03-24 14:35 ` Ralf Baechle
0 siblings, 0 replies; 97+ messages in thread
From: Ralf Baechle @ 2011-03-24 14:35 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: linux-mips
Queued for 2.6.39. Thanks,
Ralf
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 17/38] mips: rm7000: Convert to new irq_chip functions
2011-03-23 21:09 ` [patch 17/38] mips: rm7000: " Thomas Gleixner
@ 2011-03-24 14:35 ` Ralf Baechle
0 siblings, 0 replies; 97+ messages in thread
From: Ralf Baechle @ 2011-03-24 14:35 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: linux-mips
Queued for 2.6.39. Thanks,
Ralf
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 18/38] mips: rm9000: Convert to new irq_chip functions
2011-03-23 21:09 ` [patch 18/38] mips: rm9000: " Thomas Gleixner
@ 2011-03-24 14:36 ` Ralf Baechle
0 siblings, 0 replies; 97+ messages in thread
From: Ralf Baechle @ 2011-03-24 14:36 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: linux-mips
Queued for 2.6.39. Thanks,
Ralf
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 19/38] misp: irq_cpu: Convert to new irq_chip functions
2011-03-24 12:28 ` Sergei Shtylyov
@ 2011-03-24 14:37 ` Ralf Baechle
0 siblings, 0 replies; 97+ messages in thread
From: Ralf Baechle @ 2011-03-24 14:37 UTC (permalink / raw)
To: Sergei Shtylyov; +Cc: Thomas Gleixner, linux-mips
On Thu, Mar 24, 2011 at 03:28:21PM +0300, Sergei Shtylyov wrote:
>
> You typoed in the subject: s/misp/mips/. :-)
I already fixed that.
Queued for 2.6.39. Thanks,
Ralf
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 20/38] mips: txx9: Convert core to new irq_chip functions
2011-03-23 21:09 ` [patch 20/38] mips: txx9: Convert core " Thomas Gleixner
@ 2011-03-24 14:39 ` Ralf Baechle
0 siblings, 0 replies; 97+ messages in thread
From: Ralf Baechle @ 2011-03-24 14:39 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: linux-mips
Queued for 2.6.39. Thanks,
Ralf
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 21/38] mips: smtc: Use irq_data in smtc_forward_irq()
2011-03-23 21:09 ` [patch 21/38] mips: smtc: Use irq_data in smtc_forward_irq() Thomas Gleixner
@ 2011-03-24 14:40 ` Ralf Baechle
0 siblings, 0 replies; 97+ messages in thread
From: Ralf Baechle @ 2011-03-24 14:40 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: linux-mips, Kevin D. Kissell
Queued for 2.6.39. Thanks,
Ralf
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 22/38] mips: smtc: Cleanup the hook mess and use irq_data
2011-03-23 21:09 ` [patch 22/38] mips: smtc: Cleanup the hook mess and use irq_data Thomas Gleixner
@ 2011-03-24 14:40 ` Ralf Baechle
0 siblings, 0 replies; 97+ messages in thread
From: Ralf Baechle @ 2011-03-24 14:40 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: linux-mips, Kevin D. Kissell
Queued for 2.6.39. Thanks,
Ralf
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 23/38] mips: Use generic show_interrupts()
2011-03-23 21:09 ` [patch 23/38] mips: Use generic show_interrupts() Thomas Gleixner
@ 2011-03-24 14:41 ` Ralf Baechle
0 siblings, 0 replies; 97+ messages in thread
From: Ralf Baechle @ 2011-03-24 14:41 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: linux-mips
Queued for 2.6.39. Thanks,
Ralf
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 24/38] mips: loongson: Convert to new irq_chip functions
2011-03-23 21:09 ` [patch 24/38] mips: loongson: Convert to new irq_chip functions Thomas Gleixner
@ 2011-03-24 14:43 ` Ralf Baechle
0 siblings, 0 replies; 97+ messages in thread
From: Ralf Baechle @ 2011-03-24 14:43 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: linux-mips
Queued for 2.6.39. Thanks,
Ralf
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 25/38] mips: pmc-sierra: Convert to new irq_chip functions
2011-03-23 21:09 ` [patch 25/38] mips: pmc-sierra: " Thomas Gleixner
@ 2011-03-24 14:44 ` Ralf Baechle
0 siblings, 0 replies; 97+ messages in thread
From: Ralf Baechle @ 2011-03-24 14:44 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: linux-mips
Queued for 2.6.39. Thanks,
Ralf
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 26/38] mips: pnx83xx: Convert to new irq_chip functions
2011-03-23 21:09 ` [patch 26/38] mips: pnx83xx: " Thomas Gleixner
@ 2011-03-24 14:44 ` Ralf Baechle
0 siblings, 0 replies; 97+ messages in thread
From: Ralf Baechle @ 2011-03-24 14:44 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: linux-mips
Queued for 2.6.39. Thanks,
Ralf
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 27/38] mips: pnx855: Convert to new irq_chip functions
2011-03-24 12:32 ` Sergei Shtylyov
@ 2011-03-24 14:45 ` Ralf Baechle
0 siblings, 0 replies; 97+ messages in thread
From: Ralf Baechle @ 2011-03-24 14:45 UTC (permalink / raw)
To: Sergei Shtylyov; +Cc: Thomas Gleixner, linux-mips
On Thu, Mar 24, 2011 at 03:32:10PM +0300, Sergei Shtylyov wrote:
> >Signed-off-by: Thomas Gleixner<tglx@linutronix.de>
>
> Typo in the subject: s/pnx855/pnx8550/
Queued for 2.6.39 with the typo fixed. Thanks!
Ralf
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 28/38] mips: powertv: Convert to new irq_chip functions
2011-03-23 21:09 ` [patch 28/38] mips: powertv: " Thomas Gleixner
@ 2011-03-24 14:47 ` Ralf Baechle
0 siblings, 0 replies; 97+ messages in thread
From: Ralf Baechle @ 2011-03-24 14:47 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: linux-mips
Queued for 2.6.39. Thanks,
Ralf
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 30/38] mips: sgi-ip22: Convert to new irq_chip functions
2011-03-23 21:09 ` [patch 30/38] mips: sgi-ip22: " Thomas Gleixner
@ 2011-03-24 14:49 ` Ralf Baechle
0 siblings, 0 replies; 97+ messages in thread
From: Ralf Baechle @ 2011-03-24 14:49 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: linux-mips
Queued for 2.6.39. Thanks,
Ralf
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 31/38] mips: sgi-ip27: Convert to new irq_chip functions
2011-03-23 21:09 ` [patch 31/38] mips: sgi-ip27: " Thomas Gleixner
@ 2011-03-24 14:50 ` Ralf Baechle
0 siblings, 0 replies; 97+ messages in thread
From: Ralf Baechle @ 2011-03-24 14:50 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: linux-mips
Queued for 2.6.39. Thanks,
Ralf
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 32/38] mips: sgi32: Convert to new irq_chip functions
2011-03-23 21:09 ` [patch 32/38] mips: sgi32: " Thomas Gleixner
@ 2011-03-24 14:50 ` Ralf Baechle
0 siblings, 0 replies; 97+ messages in thread
From: Ralf Baechle @ 2011-03-24 14:50 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: linux-mips
Queued for 2.6.39. Thanks,
Ralf
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 33/38] mips: sybyte: Convert to new irq_chip functions
2011-03-23 21:09 ` [patch 33/38] mips: sybyte: " Thomas Gleixner
@ 2011-03-24 14:51 ` Ralf Baechle
0 siblings, 0 replies; 97+ messages in thread
From: Ralf Baechle @ 2011-03-24 14:51 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: linux-mips
Queued for 2.6.39. Thanks,
Ralf
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 34/38] mips: sni: Convert to new irq_chip functions
2011-03-23 21:09 ` [patch 34/38] mips: sni: " Thomas Gleixner
@ 2011-03-24 14:52 ` Ralf Baechle
0 siblings, 0 replies; 97+ messages in thread
From: Ralf Baechle @ 2011-03-24 14:52 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: linux-mips
Queued for 2.6.39. Thanks,
Ralf
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 29/38] mips: rb532: Convert to new irq_chip functions
2011-03-23 21:09 ` [patch 29/38] mips: rb532: " Thomas Gleixner
@ 2011-03-24 14:53 ` Ralf Baechle
0 siblings, 0 replies; 97+ messages in thread
From: Ralf Baechle @ 2011-03-24 14:53 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: linux-mips
Queued for 2.6.39. Thanks,
Ralf
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 35/38] mips: txx9: Convert to new irq_chip functions
2011-03-23 21:09 ` [patch 35/38] mips: txx9: " Thomas Gleixner
@ 2011-03-24 14:53 ` Ralf Baechle
0 siblings, 0 replies; 97+ messages in thread
From: Ralf Baechle @ 2011-03-24 14:53 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: linux-mips
Queued for 2.6.39. Thanks,
Ralf
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 36/38] mips: vr41: Convert to new irq_chip functions
2011-03-24 12:36 ` Sergei Shtylyov
@ 2011-03-24 14:55 ` Ralf Baechle
0 siblings, 0 replies; 97+ messages in thread
From: Ralf Baechle @ 2011-03-24 14:55 UTC (permalink / raw)
To: Sergei Shtylyov; +Cc: Thomas Gleixner, linux-mips
On Thu, Mar 24, 2011 at 03:36:20PM +0300, Sergei Shtylyov wrote:
> >Signed-off-by: Thomas Gleixner<tglx@linutronix.de>
>
> s/vr41/vr41xx/ in the subject?
I already fixed that.
Queued for 2.6.39. Thanks,
Ralf
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 37/38] mips: vr41xx: Cleanup the direct access to irq_desc[]
2011-03-24 14:21 ` Thomas Gleixner
@ 2011-03-24 15:12 ` Ralf Baechle
0 siblings, 0 replies; 97+ messages in thread
From: Ralf Baechle @ 2011-03-24 15:12 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: Sergei Shtylyov, linux-mips
On Thu, Mar 24, 2011 at 03:21:12PM +0100, Thomas Gleixner wrote:
> > > Not as long as the compat functions are active in the core.
> >
> > I've looked at compat_*() before replying: it seems that they work vice
> > versa, i.e. the new functions are emulated by calling the old, and you're
> > moving away from old to new in the previous patch. Maybe I miss something...
>
> Oops. Yes. So the patches should be folded
Okay, folded this patch into 36/38 and queued the result for 3.6.39.
Thanks,
Ralf
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 06/38] mips: dec: Convert to new irq_chip functions
2011-03-24 14:18 ` Ralf Baechle
@ 2011-03-24 15:21 ` Maciej W. Rozycki
2011-03-24 16:16 ` Thomas Gleixner
0 siblings, 1 reply; 97+ messages in thread
From: Maciej W. Rozycki @ 2011-03-24 15:21 UTC (permalink / raw)
To: Ralf Baechle; +Cc: Thomas Gleixner, linux-mips
On Thu, 24 Mar 2011, Ralf Baechle wrote:
> Thanks, queued for 2.6.39.
Ralf, thanks for cc-ing me.
NACK, where's the logic to ack IOASIC DMA IRQs gone? The SIR has to be
written as in clear_ioasic_irq() for the respective DMA transfer to resume
and the interrupt in question be able to retrigger in the future.
The rest is probably OK, but why has the inline hint been removed?
These functions are simple, worth a couple of assembly instructions at
most and used throughout these files, so it's good to ask GCC to inline
them if worthwhile even if -fno-unit-at-a-time has been requested for
whatever reason.
Maciej
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 06/38] mips: dec: Convert to new irq_chip functions
2011-03-24 15:21 ` Maciej W. Rozycki
@ 2011-03-24 16:16 ` Thomas Gleixner
2011-03-24 18:14 ` Maciej W. Rozycki
0 siblings, 1 reply; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-24 16:16 UTC (permalink / raw)
To: Maciej W. Rozycki; +Cc: Ralf Baechle, linux-mips
On Thu, 24 Mar 2011, Maciej W. Rozycki wrote:
> On Thu, 24 Mar 2011, Ralf Baechle wrote:
>
> > Thanks, queued for 2.6.39.
>
> Ralf, thanks for cc-ing me.
>
> NACK, where's the logic to ack IOASIC DMA IRQs gone? The SIR has to be
> written as in clear_ioasic_irq() for the respective DMA transfer to resume
> and the interrupt in question be able to retrigger in the future.
Errm.
#define ack_ioasic_dma_irq ack_ioasic_irq
.name = "IO-ASIC-DMA",
.ack = ack_ioasic_dma_irq
So the .ack pointer is filled with ack_ioasic_irq, right ?
So I did:
-#define ack_ioasic_dma_irq ack_ioasic_irq
+ .irq_ack = ack_ioasic_irq,
Pretty identical as far as I can tell. The define is rather pointless,
isn't it ?
> The rest is probably OK, but why has the inline hint been removed?
> These functions are simple, worth a couple of assembly instructions at
> most and used throughout these files, so it's good to ask GCC to inline
> them if worthwhile even if -fno-unit-at-a-time has been requested for
> whatever reason.
The only use of these functions is in the chip pointers, so the inline
is pointless. But I really dont care.
Thanks,
tglx
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 06/38] mips: dec: Convert to new irq_chip functions
2011-03-24 16:16 ` Thomas Gleixner
@ 2011-03-24 18:14 ` Maciej W. Rozycki
2011-03-24 19:29 ` Thomas Gleixner
0 siblings, 1 reply; 97+ messages in thread
From: Maciej W. Rozycki @ 2011-03-24 18:14 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: Ralf Baechle, linux-mips
On Thu, 24 Mar 2011, Thomas Gleixner wrote:
> On Thu, 24 Mar 2011, Maciej W. Rozycki wrote:
>
> > On Thu, 24 Mar 2011, Ralf Baechle wrote:
> >
> > > Thanks, queued for 2.6.39.
> >
> > Ralf, thanks for cc-ing me.
> >
> > NACK, where's the logic to ack IOASIC DMA IRQs gone? The SIR has to be
> > written as in clear_ioasic_irq() for the respective DMA transfer to resume
> > and the interrupt in question be able to retrigger in the future.
>
> Errm.
>
> #define ack_ioasic_dma_irq ack_ioasic_irq
>
> .name = "IO-ASIC-DMA",
> .ack = ack_ioasic_dma_irq
>
> So the .ack pointer is filled with ack_ioasic_irq, right ?
The ack used to be made in clear_ioasic_irq(), that was called from
end_ioasic_dma_irq(), that was used as the .end handler. This semantics
has to be preserved or hardware won't work anymore as expected. This is a
regression.
> So I did:
>
> -#define ack_ioasic_dma_irq ack_ioasic_irq
>
> + .irq_ack = ack_ioasic_irq,
>
> Pretty identical as far as I can tell. The define is rather pointless,
> isn't it ?
Yes, but it's not the .ack handler I'm concerned about, but the hardware
ack that has to be made once higher-level processing has finished.
> > The rest is probably OK, but why has the inline hint been removed?
> > These functions are simple, worth a couple of assembly instructions at
> > most and used throughout these files, so it's good to ask GCC to inline
> > them if worthwhile even if -fno-unit-at-a-time has been requested for
> > whatever reason.
>
> The only use of these functions is in the chip pointers, so the inline
> is pointless. But I really dont care.
mask_ioasic_irq() is called from ack_ioasic_irq() for one.
Maciej
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 06/38] mips: dec: Convert to new irq_chip functions
2011-03-24 18:14 ` Maciej W. Rozycki
@ 2011-03-24 19:29 ` Thomas Gleixner
2011-03-25 0:33 ` Maciej W. Rozycki
0 siblings, 1 reply; 97+ messages in thread
From: Thomas Gleixner @ 2011-03-24 19:29 UTC (permalink / raw)
To: Maciej W. Rozycki; +Cc: Ralf Baechle, linux-mips
On Thu, 24 Mar 2011, Maciej W. Rozycki wrote:
> On Thu, 24 Mar 2011, Thomas Gleixner wrote:
> > So the .ack pointer is filled with ack_ioasic_irq, right ?
>
> The ack used to be made in clear_ioasic_irq(), that was called from
> end_ioasic_dma_irq(), that was used as the .end handler. This semantics
> has to be preserved or hardware won't work anymore as expected. This is a
> regression.
Then that code was broken before. Since MIPS was converted to the flow
handlers nothing ever called .end(). I seem to miss something.
Thanks,
tglx
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 06/38] mips: dec: Convert to new irq_chip functions
2011-03-24 19:29 ` Thomas Gleixner
@ 2011-03-25 0:33 ` Maciej W. Rozycki
2011-03-29 12:56 ` Atsushi Nemoto
0 siblings, 1 reply; 97+ messages in thread
From: Maciej W. Rozycki @ 2011-03-25 0:33 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: Ralf Baechle, linux-mips
On Thu, 24 Mar 2011, Thomas Gleixner wrote:
> > The ack used to be made in clear_ioasic_irq(), that was called from
> > end_ioasic_dma_irq(), that was used as the .end handler. This semantics
> > has to be preserved or hardware won't work anymore as expected. This is a
> > regression.
>
> Then that code was broken before. Since MIPS was converted to the flow
> handlers nothing ever called .end(). I seem to miss something.
Hmm, me too then. Whoever did the conversion failed to adjust this piece
or at least notify responsible people that such a change is needed -- if
.end was going away, then all users should have been checked and the
respective maintainers queried. And given these DMA interrupts are really
only in regular use by Linux with the onboard SCSI driver, chances are the
breakage could be left unnoticed for a long time (I tend to run these
systems NFS-rooted for once).
Note these effectively are edge-triggered interrupts and may only be
acked in hardware once all higher-level processing has been done as
otherwise a DMA transfer will resume prematurely and all the hell will
break loose. I don't particularly like this double purpose these bits
have, but there you go -- I can understand the hw engineers saw no reason
to waste silicon for separate interrupt-ack and DMA-inhibit bits.
I'll see what I can do about it, but I need a pointer to the offending
change -- Ralf or anyone, can you provide me with one?
Maciej
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 06/38] mips: dec: Convert to new irq_chip functions
2011-03-25 0:33 ` Maciej W. Rozycki
@ 2011-03-29 12:56 ` Atsushi Nemoto
2011-03-29 13:20 ` Maciej W. Rozycki
0 siblings, 1 reply; 97+ messages in thread
From: Atsushi Nemoto @ 2011-03-29 12:56 UTC (permalink / raw)
To: macro; +Cc: tglx, ralf, linux-mips
On Fri, 25 Mar 2011 00:33:22 +0000 (GMT), "Maciej W. Rozycki" <macro@linux-mips.org> wrote:
> > Then that code was broken before. Since MIPS was converted to the flow
> > handlers nothing ever called .end(). I seem to miss something.
...
> I'll see what I can do about it, but I need a pointer to the offending
> change -- Ralf or anyone, can you provide me with one?
JFYI from my old memory...
On 2006, I once converted ioasic_irq and ioasic_dma_irq to the flow
handlers, and then revert ioasic_dma_irq to old style.
http://www.linux-mips.org/cgi-bin/mesg.cgi?a=linux-mips&i=20061202.000803.05599975.anemo%40mba.ocn.ne.jp
Then, Franck Bui-Huu added GENERIC_HARDIRQS_NO__DO_IRQ to some
platforms but not DECstation.
And then, on 2009, Ralf enabled GENERIC_HARDIRQS_NO__DO_IRQ for all
platforms.
http://www.linux-mips.org/cgi-bin/mesg.cgi?a=linux-mips&i=20090311112806.GA24541%40linux-mips.org
I suppose something was lost at this conversion, but not sure.
---
Atsushi Nemoto
^ permalink raw reply [flat|nested] 97+ messages in thread
* Re: [patch 06/38] mips: dec: Convert to new irq_chip functions
2011-03-29 12:56 ` Atsushi Nemoto
@ 2011-03-29 13:20 ` Maciej W. Rozycki
0 siblings, 0 replies; 97+ messages in thread
From: Maciej W. Rozycki @ 2011-03-29 13:20 UTC (permalink / raw)
To: Atsushi Nemoto; +Cc: tglx, ralf, linux-mips
On Tue, 29 Mar 2011, Atsushi Nemoto wrote:
> > > Then that code was broken before. Since MIPS was converted to the flow
> > > handlers nothing ever called .end(). I seem to miss something.
> ...
> > I'll see what I can do about it, but I need a pointer to the offending
> > change -- Ralf or anyone, can you provide me with one?
>
> JFYI from my old memory...
>
> On 2006, I once converted ioasic_irq and ioasic_dma_irq to the flow
> handlers, and then revert ioasic_dma_irq to old style.
>
> http://www.linux-mips.org/cgi-bin/mesg.cgi?a=linux-mips&i=20061202.000803.05599975.anemo%40mba.ocn.ne.jp
>
> Then, Franck Bui-Huu added GENERIC_HARDIRQS_NO__DO_IRQ to some
> platforms but not DECstation.
>
> And then, on 2009, Ralf enabled GENERIC_HARDIRQS_NO__DO_IRQ for all
> platforms.
>
> http://www.linux-mips.org/cgi-bin/mesg.cgi?a=linux-mips&i=20090311112806.GA24541%40linux-mips.org
>
> I suppose something was lost at this conversion, but not sure.
OK, thanks.
I've had a look into the issue and my understanding at the moment is the
IOASIC DMA interrupts will need a dedicated handler along the lines of the
old approach, i.e. mask at the beginning (because the output is
level-triggered) to let other interrupts through, call the high-level
handler, and issue an EOI and unmask at the end (some of these interrupts
are informational only so the EOI could well be issued at the beginning,
but there's no gain from doing so that would justify the extra
diversification). I've noticed some other (non-MIPS) platforms use their
own handlers too, so it's not the only one the new generic handlers do not
fit, sigh... I'll see what I can do about this problem.
OTOH, the remaining ordinary IOASIC interrupts are just plain old
level-triggered pass-through signals with no actions beyond mask/unmask
required/available at the interrupt controller level, so the
handle_level_irq() is exactly what they need.
As I say, except from our driver for the onboard SCSI adapter (that is
pending a revive), we only use these DMA interrupts for exceptional
conditions, such as a memory error during a DMA transaction, so they
hardly ever happen and any run-time breakage could have survived for long.
Maciej
^ permalink raw reply [flat|nested] 97+ messages in thread
end of thread, other threads:[~2011-03-29 13:20 UTC | newest]
Thread overview: 97+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-03-23 21:08 [patch 00/38] mips: irq chip overhaul and cleanup Thomas Gleixner
2011-03-23 21:08 ` [patch 01/38] mips; Convert alchemy to new irq chip functions Thomas Gleixner
2011-03-24 7:41 ` Manuel Lauss
2011-03-24 8:14 ` Thomas Gleixner
2011-03-24 14:06 ` Ralf Baechle
2011-03-23 21:08 ` [patch 02/38] mips: ar7: Convert to new irq_chip functions Thomas Gleixner
2011-03-24 14:09 ` Ralf Baechle
2011-03-23 21:08 ` [patch 03/38] mips: ath79: " Thomas Gleixner
2011-03-24 14:07 ` Ralf Baechle
2011-03-23 21:08 ` [patch 04/38] mips: bcm63xx: " Thomas Gleixner
2011-03-24 14:10 ` Ralf Baechle
2011-03-23 21:08 ` [patch 05/38] mips: cavium-octeon: " Thomas Gleixner
2011-03-23 21:31 ` David Daney
2011-03-24 14:12 ` Ralf Baechle
2011-03-23 21:08 ` [patch 06/38] mips: dec: " Thomas Gleixner
2011-03-24 14:18 ` Ralf Baechle
2011-03-24 15:21 ` Maciej W. Rozycki
2011-03-24 16:16 ` Thomas Gleixner
2011-03-24 18:14 ` Maciej W. Rozycki
2011-03-24 19:29 ` Thomas Gleixner
2011-03-25 0:33 ` Maciej W. Rozycki
2011-03-29 12:56 ` Atsushi Nemoto
2011-03-29 13:20 ` Maciej W. Rozycki
2011-03-23 21:08 ` [patch 07/38] mips: emma: " Thomas Gleixner
2011-03-24 14:18 ` Ralf Baechle
2011-03-23 21:08 ` [patch 08/38] mips: jazz: " Thomas Gleixner
2011-03-24 14:19 ` Ralf Baechle
2011-03-23 21:08 ` [patch 09/38] MIPS: JZ4740: Convert to new irq functions Thomas Gleixner
2011-03-24 14:20 ` Ralf Baechle
2011-03-23 21:08 ` [patch 10/38] MIPS: JZ4740: GPIO: Use shared irq chip for all gpios Thomas Gleixner
2011-03-24 12:15 ` Sergei Shtylyov
2011-03-24 12:59 ` Thomas Gleixner
2011-03-24 14:28 ` Ralf Baechle
2011-03-23 21:08 ` [patch 11/38] mips: jz4740: Cleanup the mechanical irq_chip conversion Thomas Gleixner
2011-03-24 14:29 ` Ralf Baechle
2011-03-23 21:08 ` [patch 12/38] misp: lasat: Convert to new irq_chip functions Thomas Gleixner
2011-03-24 14:31 ` Ralf Baechle
2011-03-23 21:08 ` [patch 13/38] mips: i8259: " Thomas Gleixner
2011-03-24 14:32 ` Ralf Baechle
2011-03-23 21:08 ` [patch 14/38] mips: gic: " Thomas Gleixner
2011-03-24 12:22 ` Sergei Shtylyov
2011-03-24 14:34 ` Ralf Baechle
2011-03-23 21:08 ` [patch 16/38] mips: msc01: " Thomas Gleixner
2011-03-24 14:35 ` Ralf Baechle
2011-03-23 21:08 ` [patch 15/38] mips: gt641: " Thomas Gleixner
2011-03-24 14:34 ` Ralf Baechle
2011-03-23 21:09 ` [patch 17/38] mips: rm7000: " Thomas Gleixner
2011-03-24 14:35 ` Ralf Baechle
2011-03-23 21:09 ` [patch 18/38] mips: rm9000: " Thomas Gleixner
2011-03-24 14:36 ` Ralf Baechle
2011-03-23 21:09 ` [patch 19/38] misp: irq_cpu: " Thomas Gleixner
2011-03-24 12:28 ` Sergei Shtylyov
2011-03-24 14:37 ` Ralf Baechle
2011-03-23 21:09 ` [patch 20/38] mips: txx9: Convert core " Thomas Gleixner
2011-03-24 14:39 ` Ralf Baechle
2011-03-23 21:09 ` [patch 21/38] mips: smtc: Use irq_data in smtc_forward_irq() Thomas Gleixner
2011-03-24 14:40 ` Ralf Baechle
2011-03-23 21:09 ` [patch 22/38] mips: smtc: Cleanup the hook mess and use irq_data Thomas Gleixner
2011-03-24 14:40 ` Ralf Baechle
2011-03-23 21:09 ` [patch 23/38] mips: Use generic show_interrupts() Thomas Gleixner
2011-03-24 14:41 ` Ralf Baechle
2011-03-23 21:09 ` [patch 24/38] mips: loongson: Convert to new irq_chip functions Thomas Gleixner
2011-03-24 14:43 ` Ralf Baechle
2011-03-23 21:09 ` [patch 25/38] mips: pmc-sierra: " Thomas Gleixner
2011-03-24 14:44 ` Ralf Baechle
2011-03-23 21:09 ` [patch 26/38] mips: pnx83xx: " Thomas Gleixner
2011-03-24 14:44 ` Ralf Baechle
2011-03-23 21:09 ` [patch 28/38] mips: powertv: " Thomas Gleixner
2011-03-24 14:47 ` Ralf Baechle
2011-03-23 21:09 ` [patch 27/38] mips: pnx855: " Thomas Gleixner
2011-03-24 12:32 ` Sergei Shtylyov
2011-03-24 14:45 ` Ralf Baechle
2011-03-23 21:09 ` [patch 29/38] mips: rb532: " Thomas Gleixner
2011-03-24 14:53 ` Ralf Baechle
2011-03-23 21:09 ` [patch 30/38] mips: sgi-ip22: " Thomas Gleixner
2011-03-24 14:49 ` Ralf Baechle
2011-03-23 21:09 ` [patch 31/38] mips: sgi-ip27: " Thomas Gleixner
2011-03-24 14:50 ` Ralf Baechle
2011-03-23 21:09 ` [patch 32/38] mips: sgi32: " Thomas Gleixner
2011-03-24 14:50 ` Ralf Baechle
2011-03-23 21:09 ` [patch 33/38] mips: sybyte: " Thomas Gleixner
2011-03-24 14:51 ` Ralf Baechle
2011-03-23 21:09 ` [patch 34/38] mips: sni: " Thomas Gleixner
2011-03-24 14:52 ` Ralf Baechle
2011-03-23 21:09 ` [patch 35/38] mips: txx9: " Thomas Gleixner
2011-03-24 14:53 ` Ralf Baechle
2011-03-23 21:09 ` [patch 36/38] mips: vr41: " Thomas Gleixner
2011-03-24 12:36 ` Sergei Shtylyov
2011-03-24 14:55 ` Ralf Baechle
2011-03-23 21:09 ` [patch 37/38] mips: vr41xx: Cleanup the direct access to irq_desc[] Thomas Gleixner
2011-03-24 12:44 ` Sergei Shtylyov
2011-03-24 13:00 ` Thomas Gleixner
2011-03-24 13:56 ` Sergei Shtylyov
2011-03-24 14:21 ` Thomas Gleixner
2011-03-24 15:12 ` Ralf Baechle
2011-03-23 21:09 ` [patch 38/38] mips: Select GENERIC_HARDIRQS_NO_DEPRECATED Thomas Gleixner
2011-03-24 14:15 ` Ralf Baechle
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.