aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2014-04-01 14:22:57 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2014-04-01 14:22:57 -0400
commit683b6c6f82a60fabf47012581c2cfbf1b037ab95 (patch)
tree6a3fdf26b98aebf4b0b9eca8d242ba89e0565d8b /arch/arm
parent1ead65812486cda65093683a99b8907a7242fa93 (diff)
parent1b422ecd27866985b9f35d0d2b5ae6e9122dd4c0 (diff)
Merge branch 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull irq code updates from Thomas Gleixner: "The irq department proudly presents: - Another tree wide sweep of irq infrastructure abuse. Clear winner of the trainwreck engineering contest was: #include "../../../kernel/irq/settings.h" - Tree wide update of irq_set_affinity() callbacks which miss a cpu online check when picking a single cpu out of the affinity mask. - Tree wide consolidation of interrupt statistics. - Updates to the threaded interrupt infrastructure to allow explicit wakeup of the interrupt thread and a variant of synchronize_irq() which synchronizes only the hard interrupt handler. Both are needed to replace the homebrewn thread handling in the mmc/sdhci code. - New irq chip callbacks to allow proper support for GPIO based irqs. The GPIO based interrupts need to request/release GPIO resources from request/free_irq. - A few new ARM interrupt chips. No revolutionary new hardware, just differently wreckaged variations of the scheme. - Small improvments, cleanups and updates all over the place" I was hoping that that trainwreck engineering contest was a April Fools' joke. But no. * 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (68 commits) irqchip: sun7i/sun6i: Disable NMI before registering the handler ARM: sun7i/sun6i: dts: Fix IRQ number for sun6i NMI controller ARM: sun7i/sun6i: irqchip: Update the documentation ARM: sun7i/sun6i: dts: Add NMI irqchip support ARM: sun7i/sun6i: irqchip: Add irqchip driver for NMI controller genirq: Export symbol no_action() arm: omap: Fix typo in ams-delta-fiq.c m68k: atari: Fix the last kernel_stat.h fallout irqchip: sun4i: Simplify sun4i_irq_ack irqchip: sun4i: Use handle_fasteoi_irq for all interrupts genirq: procfs: Make smp_affinity values go+r softirq: Add linux/irq.h to make it compile again m68k: amiga: Add linux/irq.h to make it compile again irqchip: sun4i: Don't ack IRQs > 0, fix acking of IRQ 0 irqchip: sun4i: Fix a comment about mask register initialization irqchip: sun4i: Fix irq 0 not working genirq: Add a new IRQCHIP_EOI_THREADED flag genirq: Document IRQCHIP_ONESHOT_SAFE flag ARM: sunxi: dt: Convert to the new irq controller compatibles irqchip: sunxi: Change compatibles ...
Diffstat (limited to 'arch/arm')
-rw-r--r--arch/arm/boot/dts/sun4i-a10.dtsi2
-rw-r--r--arch/arm/boot/dts/sun5i-a10s.dtsi2
-rw-r--r--arch/arm/boot/dts/sun5i-a13.dtsi2
-rw-r--r--arch/arm/boot/dts/sun6i-a31.dtsi8
-rw-r--r--arch/arm/boot/dts/sun7i-a20.dtsi8
-rw-r--r--arch/arm/mach-imx/pm-imx6q.c7
-rw-r--r--arch/arm/mach-mmp/pm-mmp2.c16
-rw-r--r--arch/arm/mach-mmp/pm-pxa910.c20
-rw-r--r--arch/arm/mach-omap1/ams-delta-fiq.c7
9 files changed, 29 insertions, 43 deletions
diff --git a/arch/arm/boot/dts/sun4i-a10.dtsi b/arch/arm/boot/dts/sun4i-a10.dtsi
index 2ce61228d5f9..249b6e0ba737 100644
--- a/arch/arm/boot/dts/sun4i-a10.dtsi
+++ b/arch/arm/boot/dts/sun4i-a10.dtsi
@@ -331,7 +331,7 @@
331 }; 331 };
332 332
333 intc: interrupt-controller@01c20400 { 333 intc: interrupt-controller@01c20400 {
334 compatible = "allwinner,sun4i-ic"; 334 compatible = "allwinner,sun4i-a10-ic";
335 reg = <0x01c20400 0x400>; 335 reg = <0x01c20400 0x400>;
336 interrupt-controller; 336 interrupt-controller;
337 #interrupt-cells = <1>; 337 #interrupt-cells = <1>;
diff --git a/arch/arm/boot/dts/sun5i-a10s.dtsi b/arch/arm/boot/dts/sun5i-a10s.dtsi
index 29dd32d8e77e..ddb25452d78e 100644
--- a/arch/arm/boot/dts/sun5i-a10s.dtsi
+++ b/arch/arm/boot/dts/sun5i-a10s.dtsi
@@ -294,7 +294,7 @@
294 }; 294 };
295 295
296 intc: interrupt-controller@01c20400 { 296 intc: interrupt-controller@01c20400 {
297 compatible = "allwinner,sun4i-ic"; 297 compatible = "allwinner,sun4i-a10-ic";
298 reg = <0x01c20400 0x400>; 298 reg = <0x01c20400 0x400>;
299 interrupt-controller; 299 interrupt-controller;
300 #interrupt-cells = <1>; 300 #interrupt-cells = <1>;
diff --git a/arch/arm/boot/dts/sun5i-a13.dtsi b/arch/arm/boot/dts/sun5i-a13.dtsi
index e63bb383b43d..b373c74a9b3d 100644
--- a/arch/arm/boot/dts/sun5i-a13.dtsi
+++ b/arch/arm/boot/dts/sun5i-a13.dtsi
@@ -275,7 +275,7 @@
275 ranges; 275 ranges;
276 276
277 intc: interrupt-controller@01c20400 { 277 intc: interrupt-controller@01c20400 {
278 compatible = "allwinner,sun4i-ic"; 278 compatible = "allwinner,sun4i-a10-ic";
279 reg = <0x01c20400 0x400>; 279 reg = <0x01c20400 0x400>;
280 interrupt-controller; 280 interrupt-controller;
281 #interrupt-cells = <1>; 281 #interrupt-cells = <1>;
diff --git a/arch/arm/boot/dts/sun6i-a31.dtsi b/arch/arm/boot/dts/sun6i-a31.dtsi
index 996fff54c8a2..38d43febda4c 100644
--- a/arch/arm/boot/dts/sun6i-a31.dtsi
+++ b/arch/arm/boot/dts/sun6i-a31.dtsi
@@ -190,6 +190,14 @@
190 #size-cells = <1>; 190 #size-cells = <1>;
191 ranges; 191 ranges;
192 192
193 nmi_intc: interrupt-controller@01f00c0c {
194 compatible = "allwinner,sun6i-a31-sc-nmi";
195 interrupt-controller;
196 #interrupt-cells = <2>;
197 reg = <0x01f00c0c 0x38>;
198 interrupts = <0 32 4>;
199 };
200
193 pio: pinctrl@01c20800 { 201 pio: pinctrl@01c20800 {
194 compatible = "allwinner,sun6i-a31-pinctrl"; 202 compatible = "allwinner,sun6i-a31-pinctrl";
195 reg = <0x01c20800 0x400>; 203 reg = <0x01c20800 0x400>;
diff --git a/arch/arm/boot/dts/sun7i-a20.dtsi b/arch/arm/boot/dts/sun7i-a20.dtsi
index dddc8ac2d522..cadcf2f9881d 100644
--- a/arch/arm/boot/dts/sun7i-a20.dtsi
+++ b/arch/arm/boot/dts/sun7i-a20.dtsi
@@ -339,6 +339,14 @@
339 #size-cells = <1>; 339 #size-cells = <1>;
340 ranges; 340 ranges;
341 341
342 nmi_intc: interrupt-controller@01c00030 {
343 compatible = "allwinner,sun7i-a20-sc-nmi";
344 interrupt-controller;
345 #interrupt-cells = <2>;
346 reg = <0x01c00030 0x0c>;
347 interrupts = <0 0 4>;
348 };
349
342 emac: ethernet@01c0b000 { 350 emac: ethernet@01c0b000 {
343 compatible = "allwinner,sun4i-a10-emac"; 351 compatible = "allwinner,sun4i-a10-emac";
344 reg = <0x01c0b000 0x1000>; 352 reg = <0x01c0b000 0x1000>;
diff --git a/arch/arm/mach-imx/pm-imx6q.c b/arch/arm/mach-imx/pm-imx6q.c
index 7a9b98589db7..29e3fe6a6669 100644
--- a/arch/arm/mach-imx/pm-imx6q.c
+++ b/arch/arm/mach-imx/pm-imx6q.c
@@ -120,7 +120,7 @@ static void imx6q_enable_wb(bool enable)
120 120
121int imx6q_set_lpm(enum mxc_cpu_pwr_mode mode) 121int imx6q_set_lpm(enum mxc_cpu_pwr_mode mode)
122{ 122{
123 struct irq_desc *iomuxc_irq_desc; 123 struct irq_data *iomuxc_irq_data = irq_get_irq_data(32);
124 u32 val = readl_relaxed(ccm_base + CLPCR); 124 u32 val = readl_relaxed(ccm_base + CLPCR);
125 125
126 val &= ~BM_CLPCR_LPM; 126 val &= ~BM_CLPCR_LPM;
@@ -167,10 +167,9 @@ int imx6q_set_lpm(enum mxc_cpu_pwr_mode mode)
167 * 3) Software should mask IRQ #32 right after CCM Low-Power mode 167 * 3) Software should mask IRQ #32 right after CCM Low-Power mode
168 * is set (set bits 0-1 of CCM_CLPCR). 168 * is set (set bits 0-1 of CCM_CLPCR).
169 */ 169 */
170 iomuxc_irq_desc = irq_to_desc(32); 170 imx_gpc_irq_unmask(iomuxc_irq_data);
171 imx_gpc_irq_unmask(&iomuxc_irq_desc->irq_data);
172 writel_relaxed(val, ccm_base + CLPCR); 171 writel_relaxed(val, ccm_base + CLPCR);
173 imx_gpc_irq_mask(&iomuxc_irq_desc->irq_data); 172 imx_gpc_irq_mask(iomuxc_irq_data);
174 173
175 return 0; 174 return 0;
176} 175}
diff --git a/arch/arm/mach-mmp/pm-mmp2.c b/arch/arm/mach-mmp/pm-mmp2.c
index 461a191a32d2..43b1a516957f 100644
--- a/arch/arm/mach-mmp/pm-mmp2.c
+++ b/arch/arm/mach-mmp/pm-mmp2.c
@@ -27,22 +27,8 @@
27 27
28int mmp2_set_wake(struct irq_data *d, unsigned int on) 28int mmp2_set_wake(struct irq_data *d, unsigned int on)
29{ 29{
30 int irq = d->irq;
31 struct irq_desc *desc = irq_to_desc(irq);
32 unsigned long data = 0; 30 unsigned long data = 0;
33 31 int irq = d->irq;
34 if (unlikely(irq >= nr_irqs)) {
35 pr_err("IRQ nubmers are out of boundary!\n");
36 return -EINVAL;
37 }
38
39 if (on) {
40 if (desc->action)
41 desc->action->flags |= IRQF_NO_SUSPEND;
42 } else {
43 if (desc->action)
44 desc->action->flags &= ~IRQF_NO_SUSPEND;
45 }
46 32
47 /* enable wakeup sources */ 33 /* enable wakeup sources */
48 switch (irq) { 34 switch (irq) {
diff --git a/arch/arm/mach-mmp/pm-pxa910.c b/arch/arm/mach-mmp/pm-pxa910.c
index 48981ca801a5..04c9daf9f8d7 100644
--- a/arch/arm/mach-mmp/pm-pxa910.c
+++ b/arch/arm/mach-mmp/pm-pxa910.c
@@ -27,22 +27,8 @@
27 27
28int pxa910_set_wake(struct irq_data *data, unsigned int on) 28int pxa910_set_wake(struct irq_data *data, unsigned int on)
29{ 29{
30 int irq = data->irq;
31 struct irq_desc *desc = irq_to_desc(data->irq);
32 uint32_t awucrm = 0, apcr = 0; 30 uint32_t awucrm = 0, apcr = 0;
33 31 int irq = data->irq;
34 if (unlikely(irq >= nr_irqs)) {
35 pr_err("IRQ nubmers are out of boundary!\n");
36 return -EINVAL;
37 }
38
39 if (on) {
40 if (desc->action)
41 desc->action->flags |= IRQF_NO_SUSPEND;
42 } else {
43 if (desc->action)
44 desc->action->flags &= ~IRQF_NO_SUSPEND;
45 }
46 32
47 /* setting wakeup sources */ 33 /* setting wakeup sources */
48 switch (irq) { 34 switch (irq) {
@@ -115,9 +101,11 @@ int pxa910_set_wake(struct irq_data *data, unsigned int on)
115 if (irq >= IRQ_GPIO_START && irq < IRQ_BOARD_START) { 101 if (irq >= IRQ_GPIO_START && irq < IRQ_BOARD_START) {
116 awucrm = MPMU_AWUCRM_WAKEUP(2); 102 awucrm = MPMU_AWUCRM_WAKEUP(2);
117 apcr |= MPMU_APCR_SLPWP2; 103 apcr |= MPMU_APCR_SLPWP2;
118 } else 104 } else {
105 /* FIXME: This should return a proper error code ! */
119 printk(KERN_ERR "Error: no defined wake up source irq: %d\n", 106 printk(KERN_ERR "Error: no defined wake up source irq: %d\n",
120 irq); 107 irq);
108 }
121 } 109 }
122 110
123 if (on) { 111 if (on) {
diff --git a/arch/arm/mach-omap1/ams-delta-fiq.c b/arch/arm/mach-omap1/ams-delta-fiq.c
index f12a12af3523..d1f12095f315 100644
--- a/arch/arm/mach-omap1/ams-delta-fiq.c
+++ b/arch/arm/mach-omap1/ams-delta-fiq.c
@@ -44,13 +44,10 @@ static unsigned int irq_counter[16];
44 44
45static irqreturn_t deferred_fiq(int irq, void *dev_id) 45static irqreturn_t deferred_fiq(int irq, void *dev_id)
46{ 46{
47 struct irq_desc *irq_desc;
48 struct irq_chip *irq_chip = NULL;
49 int gpio, irq_num, fiq_count; 47 int gpio, irq_num, fiq_count;
48 struct irq_chip *irq_chip;
50 49
51 irq_desc = irq_to_desc(gpio_to_irq(AMS_DELTA_GPIO_PIN_KEYBRD_CLK)); 50 irq_chip = irq_get_chip(gpio_to_irq(AMS_DELTA_GPIO_PIN_KEYBRD_CLK));
52 if (irq_desc)
53 irq_chip = irq_desc->irq_data.chip;
54 51
55 /* 52 /*
56 * For each handled GPIO interrupt, keep calling its interrupt handler 53 * For each handled GPIO interrupt, keep calling its interrupt handler