aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2017-10-19 08:29:46 -0400
committerThomas Gleixner <tglx@linutronix.de>2017-10-19 08:29:46 -0400
commite4844dede52f26132657e8dbd66d1b615653b0d6 (patch)
treef51ac6c8e5f86fdeea99582bd3ece222567f451c
parentc94fb639d5462027004ed8f5f71288955688a4ae (diff)
parent7bdeb7f52b1b193bb50fc6d01c6110ba50bafb5b (diff)
Merge tag 'irqchip-4.15' of git://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms into irq/core
Pull irqchip updates for 4.15 from Marc Zyngier - GICv4 updates (improved performance, errata workarounds) - Workaround for Socionext's pre-ITS erratum - Meson GPIO interrupt controller - BCM7271 L2 interrupt controller - GICv3 range selector support - various cleanups
-rw-r--r--Documentation/arm64/silicon-errata.txt1
-rw-r--r--Documentation/devicetree/bindings/interrupt-controller/amlogic,meson-gpio-intc.txt35
-rw-r--r--Documentation/devicetree/bindings/interrupt-controller/arm,gic-v3.txt4
-rw-r--r--Documentation/devicetree/bindings/interrupt-controller/brcm,l2-intc.txt3
-rw-r--r--Documentation/devicetree/bindings/interrupt-controller/renesas,irqc.txt3
-rw-r--r--arch/arm/include/asm/arch_gicv3.h5
-rw-r--r--arch/arm64/Kconfig19
-rw-r--r--arch/arm64/include/asm/arch_gicv3.h5
-rw-r--r--drivers/irqchip/Kconfig8
-rw-r--r--drivers/irqchip/Makefile1
-rw-r--r--drivers/irqchip/irq-aspeed-i2c-ic.c4
-rw-r--r--drivers/irqchip/irq-brcmstb-l2.c171
-rw-r--r--drivers/irqchip/irq-gic-common.c5
-rw-r--r--drivers/irqchip/irq-gic-common.h2
-rw-r--r--drivers/irqchip/irq-gic-v3-its.c362
-rw-r--r--drivers/irqchip/irq-gic-v3.c50
-rw-r--r--drivers/irqchip/irq-meson-gpio.c414
-rw-r--r--drivers/irqchip/irq-renesas-intc-irqpin.c9
-rw-r--r--include/linux/irqchip/arm-gic-v3.h4
-rw-r--r--include/linux/irqchip/arm-gic-v4.h7
-rw-r--r--include/linux/irqdomain.h2
-rw-r--r--kernel/irq/irqdomain.c18
22 files changed, 981 insertions, 151 deletions
diff --git a/Documentation/arm64/silicon-errata.txt b/Documentation/arm64/silicon-errata.txt
index 66e8ce14d23d..304bf22bb83c 100644
--- a/Documentation/arm64/silicon-errata.txt
+++ b/Documentation/arm64/silicon-errata.txt
@@ -70,6 +70,7 @@ stable kernels.
70| | | | | 70| | | | |
71| Hisilicon | Hip0{5,6,7} | #161010101 | HISILICON_ERRATUM_161010101 | 71| Hisilicon | Hip0{5,6,7} | #161010101 | HISILICON_ERRATUM_161010101 |
72| Hisilicon | Hip0{6,7} | #161010701 | N/A | 72| Hisilicon | Hip0{6,7} | #161010701 | N/A |
73| Hisilicon | Hip07 | #161600802 | HISILICON_ERRATUM_161600802 |
73| | | | | 74| | | | |
74| Qualcomm Tech. | Falkor v1 | E1003 | QCOM_FALKOR_ERRATUM_1003 | 75| Qualcomm Tech. | Falkor v1 | E1003 | QCOM_FALKOR_ERRATUM_1003 |
75| Qualcomm Tech. | Falkor v1 | E1009 | QCOM_FALKOR_ERRATUM_1009 | 76| Qualcomm Tech. | Falkor v1 | E1009 | QCOM_FALKOR_ERRATUM_1009 |
diff --git a/Documentation/devicetree/bindings/interrupt-controller/amlogic,meson-gpio-intc.txt b/Documentation/devicetree/bindings/interrupt-controller/amlogic,meson-gpio-intc.txt
new file mode 100644
index 000000000000..633e21ce4b17
--- /dev/null
+++ b/Documentation/devicetree/bindings/interrupt-controller/amlogic,meson-gpio-intc.txt
@@ -0,0 +1,35 @@
1Amlogic meson GPIO interrupt controller
2
3Meson SoCs contains an interrupt controller which is able to watch the SoC
4pads and generate an interrupt on edge or level. The controller is essentially
5a 256 pads to 8 GIC interrupt multiplexer, with a filter block to select edge
6or level and polarity. It does not expose all 256 mux inputs because the
7documentation shows that the upper part is not mapped to any pad. The actual
8number of interrupt exposed depends on the SoC.
9
10Required properties:
11
12- compatible : must have "amlogic,meson8-gpio-intc” and either
13 “amlogic,meson8b-gpio-intc” for meson8b SoCs (S805) or
14 “amlogic,meson-gxbb-gpio-intc” for GXBB SoCs (S905) or
15 “amlogic,meson-gxl-gpio-intc” for GXL SoCs (S905X, S912)
16- interrupt-parent : a phandle to the GIC the interrupts are routed to.
17 Usually this is provided at the root level of the device tree as it is
18 common to most of the SoC.
19- reg : Specifies base physical address and size of the registers.
20- interrupt-controller : Identifies the node as an interrupt controller.
21- #interrupt-cells : Specifies the number of cells needed to encode an
22 interrupt source. The value must be 2.
23- meson,channel-interrupts: Array with the 8 upstream hwirq numbers. These
24 are the hwirqs used on the parent interrupt controller.
25
26Example:
27
28gpio_interrupt: interrupt-controller@9880 {
29 compatible = "amlogic,meson-gxbb-gpio-intc",
30 "amlogic,meson-gpio-intc";
31 reg = <0x0 0x9880 0x0 0x10>;
32 interrupt-controller;
33 #interrupt-cells = <2>;
34 meson,channel-interrupts = <64 65 66 67 68 69 70 71>;
35};
diff --git a/Documentation/devicetree/bindings/interrupt-controller/arm,gic-v3.txt b/Documentation/devicetree/bindings/interrupt-controller/arm,gic-v3.txt
index 4c29cdab0ea5..c3e6092f3add 100644
--- a/Documentation/devicetree/bindings/interrupt-controller/arm,gic-v3.txt
+++ b/Documentation/devicetree/bindings/interrupt-controller/arm,gic-v3.txt
@@ -75,6 +75,10 @@ These nodes must have the following properties:
75- reg: Specifies the base physical address and size of the ITS 75- reg: Specifies the base physical address and size of the ITS
76 registers. 76 registers.
77 77
78Optional:
79- socionext,synquacer-pre-its: (u32, u32) tuple describing the untranslated
80 address and size of the pre-ITS window.
81
78The main GIC node must contain the appropriate #address-cells, 82The main GIC node must contain the appropriate #address-cells,
79#size-cells and ranges properties for the reg property of all ITS 83#size-cells and ranges properties for the reg property of all ITS
80nodes. 84nodes.
diff --git a/Documentation/devicetree/bindings/interrupt-controller/brcm,l2-intc.txt b/Documentation/devicetree/bindings/interrupt-controller/brcm,l2-intc.txt
index 448273a30a11..36df06c5c567 100644
--- a/Documentation/devicetree/bindings/interrupt-controller/brcm,l2-intc.txt
+++ b/Documentation/devicetree/bindings/interrupt-controller/brcm,l2-intc.txt
@@ -2,7 +2,8 @@ Broadcom Generic Level 2 Interrupt Controller
2 2
3Required properties: 3Required properties:
4 4
5- compatible: should be "brcm,l2-intc" 5- compatible: should be "brcm,l2-intc" for latched interrupt controllers
6 should be "brcm,bcm7271-l2-intc" for level interrupt controllers
6- reg: specifies the base physical address and size of the registers 7- reg: specifies the base physical address and size of the registers
7- interrupt-controller: identifies the node as an interrupt controller 8- interrupt-controller: identifies the node as an interrupt controller
8- #interrupt-cells: specifies the number of cells needed to encode an 9- #interrupt-cells: specifies the number of cells needed to encode an
diff --git a/Documentation/devicetree/bindings/interrupt-controller/renesas,irqc.txt b/Documentation/devicetree/bindings/interrupt-controller/renesas,irqc.txt
index e3f052d8c11a..33c9a10fdc91 100644
--- a/Documentation/devicetree/bindings/interrupt-controller/renesas,irqc.txt
+++ b/Documentation/devicetree/bindings/interrupt-controller/renesas,irqc.txt
@@ -13,6 +13,9 @@ Required properties:
13 - "renesas,irqc-r8a7793" (R-Car M2-N) 13 - "renesas,irqc-r8a7793" (R-Car M2-N)
14 - "renesas,irqc-r8a7794" (R-Car E2) 14 - "renesas,irqc-r8a7794" (R-Car E2)
15 - "renesas,intc-ex-r8a7795" (R-Car H3) 15 - "renesas,intc-ex-r8a7795" (R-Car H3)
16 - "renesas,intc-ex-r8a7796" (R-Car M3-W)
17 - "renesas,intc-ex-r8a77970" (R-Car V3M)
18 - "renesas,intc-ex-r8a77995" (R-Car D3)
16- #interrupt-cells: has to be <2>: an interrupt index and flags, as defined in 19- #interrupt-cells: has to be <2>: an interrupt index and flags, as defined in
17 interrupts.txt in this directory 20 interrupts.txt in this directory
18- clocks: Must contain a reference to the functional clock. 21- clocks: Must contain a reference to the functional clock.
diff --git a/arch/arm/include/asm/arch_gicv3.h b/arch/arm/include/asm/arch_gicv3.h
index eee269321923..1070044f5c3f 100644
--- a/arch/arm/include/asm/arch_gicv3.h
+++ b/arch/arm/include/asm/arch_gicv3.h
@@ -196,6 +196,11 @@ static inline void gic_write_ctlr(u32 val)
196 isb(); 196 isb();
197} 197}
198 198
199static inline u32 gic_read_ctlr(void)
200{
201 return read_sysreg(ICC_CTLR);
202}
203
199static inline void gic_write_grpen1(u32 val) 204static inline void gic_write_grpen1(u32 val)
200{ 205{
201 write_sysreg(val, ICC_IGRPEN1); 206 write_sysreg(val, ICC_IGRPEN1);
diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
index 0df64a6a56d4..22455e4168c1 100644
--- a/arch/arm64/Kconfig
+++ b/arch/arm64/Kconfig
@@ -539,6 +539,25 @@ config QCOM_QDF2400_ERRATUM_0065
539 539
540 If unsure, say Y. 540 If unsure, say Y.
541 541
542
543config SOCIONEXT_SYNQUACER_PREITS
544 bool "Socionext Synquacer: Workaround for GICv3 pre-ITS"
545 default y
546 help
547 Socionext Synquacer SoCs implement a separate h/w block to generate
548 MSI doorbell writes with non-zero values for the device ID.
549
550 If unsure, say Y.
551
552config HISILICON_ERRATUM_161600802
553 bool "Hip07 161600802: Erroneous redistributor VLPI base"
554 default y
555 help
556 The HiSilicon Hip07 SoC usees the wrong redistributor base
557 when issued ITS commands such as VMOVP and VMAPP, and requires
558 a 128kB offset to be applied to the target address in this commands.
559
560 If unsure, say Y.
542endmenu 561endmenu
543 562
544 563
diff --git a/arch/arm64/include/asm/arch_gicv3.h b/arch/arm64/include/asm/arch_gicv3.h
index b7e3f74822da..9becba9ab392 100644
--- a/arch/arm64/include/asm/arch_gicv3.h
+++ b/arch/arm64/include/asm/arch_gicv3.h
@@ -87,6 +87,11 @@ static inline void gic_write_ctlr(u32 val)
87 isb(); 87 isb();
88} 88}
89 89
90static inline u32 gic_read_ctlr(void)
91{
92 return read_sysreg_s(SYS_ICC_CTLR_EL1);
93