Skip to content

Commit 3d3b44a

Browse files
committed
Merge tag 'irq-core-2020-01-28' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull irq updates from Thomas Gleixner: "The interrupt departement provides: - A mechanism to shield isolated tasks from managed interrupts: The affinity of managed interrupts is completely controlled by the kernel and user space has no influence on them. The reason is that the automatically assigned affinity correlates to the multi-queue CPU handling of block devices. If the generated affinity mask spaws both housekeeping and isolated CPUs the interrupt could be routed to an isolated CPU which would then be disturbed by I/O submitted by a housekeeping CPU. The new mechamism ensures that as long as one housekeeping CPU is online in the assigned affinity mask the interrupt is routed to a housekeeping CPU. If there is no online housekeeping CPU in the affinity mask, then the interrupt is routed to an isolated CPU to keep the device queue intact, but unless the isolated CPU submits I/O by itself these interrupts are not raised. - A small addon to the device tree irqdomain core code to avoid duplication in irq chip drivers - Conversion of the SiFive PLIC to hierarchical domains - The usual pile of new irq chip drivers: SiFive GPIO, Aspeed SCI, NXP INTMUX, Meson A1 GPIO - The first cut of support for the new ARM GICv4.1 - The usual pile of fixes and improvements in core and driver code" * tag 'irq-core-2020-01-28' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (33 commits) genirq, sched/isolation: Isolate from handling managed interrupts irqchip/gic-v4.1: Allow direct invalidation of VLPIs irqchip/gic-v4.1: Suppress per-VLPI doorbell irqchip/gic-v4.1: Add VPE INVALL callback irqchip/gic-v4.1: Add VPE eviction callback irqchip/gic-v4.1: Add VPE residency callback irqchip/gic-v4.1: Add mask/unmask doorbell callbacks irqchip/gic-v4.1: Plumb skeletal VPE irqchip irqchip/gic-v4.1: Implement the v4.1 flavour of VMOVP irqchip/gic-v4.1: Don't use the VPE proxy if RVPEID is set irqchip/gic-v4.1: Implement the v4.1 flavour of VMAPP irqchip/gic-v4.1: VPE table (aka GICR_VPROPBASER) allocation irqchip/gic-v3: Add GICv4.1 VPEID size discovery irqchip/gic-v3: Detect GICv4.1 supporting RVPEID irqchip/gic-v3-its: Fix get_vlpi_map() breakage with doorbells irqdomain: Fix a memory leak in irq_domain_push_irq() irqchip: Add NXP INTMUX interrupt multiplexer support dt-bindings: interrupt-controller: Add binding for NXP INTMUX interrupt multiplexer irqchip: Define EXYNOS_IRQ_COMBINER irqchip/meson-gpio: Add support for meson a1 SoCs ...
2 parents ab67f60 + 43ee744 commit 3d3b44a

File tree

33 files changed

+2024
-111
lines changed

33 files changed

+2024
-111
lines changed

Documentation/admin-guide/kernel-parameters.txt

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1934,9 +1934,31 @@
19341934
<cpu number> begins at 0 and the maximum value is
19351935
"number of CPUs in system - 1".
19361936

1937-
The format of <cpu-list> is described above.
1938-
1937+
managed_irq
1938+
1939+
Isolate from being targeted by managed interrupts
1940+
which have an interrupt mask containing isolated
1941+
CPUs. The affinity of managed interrupts is
1942+
handled by the kernel and cannot be changed via
1943+
the /proc/irq/* interfaces.
1944+
1945+
This isolation is best effort and only effective
1946+
if the automatically assigned interrupt mask of a
1947+
device queue contains isolated and housekeeping
1948+
CPUs. If housekeeping CPUs are online then such
1949+
interrupts are directed to the housekeeping CPU
1950+
so that IO submitted on the housekeeping CPU
1951+
cannot disturb the isolated CPU.
1952+
1953+
If a queue's affinity mask contains only isolated
1954+
CPUs then this parameter has no effect on the
1955+
interrupt routing decision, though interrupts are
1956+
only delivered when tasks running on those
1957+
isolated CPUs submit IO. IO submitted on
1958+
housekeeping CPUs has no influence on those
1959+
queues.
19391960

1961+
The format of <cpu-list> is described above.
19401962

19411963
iucv= [HW,NET]
19421964

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
2+
%YAML 1.2
3+
---
4+
$id: http://devicetree.org/schemas/gpio/sifive,gpio.yaml#
5+
$schema: http://devicetree.org/meta-schemas/core.yaml#
6+
7+
title: SiFive GPIO controller
8+
9+
maintainers:
10+
- Yash Shah <[email protected]>
11+
- Paul Walmsley <[email protected]>
12+
13+
properties:
14+
compatible:
15+
items:
16+
- const: sifive,fu540-c000-gpio
17+
- const: sifive,gpio0
18+
19+
reg:
20+
maxItems: 1
21+
22+
interrupts:
23+
description:
24+
interrupt mapping one per GPIO. Maximum 16 GPIOs.
25+
minItems: 1
26+
maxItems: 16
27+
28+
interrupt-controller: true
29+
30+
"#interrupt-cells":
31+
const: 2
32+
33+
clocks:
34+
maxItems: 1
35+
36+
"#gpio-cells":
37+
const: 2
38+
39+
gpio-controller: true
40+
41+
required:
42+
- compatible
43+
- reg
44+
- interrupts
45+
- interrupt-controller
46+
- "#interrupt-cells"
47+
- clocks
48+
- "#gpio-cells"
49+
- gpio-controller
50+
51+
additionalProperties: false
52+
53+
examples:
54+
- |
55+
#include <dt-bindings/clock/sifive-fu540-prci.h>
56+
gpio@10060000 {
57+
compatible = "sifive,fu540-c000-gpio", "sifive,gpio0";
58+
interrupt-parent = <&plic>;
59+
interrupts = <7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22>;
60+
reg = <0x0 0x10060000 0x0 0x1000>;
61+
clocks = <&tlclk PRCI_CLK_TLCLK>;
62+
gpio-controller;
63+
#gpio-cells = <2>;
64+
interrupt-controller;
65+
#interrupt-cells = <2>;
66+
};
67+
68+
...

Documentation/devicetree/bindings/interrupt-controller/amlogic,meson-gpio-intc.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ Required properties:
1717
"amlogic,meson-axg-gpio-intc" for AXG SoCs (A113D, A113X)
1818
"amlogic,meson-g12a-gpio-intc" for G12A SoCs (S905D2, S905X2, S905Y2)
1919
"amlogic,meson-sm1-gpio-intc" for SM1 SoCs (S905D3, S905X3, S905Y3)
20+
"amlogic,meson-a1-gpio-intc" for A1 SoCs (A113L)
2021
- reg : Specifies base physical address and size of the registers.
2122
- interrupt-controller : Identifies the node as an interrupt controller.
2223
- #interrupt-cells : Specifies the number of cells needed to encode an
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
Aspeed AST25XX and AST26XX SCU Interrupt Controller
2+
3+
Required Properties:
4+
- #interrupt-cells : must be 1
5+
- compatible : must be "aspeed,ast2500-scu-ic",
6+
"aspeed,ast2600-scu-ic0" or
7+
"aspeed,ast2600-scu-ic1"
8+
- interrupts : interrupt from the parent controller
9+
- interrupt-controller : indicates that the controller receives and
10+
fires new interrupts for child busses
11+
12+
Example:
13+
14+
syscon@1e6e2000 {
15+
ranges = <0 0x1e6e2000 0x1a8>;
16+
17+
scu_ic: interrupt-controller@18 {
18+
#interrupt-cells = <1>;
19+
compatible = "aspeed,ast2500-scu-ic";
20+
interrupts = <21>;
21+
interrupt-controller;
22+
};
23+
};
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
2+
%YAML 1.2
3+
---
4+
$id: http://devicetree.org/schemas/interrupt-controller/fsl,intmux.yaml#
5+
$schema: http://devicetree.org/meta-schemas/core.yaml#
6+
7+
title: Freescale INTMUX interrupt multiplexer
8+
9+
maintainers:
10+
- Joakim Zhang <[email protected]>
11+
12+
properties:
13+
compatible:
14+
const: fsl,imx-intmux
15+
16+
reg:
17+
maxItems: 1
18+
19+
interrupts:
20+
minItems: 1
21+
maxItems: 8
22+
description: |
23+
Should contain the parent interrupt lines (up to 8) used to multiplex
24+
the input interrupts.
25+
26+
interrupt-controller: true
27+
28+
'#interrupt-cells':
29+
const: 2
30+
description: |
31+
The 1st cell is hw interrupt number, the 2nd cell is channel index.
32+
33+
clocks:
34+
description: ipg clock.
35+
36+
clock-names:
37+
const: ipg
38+
39+
required:
40+
- compatible
41+
- reg
42+
- interrupts
43+
- interrupt-controller
44+
- '#interrupt-cells'
45+
- clocks
46+
- clock-names
47+
48+
additionalProperties: false
49+
50+
examples:
51+
- |
52+
interrupt-controller@37400000 {
53+
compatible = "fsl,imx-intmux";
54+
reg = <0x37400000 0x1000>;
55+
interrupts = <0 16 4>,
56+
<0 17 4>,
57+
<0 18 4>,
58+
<0 19 4>,
59+
<0 20 4>,
60+
<0 21 4>,
61+
<0 22 4>,
62+
<0 23 4>;
63+
interrupt-controller;
64+
interrupt-parent = <&gic>;
65+
#interrupt-cells = <2>;
66+
clocks = <&clk>;
67+
clock-names = "ipg";
68+
};

MAINTAINERS

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2704,6 +2704,14 @@ S: Maintained
27042704
F: drivers/pinctrl/aspeed/
27052705
F: Documentation/devicetree/bindings/pinctrl/aspeed,*
27062706

2707+
ASPEED SCU INTERRUPT CONTROLLER DRIVER
2708+
M: Eddie James <[email protected]>
2709+
L: [email protected] (moderated for non-subscribers)
2710+
S: Maintained
2711+
F: Documentation/devicetree/bindings/interrupt-controller/aspeed,ast2xxx-scu-ic.txt
2712+
F: drivers/irqchip/irq-aspeed-scu-ic.c
2713+
F: include/dt-bindings/interrupt-controller/aspeed-scu-ic.h
2714+
27072715
ASPEED VIDEO ENGINE DRIVER
27082716
M: Eddie James <[email protected]>
27092717

arch/arm/include/asm/arch_gicv3.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#ifndef __ASSEMBLY__
1111

1212
#include <linux/io.h>
13+
#include <linux/io-64-nonatomic-lo-hi.h>
1314
#include <asm/barrier.h>
1415
#include <asm/cacheflush.h>
1516
#include <asm/cp15.h>
@@ -327,6 +328,7 @@ static inline u64 __gic_readq_nonatomic(const volatile void __iomem *addr)
327328
/*
328329
* GITS_VPROPBASER - hi and lo bits may be accessed independently.
329330
*/
331+
#define gits_read_vpropbaser(c) __gic_readq_nonatomic(c)
330332
#define gits_write_vpropbaser(v, c) __gic_writeq_nonatomic(v, c)
331333

332334
/*

arch/arm/mach-exynos/Kconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ menuconfig ARCH_EXYNOS
1212
select ARCH_SUPPORTS_BIG_ENDIAN
1313
select ARM_AMBA
1414
select ARM_GIC
15+
select EXYNOS_IRQ_COMBINER
1516
select COMMON_CLK_SAMSUNG
1617
select EXYNOS_ASV
1718
select EXYNOS_CHIPID

arch/arm64/include/asm/arch_gicv3.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ static inline u32 gic_read_rpr(void)
141141
#define gicr_read_pendbaser(c) readq_relaxed(c)
142142

143143
#define gits_write_vpropbaser(v, c) writeq_relaxed(v, c)
144+
#define gits_read_vpropbaser(c) readq_relaxed(c)
144145

145146
#define gits_write_vpendbaser(v, c) writeq_relaxed(v, c)
146147
#define gits_read_vpendbaser(c) readq_relaxed(c)

drivers/gpio/Kconfig

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -479,6 +479,15 @@ config GPIO_SAMA5D2_PIOBU
479479
The difference from regular GPIOs is that they
480480
maintain their value during backup/self-refresh.
481481

482+
config GPIO_SIFIVE
483+
bool "SiFive GPIO support"
484+
depends on OF_GPIO && IRQ_DOMAIN_HIERARCHY
485+
select GPIO_GENERIC
486+
select GPIOLIB_IRQCHIP
487+
select REGMAP_MMIO
488+
help
489+
Say yes here to support the GPIO device on SiFive SoCs.
490+
482491
config GPIO_SIOX
483492
tristate "SIOX GPIO support"
484493
depends on SIOX

0 commit comments

Comments
 (0)