aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2015-02-16 18:20:40 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2015-02-16 18:20:40 -0500
commit3c6847eaa3da59f3bbe15eb3004ddab41ae6a201 (patch)
tree9a33b100efeaa63fab23662eb0db42385b8d1f10
parent37507717de51a8332a34ee07fd88700be88df5bf (diff)
parent4fe7ffb7e17ca6ad9173b8de35f260c9c8fc2f79 (diff)
Merge branch 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull irqchip updates from Ingo Molnar: "Various irqchip driver updates, plus a genirq core update that allows the initial spreading of irqs amonst CPUs without having to do it from user-space" * 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: genirq: Fix null pointer reference in irq_set_affinity_hint() irqchip: gic: Allow interrupt level to be set for PPIs irqchip: mips-gic: Handle pending interrupts once in __gic_irq_dispatch() irqchip: Conexant CX92755 interrupts controller driver irqchip: Devicetree: document Conexant Digicolor irq binding irqchip: omap-intc: Remove unused legacy interface for omap2 irqchip: omap-intc: Fix support for dm814 and dm816 irqchip: mtk-sysirq: Get irq number from register resource size irqchip: renesas-intc-irqpin: r8a7779 IRLM setup support genirq: Set initial affinity in irq_set_affinity_hint()
-rw-r--r--Documentation/devicetree/bindings/arm/gic.txt8
-rw-r--r--Documentation/devicetree/bindings/interrupt-controller/digicolor-ic.txt21
-rw-r--r--Documentation/devicetree/bindings/interrupt-controller/renesas,intc-irqpin.txt5
-rw-r--r--Documentation/devicetree/bindings/interrupt-controller/ti,omap-intc-irq.txt28
-rw-r--r--drivers/irqchip/Makefile1
-rw-r--r--drivers/irqchip/irq-digicolor.c120
-rw-r--r--drivers/irqchip/irq-gic-common.c18
-rw-r--r--drivers/irqchip/irq-gic-common.h2
-rw-r--r--drivers/irqchip/irq-gic-v3.c8
-rw-r--r--drivers/irqchip/irq-gic.c9
-rw-r--r--drivers/irqchip/irq-hip04.c9
-rw-r--r--drivers/irqchip/irq-mips-gic.c44
-rw-r--r--drivers/irqchip/irq-mtk-sysirq.c18
-rw-r--r--drivers/irqchip/irq-omap-intc.c22
-rw-r--r--drivers/irqchip/irq-renesas-intc-irqpin.c50
-rw-r--r--include/linux/irqchip/irq-omap-intc.h2
-rw-r--r--kernel/irq/manage.c3
17 files changed, 296 insertions, 72 deletions
diff --git a/Documentation/devicetree/bindings/arm/gic.txt b/Documentation/devicetree/bindings/arm/gic.txt
index 8112d0c3675a..c97484b73e72 100644
--- a/Documentation/devicetree/bindings/arm/gic.txt
+++ b/Documentation/devicetree/bindings/arm/gic.txt
@@ -32,12 +32,16 @@ Main node required properties:
32 The 3rd cell is the flags, encoded as follows: 32 The 3rd cell is the flags, encoded as follows:
33 bits[3:0] trigger type and level flags. 33 bits[3:0] trigger type and level flags.
34 1 = low-to-high edge triggered 34 1 = low-to-high edge triggered
35 2 = high-to-low edge triggered 35 2 = high-to-low edge triggered (invalid for SPIs)
36 4 = active high level-sensitive 36 4 = active high level-sensitive
37 8 = active low level-sensitive 37 8 = active low level-sensitive (invalid for SPIs).
38 bits[15:8] PPI interrupt cpu mask. Each bit corresponds to each of 38 bits[15:8] PPI interrupt cpu mask. Each bit corresponds to each of
39 the 8 possible cpus attached to the GIC. A bit set to '1' indicated 39 the 8 possible cpus attached to the GIC. A bit set to '1' indicated
40 the interrupt is wired to that CPU. Only valid for PPI interrupts. 40 the interrupt is wired to that CPU. Only valid for PPI interrupts.
41 Also note that the configurability of PPI interrupts is IMPLEMENTATION
42 DEFINED and as such not guaranteed to be present (most SoC available
43 in 2014 seem to ignore the setting of this flag and use the hardware
44 default value).
41 45
42- reg : Specifies base physical address(s) and size of the GIC registers. The 46- reg : Specifies base physical address(s) and size of the GIC registers. The
43 first region is the GIC distributor register base and size. The 2nd region is 47 first region is the GIC distributor register base and size. The 2nd region is
diff --git a/Documentation/devicetree/bindings/interrupt-controller/digicolor-ic.txt b/Documentation/devicetree/bindings/interrupt-controller/digicolor-ic.txt
new file mode 100644
index 000000000000..42d41ec84c7b
--- /dev/null
+++ b/Documentation/devicetree/bindings/interrupt-controller/digicolor-ic.txt
@@ -0,0 +1,21 @@
1Conexant Digicolor Interrupt Controller
2
3Required properties:
4
5- compatible : should be "cnxt,cx92755-ic"
6- reg : Specifies base physical address and size of the interrupt controller
7 registers (IC) area
8- interrupt-controller : Identifies the node as an interrupt controller
9- #interrupt-cells : Specifies the number of cells needed to encode an
10 interrupt source. The value shall be 1.
11- syscon: A phandle to the syscon node describing UC registers
12
13Example:
14
15 intc: interrupt-controller@f0000040 {
16 compatible = "cnxt,cx92755-ic";
17 interrupt-controller;
18 #interrupt-cells = <1>;
19 reg = <0xf0000040 0x40>;
20 syscon = <&uc_regs>;
21 };
diff --git a/Documentation/devicetree/bindings/interrupt-controller/renesas,intc-irqpin.txt b/Documentation/devicetree/bindings/interrupt-controller/renesas,intc-irqpin.txt
index c73acd060093..4f7946ae8adc 100644
--- a/Documentation/devicetree/bindings/interrupt-controller/renesas,intc-irqpin.txt
+++ b/Documentation/devicetree/bindings/interrupt-controller/renesas,intc-irqpin.txt
@@ -9,6 +9,11 @@ Required properties:
9 - "renesas,intc-irqpin-r8a7778" (R-Car M1A) 9 - "renesas,intc-irqpin-r8a7778" (R-Car M1A)
10 - "renesas,intc-irqpin-r8a7779" (R-Car H1) 10 - "renesas,intc-irqpin-r8a7779" (R-Car H1)
11 - "renesas,intc-irqpin-sh73a0" (SH-Mobile AG5) 11 - "renesas,intc-irqpin-sh73a0" (SH-Mobile AG5)
12
13- reg: Base address and length of each register bank used by the external
14 IRQ pins driven by the interrupt controller hardware module. The base
15 addresses, length and number of required register banks varies with soctype.
16
12- #interrupt-cells: has to be <2>: an interrupt index and flags, as defined in 17- #interrupt-cells: has to be <2>: an interrupt index and flags, as defined in
13 interrupts.txt in this directory 18 interrupts.txt in this directory
14 19
diff --git a/Documentation/devicetree/bindings/interrupt-controller/ti,omap-intc-irq.txt b/Documentation/devicetree/bindings/interrupt-controller/ti,omap-intc-irq.txt
new file mode 100644
index 000000000000..38ce5d037722
--- /dev/null
+++ b/Documentation/devicetree/bindings/interrupt-controller/ti,omap-intc-irq.txt
@@ -0,0 +1,28 @@
1Omap2/3 intc controller
2
3On TI omap2 and 3 the intc interrupt controller can provide
496 or 128 IRQ signals to the ARM host depending on the SoC.
5
6Required Properties:
7- compatible: should be one of
8 "ti,omap2-intc"
9 "ti,omap3-intc"
10 "ti,dm814-intc"
11 "ti,dm816-intc"
12 "ti,am33xx-intc"
13
14- interrupt-controller : Identifies the node as an interrupt controller
15- #interrupt-cells : Specifies the number of cells needed to encode interrupt
16 source, should be 1 for intc
17- interrupts: interrupt reference to primary interrupt controller
18
19Please refer to interrupts.txt in this directory for details of the common
20Interrupt Controllers bindings used by client devices.
21
22Example:
23 intc: interrupt-controller@48200000 {
24 compatible = "ti,omap3-intc";
25 interrupt-controller;
26 #interrupt-cells = <1>;
27 reg = <0x48200000 0x1000>;
28 };
diff --git a/drivers/irqchip/Makefile b/drivers/irqchip/Makefile
index 9516a324be6d..42965d2476bb 100644
--- a/drivers/irqchip/Makefile
+++ b/drivers/irqchip/Makefile
@@ -42,3 +42,4 @@ obj-$(CONFIG_BRCMSTB_L2_IRQ) += irq-brcmstb-l2.o
42obj-$(CONFIG_KEYSTONE_IRQ) += irq-keystone.o 42obj-$(CONFIG_KEYSTONE_IRQ) += irq-keystone.o
43obj-$(CONFIG_MIPS_GIC) += irq-mips-gic.o 43obj-$(CONFIG_MIPS_GIC) += irq-mips-gic.o
44obj-$(CONFIG_ARCH_MEDIATEK) += irq-mtk-sysirq.o 44obj-$(CONFIG_ARCH_MEDIATEK) += irq-mtk-sysirq.o
45obj-$(CONFIG_ARCH_DIGICOLOR) += irq-digicolor.o
diff --git a/drivers/irqchip/irq-digicolor.c b/drivers/irqchip/irq-digicolor.c
new file mode 100644
index 000000000000..930a2a2fac7f
--- /dev/null
+++ b/drivers/irqchip/irq-digicolor.c
@@ -0,0 +1,120 @@
1/*
2 * Conexant Digicolor SoCs IRQ chip driver
3 *
4 * Author: Baruch Siach <baruch@tkos.co.il>
5 *
6 * Copyright (C) 2014 Paradox Innovation Ltd.
7 *
8 * This file is licensed under the terms of the GNU General Public
9 * License version 2. This program is licensed "as is" without any
10 * warranty of any kind, whether express or implied.
11 */
12
13#include <linux/io.h>
14#include <linux/irq.h>
15#include <linux/of.h>
16#include <linux/of_address.h>
17#include <linux/of_irq.h>
18#include <linux/mfd/syscon.h>
19#include <linux/regmap.h>
20
21#include <asm/exception.h>
22
23#include "irqchip.h"
24
25#define UC_IRQ_CONTROL 0x04
26
27#define IC_FLAG_CLEAR_LO 0x00
28#define IC_FLAG_CLEAR_XLO 0x04
29#define IC_INT0ENABLE_LO 0x10
30#define IC_INT0ENABLE_XLO 0x14
31#define IC_INT0STATUS_LO 0x18
32#define IC_INT0STATUS_XLO 0x1c
33
34static struct irq_domain *digicolor_irq_domain;
35
36static void __exception_irq_entry digicolor_handle_irq(struct pt_regs *regs)
37{
38 struct irq_domain_chip_generic *dgc = digicolor_irq_domain->gc;
39 struct irq_chip_generic *gc = dgc->gc[0];
40 u32 status, hwirq;
41
42 do {