diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2015-02-16 18:20:40 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-02-16 18:20:40 -0500 |
| commit | 3c6847eaa3da59f3bbe15eb3004ddab41ae6a201 (patch) | |
| tree | 9a33b100efeaa63fab23662eb0db42385b8d1f10 | |
| parent | 37507717de51a8332a34ee07fd88700be88df5bf (diff) | |
| parent | 4fe7ffb7e17ca6ad9173b8de35f260c9c8fc2f79 (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.txt | 8 | ||||
| -rw-r--r-- | Documentation/devicetree/bindings/interrupt-controller/digicolor-ic.txt | 21 | ||||
| -rw-r--r-- | Documentation/devicetree/bindings/interrupt-controller/renesas,intc-irqpin.txt | 5 | ||||
| -rw-r--r-- | Documentation/devicetree/bindings/interrupt-controller/ti,omap-intc-irq.txt | 28 | ||||
| -rw-r--r-- | drivers/irqchip/Makefile | 1 | ||||
| -rw-r--r-- | drivers/irqchip/irq-digicolor.c | 120 | ||||
| -rw-r--r-- | drivers/irqchip/irq-gic-common.c | 18 | ||||
| -rw-r--r-- | drivers/irqchip/irq-gic-common.h | 2 | ||||
| -rw-r--r-- | drivers/irqchip/irq-gic-v3.c | 8 | ||||
| -rw-r--r-- | drivers/irqchip/irq-gic.c | 9 | ||||
| -rw-r--r-- | drivers/irqchip/irq-hip04.c | 9 | ||||
| -rw-r--r-- | drivers/irqchip/irq-mips-gic.c | 44 | ||||
| -rw-r--r-- | drivers/irqchip/irq-mtk-sysirq.c | 18 | ||||
| -rw-r--r-- | drivers/irqchip/irq-omap-intc.c | 22 | ||||
| -rw-r--r-- | drivers/irqchip/irq-renesas-intc-irqpin.c | 50 | ||||
| -rw-r--r-- | include/linux/irqchip/irq-omap-intc.h | 2 | ||||
| -rw-r--r-- | kernel/irq/manage.c | 3 |
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 @@ | |||
| 1 | Conexant Digicolor Interrupt Controller | ||
| 2 | |||
| 3 | Required 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 | |||
| 13 | Example: | ||
| 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 @@ | |||
| 1 | Omap2/3 intc controller | ||
| 2 | |||
| 3 | On TI omap2 and 3 the intc interrupt controller can provide | ||
| 4 | 96 or 128 IRQ signals to the ARM host depending on the SoC. | ||
| 5 | |||
| 6 | Required 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 | |||
| 19 | Please refer to interrupts.txt in this directory for details of the common | ||
| 20 | Interrupt Controllers bindings used by client devices. | ||
| 21 | |||
| 22 | Example: | ||
| 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 | |||
| 42 | obj-$(CONFIG_KEYSTONE_IRQ) += irq-keystone.o | 42 | obj-$(CONFIG_KEYSTONE_IRQ) += irq-keystone.o |
| 43 | obj-$(CONFIG_MIPS_GIC) += irq-mips-gic.o | 43 | obj-$(CONFIG_MIPS_GIC) += irq-mips-gic.o |
| 44 | obj-$(CONFIG_ARCH_MEDIATEK) += irq-mtk-sysirq.o | 44 | obj-$(CONFIG_ARCH_MEDIATEK) += irq-mtk-sysirq.o |
| 45 | obj-$(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 | |||
| 34 | static struct irq_domain *digicolor_irq_domain; | ||
| 35 | |||
| 36 | static 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 { | ||
