Commit 15a98444 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'irq-urgent-2020-11-08' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull irq fixes from Thomas Gleixner:
 "A set of fixes for interrupt chip drivers:

   - Fix the fallout of the IPI as interrupt conversion in Kconfig and
     the BCM2836 interrupt chip driver

   - Fixes for interrupt affinity setting and the handling of
     hierarchical irq domains in the SiFive PLIC driver

   - Make the unmapped event handling in the TI SCI driver work
     correctly

   - A few minor fixes and cleanups in various chip drivers and Kconfig"

* tag 'irq-urgent-2020-11-08' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  dt-bindings: irqchip: ti, sci-inta: Fix diagram indentation for unmapped events
  irqchip/ti-sci-inta: Add support for unmapped event handling
  dt-bindings: irqchip: ti, sci-inta: Update for unmapped event handling
  irqchip/renesas-intc-irqpin: Merge irlm_bit and needs_irlm
  irqchip/sifive-plic: Fix chip_data access within a hierarchy
  irqchip/sifive-plic: Fix broken irq_set_affinity() callback
  irqchip/stm32-exti: Add all LP timer exti direct events support
  irqchip/bcm2836: Fix missing __init annotation
  irqchip/mips: Drop selection of IRQ_DOMAIN_HIERARCHY
  irqchip/mst: Make mst_intc_of_init static
  irqchip/mst: MST_IRQ should depend on ARCH_MEDIATEK or ARCH_MSTARV7
  genirq: Let GENERIC_IRQ_IPI select IRQ_DOMAIN_HIERARCHY
parents 6a8d0d28 82768a86
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -32,6 +32,11 @@ description: |
                       | | vint  | bit  |  | 0 |.....|63| vintx  |
                       | +--------------+  +------------+        |
                       |                                         |
                       |      Unmap                              |
                       | +--------------+                        |
  Unmapped events ---->| |   umapidx    |-------------------------> Globalevents
                       | +--------------+                        |
                       |                                         |
                       +-----------------------------------------+

  Configuration of these Intmap registers that maps global events to vint is
@@ -70,6 +75,11 @@ properties:
        - description: |
            "limit" specifies the limit for translation

  ti,unmapped-event-sources:
    $ref: /schemas/types.yaml#definitions/phandle-array
    description:
      Array of phandles to DMA controllers where the unmapped events originate.

required:
  - compatible
  - reg
+1 −2
Original line number Diff line number Diff line
@@ -180,7 +180,6 @@ config IRQ_MIPS_CPU
	select GENERIC_IRQ_CHIP
	select GENERIC_IRQ_IPI if SYS_SUPPORTS_MULTITHREADING
	select IRQ_DOMAIN
	select IRQ_DOMAIN_HIERARCHY if GENERIC_IRQ_IPI
	select GENERIC_IRQ_EFFECTIVE_AFF_MASK

config CLPS711X_IRQCHIP
@@ -315,7 +314,6 @@ config KEYSTONE_IRQ
config MIPS_GIC
	bool
	select GENERIC_IRQ_IPI
	select IRQ_DOMAIN_HIERARCHY
	select MIPS_CM

config INGENIC_IRQ
@@ -591,6 +589,7 @@ config LOONGSON_PCH_MSI

config MST_IRQ
	bool "MStar Interrupt Controller"
	depends on ARCH_MEDIATEK || ARCH_MSTARV7 || COMPILE_TEST
	default ARCH_MEDIATEK
	select IRQ_DOMAIN
	select IRQ_DOMAIN_HIERARCHY
+1 −1
Original line number Diff line number Diff line
@@ -244,7 +244,7 @@ static int bcm2836_cpu_dying(unsigned int cpu)

#define BITS_PER_MBOX	32

static void bcm2836_arm_irqchip_smp_init(void)
static void __init bcm2836_arm_irqchip_smp_init(void)
{
	struct irq_fwspec ipi_fwspec = {
		.fwnode		= intc.domain->fwnode,
+2 −2
Original line number Diff line number Diff line
@@ -154,8 +154,8 @@ static const struct irq_domain_ops mst_intc_domain_ops = {
	.free		= irq_domain_free_irqs_common,
};

int __init
mst_intc_of_init(struct device_node *dn, struct device_node *parent)
static int __init mst_intc_of_init(struct device_node *dn,
				   struct device_node *parent)
{
	struct irq_domain *domain, *domain_parent;
	struct mst_intc_chip_data *cd;
+3 −5
Original line number Diff line number Diff line
@@ -71,8 +71,7 @@ struct intc_irqpin_priv {
};

struct intc_irqpin_config {
	unsigned int irlm_bit;
	unsigned needs_irlm:1;
	int irlm_bit;		/* -1 if non-existent */
};

static unsigned long intc_irqpin_read32(void __iomem *iomem)
@@ -349,11 +348,10 @@ static const struct irq_domain_ops intc_irqpin_irq_domain_ops = {

static const struct intc_irqpin_config intc_irqpin_irlm_r8a777x = {
	.irlm_bit = 23, /* ICR0.IRLM0 */
	.needs_irlm = 1,
};

static const struct intc_irqpin_config intc_irqpin_rmobile = {
	.needs_irlm = 0,
	.irlm_bit = -1,
};

static const struct of_device_id intc_irqpin_dt_ids[] = {
@@ -470,7 +468,7 @@ static int intc_irqpin_probe(struct platform_device *pdev)
	}

	/* configure "individual IRQ mode" where needed */
	if (config && config->needs_irlm) {
	if (config && config->irlm_bit >= 0) {
		if (io[INTC_IRQPIN_REG_IRLM])
			intc_irqpin_read_modify_write(p, INTC_IRQPIN_REG_IRLM,
						      config->irlm_bit, 1, 1);
Loading