Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a324ca9c authored by Thomas Gleixner's avatar Thomas Gleixner
Browse files

Merge tag 'irqchip-5.1' of...

Merge tag 'irqchip-5.1' of git://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms into irq/core

Pull irqchip updates from Marc Zyngier

- Core pseudo-NMI handling code
- Allow the default irq domain to be retrieved
- A new interrupt controller for the Loongson LS1X platform
- Affinity support for the SiFive PLIC
- Better support for the iMX irqsteer driver
- NUMA aware memory allocations for GICv3
- A handful of other fixes (i8259, GICv3, PLIC)
parents 4e6b26d2 28528fca
Loading
Loading
Loading
Loading
+6 −5
Original line number Diff line number Diff line
@@ -6,8 +6,9 @@ Required properties:
	- "fsl,imx8m-irqsteer"
	- "fsl,imx-irqsteer"
- reg: Physical base address and size of registers.
- interrupts: Should contain the parent interrupt line used to multiplex the
  input interrupts.
- interrupts: Should contain the up to 8 parent interrupt lines used to
  multiplex the input interrupts. They should be specified sequentially
  from output 0 to 7.
- clocks: Should contain one clock for entry in clock-names
  see Documentation/devicetree/bindings/clock/clock-bindings.txt
- clock-names:
@@ -16,8 +17,8 @@ Required properties:
- #interrupt-cells: Specifies the number of cells needed to encode an
  interrupt source. The value must be 1.
- fsl,channel: The output channel that all input IRQs should be steered into.
- fsl,irq-groups: Number of IRQ groups managed by this controller instance.
  Each group manages 64 input interrupts.
- fsl,num-irqs: Number of input interrupts of this channel.
  Should be multiple of 32 input interrupts and up to 512 interrupts.

Example:

@@ -28,7 +29,7 @@ Example:
		clocks = <&clk IMX8MQ_CLK_DISP_APB_ROOT>;
		clock-names = "ipg";
		fsl,channel = <0>;
		fsl,irq-groups = <1>;
		fsl,num-irqs = <64>;
		interrupt-controller;
		#interrupt-cells = <1>;
	};
+24 −0
Original line number Diff line number Diff line
Loongson ls1x Interrupt Controller

Required properties:

- compatible : should be "loongson,ls1x-intc". Valid strings are:

- reg : Specifies base physical address and size of the registers.
- interrupt-controller : Identifies the node as an interrupt controller
- #interrupt-cells : Specifies the number of cells needed to encode an
  interrupt source. The value shall be 2.
- interrupts : Specifies the CPU interrupt the controller is connected to.

Example:

intc: interrupt-controller@1fd01040 {
	compatible = "loongson,ls1x-intc";
	reg = <0x1fd01040 0x18>;

	interrupt-controller;
	#interrupt-cells = <2>;

	interrupt-parent = <&cpu_intc>;
	interrupts = <2>;
};
+9 −0
Original line number Diff line number Diff line
@@ -406,6 +406,15 @@ config IMX_IRQSTEER
	help
	  Support for the i.MX IRQSTEER interrupt multiplexer/remapper.

config LS1X_IRQ
	bool "Loongson-1 Interrupt Controller"
	depends on MACH_LOONGSON32
	default y
	select IRQ_DOMAIN
	select GENERIC_IRQ_CHIP
	help
	  Support for the Loongson-1 platform Interrupt Controller.

endmenu

config SIFIVE_PLIC
+1 −0
Original line number Diff line number Diff line
@@ -94,3 +94,4 @@ obj-$(CONFIG_CSKY_APB_INTC) += irq-csky-apb-intc.o
obj-$(CONFIG_SIFIVE_PLIC)		+= irq-sifive-plic.o
obj-$(CONFIG_IMX_IRQSTEER)		+= irq-imx-irqsteer.o
obj-$(CONFIG_MADERA_IRQ)		+= irq-madera.o
obj-$(CONFIG_LS1X_IRQ)			+= irq-ls1x.o
+6 −4
Original line number Diff line number Diff line
@@ -129,8 +129,9 @@ static void brcmstb_l2_intc_suspend(struct irq_data *d)
	struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d);
	struct irq_chip_type *ct = irq_data_get_chip_type(d);
	struct brcmstb_l2_intc_data *b = gc->private;
	unsigned long flags;

	irq_gc_lock(gc);
	irq_gc_lock_irqsave(gc, flags);
	/* Save the current mask */
	b->saved_mask = irq_reg_readl(gc, ct->regs.mask);

@@ -139,7 +140,7 @@ static void brcmstb_l2_intc_suspend(struct irq_data *d)
		irq_reg_writel(gc, ~gc->wake_active, ct->regs.disable);
		irq_reg_writel(gc, gc->wake_active, ct->regs.enable);
	}
	irq_gc_unlock(gc);
	irq_gc_unlock_irqrestore(gc, flags);
}

static void brcmstb_l2_intc_resume(struct irq_data *d)
@@ -147,8 +148,9 @@ static void brcmstb_l2_intc_resume(struct irq_data *d)
	struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d);
	struct irq_chip_type *ct = irq_data_get_chip_type(d);
	struct brcmstb_l2_intc_data *b = gc->private;
	unsigned long flags;

	irq_gc_lock(gc);
	irq_gc_lock_irqsave(gc, flags);
	if (ct->chip.irq_ack) {
		/* Clear unmasked non-wakeup interrupts */
		irq_reg_writel(gc, ~b->saved_mask & ~gc->wake_active,
@@ -158,7 +160,7 @@ static void brcmstb_l2_intc_resume(struct irq_data *d)
	/* Restore the saved mask */
	irq_reg_writel(gc, b->saved_mask, ct->regs.disable);
	irq_reg_writel(gc, ~b->saved_mask, ct->regs.enable);
	irq_gc_unlock(gc);
	irq_gc_unlock_irqrestore(gc, flags);
}

static int __init brcmstb_l2_intc_of_init(struct device_node *np,
Loading