diff options
| author | Thomas Gleixner <tglx@linutronix.de> | 2017-10-19 08:29:46 -0400 |
|---|---|---|
| committer | Thomas Gleixner <tglx@linutronix.de> | 2017-10-19 08:29:46 -0400 |
| commit | e4844dede52f26132657e8dbd66d1b615653b0d6 (patch) | |
| tree | f51ac6c8e5f86fdeea99582bd3ece222567f451c | |
| parent | c94fb639d5462027004ed8f5f71288955688a4ae (diff) | |
| parent | 7bdeb7f52b1b193bb50fc6d01c6110ba50bafb5b (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
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 @@ | |||
| 1 | Amlogic meson GPIO interrupt controller | ||
| 2 | |||
| 3 | Meson SoCs contains an interrupt controller which is able to watch the SoC | ||
| 4 | pads and generate an interrupt on edge or level. The controller is essentially | ||
| 5 | a 256 pads to 8 GIC interrupt multiplexer, with a filter block to select edge | ||
| 6 | or level and polarity. It does not expose all 256 mux inputs because the | ||
| 7 | documentation shows that the upper part is not mapped to any pad. The actual | ||
| 8 | number of interrupt exposed depends on the SoC. | ||
| 9 | |||
| 10 | Required 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 | |||
| 26 | Example: | ||
| 27 | |||
| 28 | gpio_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 | ||
| 78 | Optional: | ||
| 79 | - socionext,synquacer-pre-its: (u32, u32) tuple describing the untranslated | ||
| 80 | address and size of the pre-ITS window. | ||
| 81 | |||
| 78 | The main GIC node must contain the appropriate #address-cells, | 82 | The 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 |
| 80 | nodes. | 84 | nodes. |
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 | ||
| 3 | Required properties: | 3 | Required 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 | ||
| 199 | static inline u32 gic_read_ctlr(void) | ||
| 200 | { | ||
| 201 | return read_sysreg(ICC_CTLR); | ||
| 202 | } | ||
| 203 | |||
| 199 | static inline void gic_write_grpen1(u32 val) | 204 | static 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 | |||
| 543 | config 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 | |||
| 552 | config 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. | ||
| 542 | endmenu | 561 | endmenu |
| 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 | ||
| 90 | static inline u32 gic_read_ctlr(void) | ||
| 91 | { | ||
| 92 | return read_sysreg_s(SYS_ICC_CTLR_EL1); | ||
| 93 | |||
