irqchip updates for 4.19, take #2
- bcm7038: compilation fix for !SMP - stm32: fix teardown on probe error - s3c24xx: fix compilation warning - renesas-irqc: r8a774a1 support - tango: chained irq setup simplification - gic-v3: allow wake-up sources -----BEGIN PGP SIGNATURE----- iQJJBAABCAAzFiEEn9UcU+C1Yxj9lZw9I9DQutE9ekMFAluAC8YVHG1hcmMuenlu Z2llckBhcm0uY29tAAoJECPQ0LrRPXpDsvgP/1LWT1TS/mnxhfo71yueEI75X3Ju ZKQ8Za5o6nbu2CvwedEOtPVfAqp5Mg3wNJZKiN4H0db3dxftzqqp7ZQ1P7ZtheZC 69k0DKXQKN2BXURX3zDHhYA86kjrRcUEJfjF8Wi8Pe1UjrO4lm7fQZEVg9SiSigx TxFOakeSlHZqrC0DwEj5P7RpyAQhqb/7ygg9TNjlNgda8F98RmUNm38nEUj+IbPK UySYnHTe02Z5nD/9K+piB8gFgpTIfQlhWPA/kgODlsCJUuUY18RkB0CZzRuUBv3a 58qqpopuvH1jEVqWi3ffXr6m1kPF7Ys8GACC0laH2QgArT5OSGet9Hn7Edo5qh1p UPdvJEpuIsgQc1nPEcw84h1SGYg2lEtY0ZR4FdDnh3QQ45Kbkhx0HWLM/14YU/wI jutiUAZ7BstdlRwzmjNWwcW2pjhE3/FDBUTifQb/qvh4MEM9Mi4Jr3XARSTuW8o5 zZXmm47sOomuDl8RyIKvPuQRhmnN0ix86dba0bMIMYx2G9dRjb51o9gfN1nY/E6C bWayUZNmSaMAPi+xXBSw+O9mIqg2mwlLzq4EIKMHRUyMBqNL3mFIaefgT5yOLgMG 98Co+VLgpnp7eraAmHJWLrdf4QhiMD+cHkOD41s5eu0E+BGKLWS/cZdROa4jvucs 1JzPGTd0o4PHd5vV =Mr5O -----END PGP SIGNATURE----- Merge tag 'irqchip-4.19-2' of git://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms into irq/urgent Pull irqchip updates for 4.19, take #2 from Marc Zyngier: - bcm7038: compilation fix for !SMP - stm32: fix teardown on probe error - s3c24xx: fix compilation warning - renesas-irqc: r8a774a1 support - tango: chained irq setup simplification - gic-v3: allow wake-up sources
This commit is contained in:
commit
20b420dc42
@ -13,6 +13,7 @@ Required properties:
|
|||||||
- "renesas,irqc-r8a7792" (R-Car V2H)
|
- "renesas,irqc-r8a7792" (R-Car V2H)
|
||||||
- "renesas,irqc-r8a7793" (R-Car M2-N)
|
- "renesas,irqc-r8a7793" (R-Car M2-N)
|
||||||
- "renesas,irqc-r8a7794" (R-Car E2)
|
- "renesas,irqc-r8a7794" (R-Car E2)
|
||||||
|
- "renesas,intc-ex-r8a774a1" (RZ/G2M)
|
||||||
- "renesas,intc-ex-r8a7795" (R-Car H3)
|
- "renesas,intc-ex-r8a7795" (R-Car H3)
|
||||||
- "renesas,intc-ex-r8a7796" (R-Car M3-W)
|
- "renesas,intc-ex-r8a7796" (R-Car M3-W)
|
||||||
- "renesas,intc-ex-r8a77965" (R-Car M3-N)
|
- "renesas,intc-ex-r8a77965" (R-Car M3-N)
|
||||||
|
@ -217,6 +217,7 @@ static int bcm7038_l1_set_affinity(struct irq_data *d,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_SMP
|
||||||
static void bcm7038_l1_cpu_offline(struct irq_data *d)
|
static void bcm7038_l1_cpu_offline(struct irq_data *d)
|
||||||
{
|
{
|
||||||
struct cpumask *mask = irq_data_get_affinity_mask(d);
|
struct cpumask *mask = irq_data_get_affinity_mask(d);
|
||||||
@ -241,6 +242,7 @@ static void bcm7038_l1_cpu_offline(struct irq_data *d)
|
|||||||
}
|
}
|
||||||
irq_set_affinity_locked(d, &new_affinity, false);
|
irq_set_affinity_locked(d, &new_affinity, false);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static int __init bcm7038_l1_init_one(struct device_node *dn,
|
static int __init bcm7038_l1_init_one(struct device_node *dn,
|
||||||
unsigned int idx,
|
unsigned int idx,
|
||||||
@ -293,7 +295,9 @@ static struct irq_chip bcm7038_l1_irq_chip = {
|
|||||||
.irq_mask = bcm7038_l1_mask,
|
.irq_mask = bcm7038_l1_mask,
|
||||||
.irq_unmask = bcm7038_l1_unmask,
|
.irq_unmask = bcm7038_l1_unmask,
|
||||||
.irq_set_affinity = bcm7038_l1_set_affinity,
|
.irq_set_affinity = bcm7038_l1_set_affinity,
|
||||||
|
#ifdef CONFIG_SMP
|
||||||
.irq_cpu_offline = bcm7038_l1_cpu_offline,
|
.irq_cpu_offline = bcm7038_l1_cpu_offline,
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
static int bcm7038_l1_map(struct irq_domain *d, unsigned int virq,
|
static int bcm7038_l1_map(struct irq_domain *d, unsigned int virq,
|
||||||
|
@ -861,7 +861,9 @@ static struct irq_chip gic_chip = {
|
|||||||
.irq_set_affinity = gic_set_affinity,
|
.irq_set_affinity = gic_set_affinity,
|
||||||
.irq_get_irqchip_state = gic_irq_get_irqchip_state,
|
.irq_get_irqchip_state = gic_irq_get_irqchip_state,
|
||||||
.irq_set_irqchip_state = gic_irq_set_irqchip_state,
|
.irq_set_irqchip_state = gic_irq_set_irqchip_state,
|
||||||
.flags = IRQCHIP_SET_TYPE_MASKED,
|
.flags = IRQCHIP_SET_TYPE_MASKED |
|
||||||
|
IRQCHIP_SKIP_SET_WAKE |
|
||||||
|
IRQCHIP_MASK_ON_SUSPEND,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct irq_chip gic_eoimode1_chip = {
|
static struct irq_chip gic_eoimode1_chip = {
|
||||||
@ -874,7 +876,9 @@ static struct irq_chip gic_eoimode1_chip = {
|
|||||||
.irq_get_irqchip_state = gic_irq_get_irqchip_state,
|
.irq_get_irqchip_state = gic_irq_get_irqchip_state,
|
||||||
.irq_set_irqchip_state = gic_irq_set_irqchip_state,
|
.irq_set_irqchip_state = gic_irq_set_irqchip_state,
|
||||||
.irq_set_vcpu_affinity = gic_irq_set_vcpu_affinity,
|
.irq_set_vcpu_affinity = gic_irq_set_vcpu_affinity,
|
||||||
.flags = IRQCHIP_SET_TYPE_MASKED,
|
.flags = IRQCHIP_SET_TYPE_MASKED |
|
||||||
|
IRQCHIP_SKIP_SET_WAKE |
|
||||||
|
IRQCHIP_MASK_ON_SUSPEND,
|
||||||
};
|
};
|
||||||
|
|
||||||
#define GIC_ID_NR (1U << GICD_TYPER_ID_BITS(gic_data.rdists.gicd_typer))
|
#define GIC_ID_NR (1U << GICD_TYPER_ID_BITS(gic_data.rdists.gicd_typer))
|
||||||
|
@ -250,7 +250,7 @@ static int s3c_irqext0_type(struct irq_data *data, unsigned int type)
|
|||||||
void __iomem *gpcon_reg;
|
void __iomem *gpcon_reg;
|
||||||
unsigned long gpcon_offset, extint_offset;
|
unsigned long gpcon_offset, extint_offset;
|
||||||
|
|
||||||
if ((data->hwirq >= 0) && (data->hwirq <= 3)) {
|
if (data->hwirq <= 3) {
|
||||||
gpcon_reg = S3C2410_GPFCON;
|
gpcon_reg = S3C2410_GPFCON;
|
||||||
extint_reg = S3C24XX_EXTINT0;
|
extint_reg = S3C24XX_EXTINT0;
|
||||||
gpcon_offset = (data->hwirq) * 2;
|
gpcon_offset = (data->hwirq) * 2;
|
||||||
|
@ -603,17 +603,24 @@ stm32_exti_host_data *stm32_exti_host_init(const struct stm32_exti_drv_data *dd,
|
|||||||
sizeof(struct stm32_exti_chip_data),
|
sizeof(struct stm32_exti_chip_data),
|
||||||
GFP_KERNEL);
|
GFP_KERNEL);
|
||||||
if (!host_data->chips_data)
|
if (!host_data->chips_data)
|
||||||
return NULL;
|
goto free_host_data;
|
||||||
|
|
||||||
host_data->base = of_iomap(node, 0);
|
host_data->base = of_iomap(node, 0);
|
||||||
if (!host_data->base) {
|
if (!host_data->base) {
|
||||||
pr_err("%pOF: Unable to map registers\n", node);
|
pr_err("%pOF: Unable to map registers\n", node);
|
||||||
return NULL;
|
goto free_chips_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
stm32_host_data = host_data;
|
stm32_host_data = host_data;
|
||||||
|
|
||||||
return host_data;
|
return host_data;
|
||||||
|
|
||||||
|
free_chips_data:
|
||||||
|
kfree(host_data->chips_data);
|
||||||
|
free_host_data:
|
||||||
|
kfree(host_data);
|
||||||
|
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct
|
static struct
|
||||||
@ -665,10 +672,8 @@ static int __init stm32_exti_init(const struct stm32_exti_drv_data *drv_data,
|
|||||||
struct irq_domain *domain;
|
struct irq_domain *domain;
|
||||||
|
|
||||||
host_data = stm32_exti_host_init(drv_data, node);
|
host_data = stm32_exti_host_init(drv_data, node);
|
||||||
if (!host_data) {
|
if (!host_data)
|
||||||
ret = -ENOMEM;
|
return -ENOMEM;
|
||||||
goto out_free_mem;
|
|
||||||
}
|
|
||||||
|
|
||||||
domain = irq_domain_add_linear(node, drv_data->bank_nr * IRQS_PER_BANK,
|
domain = irq_domain_add_linear(node, drv_data->bank_nr * IRQS_PER_BANK,
|
||||||
&irq_exti_domain_ops, NULL);
|
&irq_exti_domain_ops, NULL);
|
||||||
@ -725,7 +730,6 @@ out_free_domain:
|
|||||||
irq_domain_remove(domain);
|
irq_domain_remove(domain);
|
||||||
out_unmap:
|
out_unmap:
|
||||||
iounmap(host_data->base);
|
iounmap(host_data->base);
|
||||||
out_free_mem:
|
|
||||||
kfree(host_data->chips_data);
|
kfree(host_data->chips_data);
|
||||||
kfree(host_data);
|
kfree(host_data);
|
||||||
return ret;
|
return ret;
|
||||||
@ -752,10 +756,8 @@ __init stm32_exti_hierarchy_init(const struct stm32_exti_drv_data *drv_data,
|
|||||||
}
|
}
|
||||||
|
|
||||||
host_data = stm32_exti_host_init(drv_data, node);
|
host_data = stm32_exti_host_init(drv_data, node);
|
||||||
if (!host_data) {
|
if (!host_data)
|
||||||
ret = -ENOMEM;
|
return -ENOMEM;
|
||||||
goto out_free_mem;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < drv_data->bank_nr; i++)
|
for (i = 0; i < drv_data->bank_nr; i++)
|
||||||
stm32_exti_chip_init(host_data, i, node);
|
stm32_exti_chip_init(host_data, i, node);
|
||||||
@ -777,7 +779,6 @@ __init stm32_exti_hierarchy_init(const struct stm32_exti_drv_data *drv_data,
|
|||||||
|
|
||||||
out_unmap:
|
out_unmap:
|
||||||
iounmap(host_data->base);
|
iounmap(host_data->base);
|
||||||
out_free_mem:
|
|
||||||
kfree(host_data->chips_data);
|
kfree(host_data->chips_data);
|
||||||
kfree(host_data);
|
kfree(host_data);
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -205,8 +205,7 @@ static int __init tangox_irq_init(void __iomem *base, struct resource *baseres,
|
|||||||
|
|
||||||
tangox_irq_domain_init(dom);
|
tangox_irq_domain_init(dom);
|
||||||
|
|
||||||
irq_set_chained_handler(irq, tangox_irq_handler);
|
irq_set_chained_handler_and_data(irq, tangox_irq_handler, dom);
|
||||||
irq_set_handler_data(irq, dom);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user