From nobody Sun Apr 12 02:49:58 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B8B24C00144 for ; Mon, 1 Aug 2022 14:48:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233023AbiHAOsQ (ORCPT ); Mon, 1 Aug 2022 10:48:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33538 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231953AbiHAOsK (ORCPT ); Mon, 1 Aug 2022 10:48:10 -0400 Received: from galois.linutronix.de (Galois.linutronix.de [IPv6:2a0a:51c0:0:12e:550::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8875A3C14B for ; Mon, 1 Aug 2022 07:48:05 -0700 (PDT) From: Thomas Gleixner DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1659365283; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=s1arFACTzg54mgXd6bZUkPdmQPTM7u7EX6RxeCwhYQw=; b=l8vEI6XEtnxhM6J4ox6o7z9Fka3rVhdq4csrL1GPByDSjVnHeAJ/mUQBJpIiuSln8LA0xp 3vL/1f4AXMtOxawPzFKuPUrkQTJqGfNVYFjdkyN3SBjlBg2zjcfkk7od97nm7sW3Q8lSlA LG6Bq5hKNxeawcIpU5IPwDJ60H6mELsa1ttNmK80mn24+5B9nee2bh096uju2ool8tUrSZ xfKdK6EGfLPQLimfOmp7uQhpDaYelLqKkkJxORJ3tLjQO3x8lPnbUUxV4sdTtisF7jT1Mg WFQeAPypINcKhQpoAVCYOppF5bEZPyAXdrhholVwtd6tGNK9Z04zVgaBeP24WQ== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1659365283; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=s1arFACTzg54mgXd6bZUkPdmQPTM7u7EX6RxeCwhYQw=; b=ZzDBk0Ik0Bjep3Wxvgo1VrPh8tXqtK3IW2rNi2FY7cM8vOxBSRIXJ1kWpSNYw6xa1ycO2J y44SwCR7mK5RbxBA== To: Linus Torvalds Cc: linux-kernel@vger.kernel.org, x86@kernel.org Subject: [GIT pull] irq/core for v6.0-rc1 Message-ID: <165936521992.1709539.10227752058452220355.tglx@xen13.tec.linutronix.de> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Date: Mon, 1 Aug 2022 16:48:03 +0200 (CEST) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Linus, please pull the latest irq/core branch from: git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git irq-core-2022-= 08-01 up to: 779fda86bdeb: Merge tag 'irqchip-5.20' of git://git.kernel.org/pub/= scm/linux/kernel/git/maz/arm-platforms into irq/core Updates for interrupt core and drivers: core: - Fix a few inconsistencies between UP and SMP vs. interrupt affinities - Small updates and cleanups all over the place drivers: - New driver for the LoongArch interrupt controller - New driver for the Renesas RZ/G2L interrupt controller - Hotpath optimization for SiFive PLIC - Workaround for broken PLIC edge triggered interrupts - Small cleanups and improvements as usual Thanks, tglx ------------------> Alexandre Torgue (1): irqchip/stm32-exti: Tag emr register as undefined for stm32mp15 Antonio Borneo (4): genirq: Don't return error on missing optional irq_request_resources() irqchip/stm32-exti: Prevent illegal read due to unbounded DT value irqchip/stm32-exti: Read event trigger type from event_trg register irqchip/stm32-exti: Simplify irq description table Ben Dooks (1): irqchip/mmp: Declare init functions in common header file Huacai Chen (6): irqchip: Add Loongson PCH LPC controller support irqchip/loongson-pch-pic: Add ACPI init support irqchip/loongson-pch-msi: Add ACPI init support irqchip/loongson-liointc: Add ACPI init support irqchip: Add Loongson Extended I/O interrupt controller support irqchip: Add LoongArch CPU interrupt controller support Jason Wang (1): irqchip/gic-v3: Fix comment typo Jianmin Lv (4): genirq/generic_chip: Export irq_unmap_generic_chip LoongArch: Use ACPI_GENERIC_GSI for gsi handling LoongArch: Prepare to support multiple pch-pic and pch-msi irqdomain irqchip / ACPI: Introduce ACPI_IRQ_MODEL_LPIC for LoongArch Lad Prabhakar (8): dt-bindings: interrupt-controller: sifive,plic: Document Renesas RZ/F= ive SoC irqchip/sifive-plic: Add support for Renesas RZ/Five SoC dt-bindings: interrupt-controller: Add Renesas RZ/G2L Interrupt Contr= oller irqchip: Add RZ/G2L IA55 Interrupt Controller driver gpio: gpiolib: Allow free() callback to be overridden dt-bindings: pinctrl: renesas,rzg2l-pinctrl: Document the properties = to handle GPIO IRQ pinctrl: renesas: pinctrl-rzg2l: Add IRQ domain to handle GPIO interr= upt dt-bindings: interrupt-controller: renesas,rzg2l-irqc: Document RZ/V2= L SoC Loic Pallardy (1): irqchip/stm32-exti: Fix irq_mask/irq_unmask for direct events Ludovic Barre (1): irqchip/stm32-exti: Fix irq_set_affinity return value Lukas Wunner (1): genirq/PM: Unexport {suspend,resume}_device_irqs() Marc Zyngier (5): gpio: Remove dynamic allocation from populate_parent_alloc_arg() gpio: thunderx: Don't directly include asm-generic/msi.h LoongArch: Provisionally add ACPICA data structures APCI: irq: Add support for multiple GSI domains ACPI: irq: Allow acpi_gsi_to_irq() to have an arch-specific fallback Michael Walle (2): genirq: Allow irq_set_chip_handler_name_locked() to take a const irq_= chip pinctrl: ocelot: Make irq_chip immutable Paran Lee (1): genirq: Use for_each_action_of_desc in actions_show() Samuel Holland (13): dt-bindings: interrupt-controller: Require trigger type for T-HEAD PL= IC irqchip/sifive-plic: Fix T-HEAD PLIC edge trigger handling irqchip/mips-gic: Only register IPI domain when SMP is enabled genirq: GENERIC_IRQ_IPI depends on SMP genirq: GENERIC_IRQ_EFFECTIVE_AFF_MASK depends on SMP genirq: Drop redundant irq_init_effective_affinity genirq: Refactor accessors to use irq_data_get_affinity_mask genirq: Add and use an irq_data_update_affinity helper genirq: Return a const cpumask from irq_data_get_affinity_mask genirq: Provide an IRQ affinity mask in non-SMP configs PCI: hv: Take a const cpumask in hv_compose_msi_req_get_cpu() irqchip/sifive-plic: Make better use of the effective affinity mask irqchip/sifive-plic: Separate the enable and mask operations William Dean (1): irqchip/mips-gic: Check the return value of ioremap() in gic_of_init() Xu Qiang (2): irqdomain: Report irq number for NOMAP domains irqdomain: Use hwirq_max instead of revmap_size for NOMAP domains .../interrupt-controller/renesas,rzg2l-irqc.yaml | 134 +++++++ .../interrupt-controller/sifive,plic-1.0.0.yaml | 65 +++- .../bindings/pinctrl/renesas,rzg2l-pinctrl.yaml | 15 + arch/alpha/kernel/irq.c | 2 +- arch/arm/mach-hisi/Kconfig | 2 +- arch/arm/mach-mmp/mmp2.h | 2 +- arch/arm/mach-mmp/pxa168.h | 2 +- arch/arm/mach-mmp/pxa910.h | 2 +- arch/ia64/kernel/iosapic.c | 2 +- arch/ia64/kernel/irq.c | 4 +- arch/ia64/kernel/msi_ia64.c | 4 +- arch/loongarch/Kconfig | 1 + arch/loongarch/include/asm/acpi.h | 142 ++++++++ arch/loongarch/include/asm/irq.h | 51 +-- arch/loongarch/kernel/acpi.c | 65 ---- arch/loongarch/kernel/irq.c | 58 ++- arch/loongarch/kernel/time.c | 14 +- arch/mips/cavium-octeon/octeon-irq.c | 4 +- arch/mips/include/asm/mach-loongson64/irq.h | 3 +- arch/parisc/kernel/irq.c | 2 +- arch/sh/kernel/irq.c | 7 +- arch/x86/hyperv/irqdomain.c | 2 +- arch/xtensa/kernel/irq.c | 7 +- drivers/acpi/bus.c | 3 + drivers/acpi/irq.c | 58 ++- drivers/gpio/gpio-msc313.c | 15 +- drivers/gpio/gpio-tegra.c | 15 +- drivers/gpio/gpio-tegra186.c | 15 +- drivers/gpio/gpio-thunderx.c | 17 +- drivers/gpio/gpio-visconti.c | 15 +- drivers/gpio/gpiolib.c | 51 ++- drivers/iommu/hyperv-iommu.c | 2 +- drivers/irqchip/Kconfig | 60 +++- drivers/irqchip/Makefile | 4 + drivers/irqchip/irq-bcm6345-l1.c | 4 +- drivers/irqchip/irq-gic-v3.c | 20 +- drivers/irqchip/irq-gic.c | 18 +- drivers/irqchip/irq-loongarch-cpu.c | 148 ++++++++ drivers/irqchip/irq-loongson-eiointc.c | 395 +++++++++++++++++= ++++ drivers/irqchip/irq-loongson-liointc.c | 203 +++++++---- drivers/irqchip/irq-loongson-pch-lpc.c | 205 +++++++++++ drivers/irqchip/irq-loongson-pch-msi.c | 127 ++++--- drivers/irqchip/irq-loongson-pch-pic.c | 177 +++++++-- drivers/irqchip/irq-mips-gic.c | 84 +++-- drivers/irqchip/irq-renesas-rzg2l.c | 393 +++++++++++++++++= +++ drivers/irqchip/irq-sifive-plic.c | 142 ++++++-- drivers/irqchip/irq-stm32-exti.c | 250 +++++++------ drivers/parisc/iosapic.c | 2 +- drivers/pci/controller/pci-hyperv.c | 12 +- drivers/pinctrl/pinctrl-ocelot.c | 10 +- drivers/pinctrl/qcom/pinctrl-spmi-gpio.c | 15 +- drivers/pinctrl/renesas/pinctrl-rzg2l.c | 233 ++++++++++++ drivers/sh/intc/chip.c | 2 +- drivers/xen/events/events_base.c | 7 +- include/linux/acpi.h | 4 +- include/linux/cpuhotplug.h | 1 + include/linux/gpio/driver.h | 42 +-- include/linux/irq.h | 35 +- include/linux/irqchip/mmp.h | 3 + include/linux/irqdesc.h | 5 +- kernel/irq/Kconfig | 2 + kernel/irq/chip.c | 11 +- kernel/irq/debugfs.c | 2 +- kernel/irq/generic-chip.c | 2 +- kernel/irq/ipi.c | 16 +- kernel/irq/irqdesc.c | 2 +- kernel/irq/irqdomain.c | 14 +- kernel/irq/manage.c | 10 +- kernel/irq/pm.c | 2 - 69 files changed, 2780 insertions(+), 663 deletions(-) create mode 100644 Documentation/devicetree/bindings/interrupt-controller/= renesas,rzg2l-irqc.yaml create mode 100644 drivers/irqchip/irq-loongarch-cpu.c create mode 100644 drivers/irqchip/irq-loongson-eiointc.c create mode 100644 drivers/irqchip/irq-loongson-pch-lpc.c create mode 100644 drivers/irqchip/irq-renesas-rzg2l.c diff --git a/Documentation/devicetree/bindings/interrupt-controller/renesas= ,rzg2l-irqc.yaml b/Documentation/devicetree/bindings/interrupt-controller/r= enesas,rzg2l-irqc.yaml new file mode 100644 index 000000000000..33b90e975e33 --- /dev/null +++ b/Documentation/devicetree/bindings/interrupt-controller/renesas,rzg2l-= irqc.yaml @@ -0,0 +1,134 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/interrupt-controller/renesas,rzg2l-irqc= .yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Renesas RZ/G2L (and alike SoC's) Interrupt Controller (IA55) + +maintainers: + - Lad Prabhakar + - Geert Uytterhoeven + +description: | + IA55 performs various interrupt controls including synchronization for t= he external + interrupts of NMI, IRQ, and GPIOINT and the interrupts of the built-in p= eripheral + interrupts output by each IP. And it notifies the interrupt to the GIC + - IRQ sense select for 8 external interrupts, mapped to 8 GIC SPI inte= rrupts + - GPIO pins used as external interrupt input pins, mapped to 32 GIC SP= I interrupts + - NMI edge select (NMI is not treated as NMI exception and supports fa= ll edge and + stand-up edge detection interrupts) + +allOf: + - $ref: /schemas/interrupt-controller.yaml# + +properties: + compatible: + items: + - enum: + - renesas,r9a07g044-irqc # RZ/G2{L,LC} + - renesas,r9a07g054-irqc # RZ/V2L + - const: renesas,rzg2l-irqc + + '#interrupt-cells': + description: The first cell should contain external interrupt number (= IRQ0-7) and the + second cell is used to specify the flag. + const: 2 + + '#address-cells': + const: 0 + + interrupt-controller: true + + reg: + maxItems: 1 + + interrupts: + maxItems: 41 + + clocks: + maxItems: 2 + + clock-names: + items: + - const: clk + - const: pclk + + power-domains: + maxItems: 1 + + resets: + maxItems: 1 + +required: + - compatible + - '#interrupt-cells' + - '#address-cells' + - interrupt-controller + - reg + - interrupts + - clocks + - clock-names + - power-domains + - resets + +unevaluatedProperties: false + +examples: + - | + #include + #include + + irqc: interrupt-controller@110a0000 { + compatible =3D "renesas,r9a07g044-irqc", "renesas,rzg2l-irqc"; + reg =3D <0x110a0000 0x10000>; + #interrupt-cells =3D <2>; + #address-cells =3D <0>; + interrupt-controller; + interrupts =3D , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + ; + clocks =3D <&cpg CPG_MOD R9A07G044_IA55_CLK>, + <&cpg CPG_MOD R9A07G044_IA55_PCLK>; + clock-names =3D "clk", "pclk"; + power-domains =3D <&cpg>; + resets =3D <&cpg R9A07G044_IA55_RESETN>; + }; diff --git a/Documentation/devicetree/bindings/interrupt-controller/sifive,= plic-1.0.0.yaml b/Documentation/devicetree/bindings/interrupt-controller/si= five,plic-1.0.0.yaml index 27092c6a86c4..92e0f8c3eff2 100644 --- a/Documentation/devicetree/bindings/interrupt-controller/sifive,plic-1.= 0.0.yaml +++ b/Documentation/devicetree/bindings/interrupt-controller/sifive,plic-1.= 0.0.yaml @@ -26,9 +26,14 @@ description: with priority below this threshold will not cause the PLIC to raise its interrupt line leading to the context. =20 - While the PLIC supports both edge-triggered and level-triggered interrup= ts, - interrupt handlers are oblivious to this distinction and therefore it is= not - specified in the PLIC device-tree binding. + The PLIC supports both edge-triggered and level-triggered interrupts. For + edge-triggered interrupts, the RISC-V PLIC spec allows two responses to = edges + seen while an interrupt handler is active; the PLIC may either queue the= m or + ignore them. In the first case, handlers are oblivious to the trigger ty= pe, so + it is not included in the interrupt specifier. In the second case, softw= are + needs to know the trigger type, so it can reorder the interrupt flow to = avoid + missing interrupts. This special handling is needed by at least the Rene= sas + RZ/Five SoC (AX45MP AndesCore with a NCEPLIC100) and the T-HEAD C900 PLI= C. =20 While the RISC-V ISA doesn't specify a memory layout for the PLIC, the "sifive,plic-1.0.0" device is a concrete implementation of the PLIC that @@ -47,6 +52,10 @@ maintainers: properties: compatible: oneOf: + - items: + - enum: + - renesas,r9a07g043-plic + - const: andestech,nceplic100 - items: - enum: - sifive,fu540-c000-plic @@ -64,8 +73,7 @@ properties: '#address-cells': const: 0 =20 - '#interrupt-cells': - const: 1 + '#interrupt-cells': true =20 interrupt-controller: true =20 @@ -82,6 +90,12 @@ properties: description: Specifies how many external interrupts are supported by this control= ler. =20 + clocks: true + + power-domains: true + + resets: true + required: - compatible - '#address-cells' @@ -91,6 +105,47 @@ required: - interrupts-extended - riscv,ndev =20 +allOf: + - if: + properties: + compatible: + contains: + enum: + - andestech,nceplic100 + - thead,c900-plic + + then: + properties: + '#interrupt-cells': + const: 2 + + else: + properties: + '#interrupt-cells': + const: 1 + + - if: + properties: + compatible: + contains: + const: renesas,r9a07g043-plic + + then: + properties: + clocks: + maxItems: 1 + + power-domains: + maxItems: 1 + + resets: + maxItems: 1 + + required: + - clocks + - power-domains + - resets + additionalProperties: false =20 examples: diff --git a/Documentation/devicetree/bindings/pinctrl/renesas,rzg2l-pinctr= l.yaml b/Documentation/devicetree/bindings/pinctrl/renesas,rzg2l-pinctrl.ya= ml index 52df1b146174..997b74639112 100644 --- a/Documentation/devicetree/bindings/pinctrl/renesas,rzg2l-pinctrl.yaml +++ b/Documentation/devicetree/bindings/pinctrl/renesas,rzg2l-pinctrl.yaml @@ -47,6 +47,17 @@ properties: gpio-ranges: maxItems: 1 =20 + interrupt-controller: true + + '#interrupt-cells': + const: 2 + description: + The first cell contains the global GPIO port index, constructed usin= g the + RZG2L_GPIO() helper macro in a= nd the + second cell is used to specify the flag. + E.g. "interrupts =3D ;" if = P43_0 is + being used as an interrupt. + clocks: maxItems: 1 =20 @@ -110,6 +121,8 @@ required: - gpio-controller - '#gpio-cells' - gpio-ranges + - interrupt-controller + - '#interrupt-cells' - clocks - power-domains - resets @@ -126,6 +139,8 @@ examples: gpio-controller; #gpio-cells =3D <2>; gpio-ranges =3D <&pinctrl 0 0 392>; + interrupt-controller; + #interrupt-cells =3D <2>; clocks =3D <&cpg CPG_MOD R9A07G044_GPIO_HCLK>; resets =3D <&cpg R9A07G044_GPIO_RSTN>, <&cpg R9A07G044_GPIO_PORT_RESETN>, diff --git a/arch/alpha/kernel/irq.c b/arch/alpha/kernel/irq.c index f6d2946edbd2..15f2effd6baf 100644 --- a/arch/alpha/kernel/irq.c +++ b/arch/alpha/kernel/irq.c @@ -60,7 +60,7 @@ int irq_select_affinity(unsigned int irq) cpu =3D (cpu < (NR_CPUS-1) ? cpu + 1 : 0); last_cpu =3D cpu; =20 - cpumask_copy(irq_data_get_affinity_mask(data), cpumask_of(cpu)); + irq_data_update_affinity(data, cpumask_of(cpu)); chip->irq_set_affinity(data, cpumask_of(cpu), false); return 0; } diff --git a/arch/arm/mach-hisi/Kconfig b/arch/arm/mach-hisi/Kconfig index 75cccbd3f05f..7b3440687176 100644 --- a/arch/arm/mach-hisi/Kconfig +++ b/arch/arm/mach-hisi/Kconfig @@ -40,7 +40,7 @@ config ARCH_HIP04 select HAVE_ARM_ARCH_TIMER select MCPM if SMP select MCPM_QUAD_CLUSTER if SMP - select GENERIC_IRQ_EFFECTIVE_AFF_MASK + select GENERIC_IRQ_EFFECTIVE_AFF_MASK if SMP help Support for Hisilicon HiP04 SoC family =20 diff --git a/arch/arm/mach-mmp/mmp2.h b/arch/arm/mach-mmp/mmp2.h index 3ebc1bb13f71..7f80b90248fb 100644 --- a/arch/arm/mach-mmp/mmp2.h +++ b/arch/arm/mach-mmp/mmp2.h @@ -5,13 +5,13 @@ #include =20 extern void mmp2_timer_init(void); -extern void __init mmp2_init_icu(void); extern void __init mmp2_init_irq(void); extern void mmp2_clear_pmic_int(void); =20 #include #include #include +#include =20 #include "devices.h" =20 diff --git a/arch/arm/mach-mmp/pxa168.h b/arch/arm/mach-mmp/pxa168.h index 34f907cd165a..c1547e098f09 100644 --- a/arch/arm/mach-mmp/pxa168.h +++ b/arch/arm/mach-mmp/pxa168.h @@ -5,7 +5,6 @@ #include =20 extern void pxa168_timer_init(void); -extern void __init icu_init_irq(void); extern void __init pxa168_init_irq(void); extern void pxa168_restart(enum reboot_mode, const char *); extern void pxa168_clear_keypad_wakeup(void); @@ -18,6 +17,7 @@ extern void pxa168_clear_keypad_wakeup(void); #include #include #include +#include =20 #include "devices.h" =20 diff --git a/arch/arm/mach-mmp/pxa910.h b/arch/arm/mach-mmp/pxa910.h index 6ace5a8aa15b..7d229214065a 100644 --- a/arch/arm/mach-mmp/pxa910.h +++ b/arch/arm/mach-mmp/pxa910.h @@ -3,13 +3,13 @@ #define __ASM_MACH_PXA910_H =20 extern void pxa910_timer_init(void); -extern void __init icu_init_irq(void); extern void __init pxa910_init_irq(void); =20 #include #include #include #include