diff options
| author | Thomas Gleixner <tglx@linutronix.de> | 2018-08-24 10:06:42 -0400 |
|---|---|---|
| committer | Thomas Gleixner <tglx@linutronix.de> | 2018-08-24 10:06:42 -0400 |
| commit | 20b420dc42629f115a0339a2474aec419ea32ea0 (patch) | |
| tree | a32fcaa846d4e3daf2daf0ae1826ac2804d5a908 | |
| parent | f19f5c49bbc3ffcc9126cc245fc1b24cc29f4a37 (diff) | |
| parent | 4110b5cbb014ebaaeb3d18ac8b98470b7251847d (diff) | |
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
| -rw-r--r-- | Documentation/devicetree/bindings/interrupt-controller/renesas,irqc.txt | 1 | ||||
| -rw-r--r-- | drivers/irqchip/irq-bcm7038-l1.c | 4 | ||||
| -rw-r--r-- | drivers/irqchip/irq-gic-v3.c | 8 | ||||
| -rw-r--r-- | drivers/irqchip/irq-s3c24xx.c | 2 | ||||
| -rw-r--r-- | drivers/irqchip/irq-stm32-exti.c | 25 | ||||
| -rw-r--r-- | drivers/irqchip/irq-tango.c | 3 |
6 files changed, 26 insertions, 17 deletions
diff --git a/Documentation/devicetree/bindings/interrupt-controller/renesas,irqc.txt b/Documentation/devicetree/bindings/interrupt-controller/renesas,irqc.txt index 697ca2f26d1b..a046ed374d80 100644 --- a/Documentation/devicetree/bindings/interrupt-controller/renesas,irqc.txt +++ b/Documentation/devicetree/bindings/interrupt-controller/renesas,irqc.txt | |||
| @@ -13,6 +13,7 @@ Required properties: | |||
| 13 | - "renesas,irqc-r8a7792" (R-Car V2H) | 13 | - "renesas,irqc-r8a7792" (R-Car V2H) |
| 14 | - "renesas,irqc-r8a7793" (R-Car M2-N) | 14 | - "renesas,irqc-r8a7793" (R-Car M2-N) |
| 15 | - "renesas,irqc-r8a7794" (R-Car E2) | 15 | - "renesas,irqc-r8a7794" (R-Car E2) |
| 16 | - "renesas,intc-ex-r8a774a1" (RZ/G2M) | ||
| 16 | - "renesas,intc-ex-r8a7795" (R-Car H3) | 17 | - "renesas,intc-ex-r8a7795" (R-Car H3) |
| 17 | - "renesas,intc-ex-r8a7796" (R-Car M3-W) | 18 | - "renesas,intc-ex-r8a7796" (R-Car M3-W) |
| 18 | - "renesas,intc-ex-r8a77965" (R-Car M3-N) | 19 | - "renesas,intc-ex-r8a77965" (R-Car M3-N) |
diff --git a/drivers/irqchip/irq-bcm7038-l1.c b/drivers/irqchip/irq-bcm7038-l1.c index faf734ff4cf3..0f6e30e9009d 100644 --- a/drivers/irqchip/irq-bcm7038-l1.c +++ b/drivers/irqchip/irq-bcm7038-l1.c | |||
| @@ -217,6 +217,7 @@ static int bcm7038_l1_set_affinity(struct irq_data *d, | |||
| 217 | return 0; | 217 | return 0; |
| 218 | } | 218 | } |
| 219 | 219 | ||
| 220 | #ifdef CONFIG_SMP | ||
| 220 | static void bcm7038_l1_cpu_offline(struct irq_data *d) | 221 | static void bcm7038_l1_cpu_offline(struct irq_data *d) |
| 221 | { | 222 | { |
| 222 | struct cpumask *mask = irq_data_get_affinity_mask(d); | 223 | struct cpumask *mask = irq_data_get_affinity_mask(d); |
| @@ -241,6 +242,7 @@ static void bcm7038_l1_cpu_offline(struct irq_data *d) | |||
| 241 | } | 242 | } |
| 242 | irq_set_affinity_locked(d, &new_affinity, false); | 243 | irq_set_affinity_locked(d, &new_affinity, false); |
| 243 | } | 244 | } |
| 245 | #endif | ||
| 244 | 246 | ||
| 245 | static int __init bcm7038_l1_init_one(struct device_node *dn, | 247 | static int __init bcm7038_l1_init_one(struct device_node *dn, |
| 246 | unsigned int idx, | 248 | unsigned int idx, |
| @@ -293,7 +295,9 @@ static struct irq_chip bcm7038_l1_irq_chip = { | |||
| 293 | .irq_mask = bcm7038_l1_mask, | 295 | .irq_mask = bcm7038_l1_mask, |
| 294 | .irq_unmask = bcm7038_l1_unmask, | 296 | .irq_unmask = bcm7038_l1_unmask, |
| 295 | .irq_set_affinity = bcm7038_l1_set_affinity, | 297 | .irq_set_affinity = bcm7038_l1_set_affinity, |
| 298 | #ifdef CONFIG_SMP | ||
| 296 | .irq_cpu_offline = bcm7038_l1_cpu_offline, | 299 | .irq_cpu_offline = bcm7038_l1_cpu_offline, |
| 300 | #endif | ||
| 297 | }; | 301 | }; |
| 298 | 302 | ||
| 299 | static int bcm7038_l1_map(struct irq_domain *d, unsigned int virq, | 303 | static int bcm7038_l1_map(struct irq_domain *d, unsigned int virq, |
diff --git a/drivers/irqchip/irq-gic-v3.c b/drivers/irqchip/irq-gic-v3.c index e214181b77b7..d5912f1ec884 100644 --- a/drivers/irqchip/irq-gic-v3.c +++ b/drivers/irqchip/irq-gic-v3.c | |||
| @@ -861,7 +861,9 @@ static struct irq_chip gic_chip = { | |||
| 861 | .irq_set_affinity = gic_set_affinity, | 861 | .irq_set_affinity = gic_set_affinity, |
| 862 | .irq_get_irqchip_state = gic_irq_get_irqchip_state, | 862 | .irq_get_irqchip_state = gic_irq_get_irqchip_state, |
| 863 | .irq_set_irqchip_state = gic_irq_set_irqchip_state, | 863 | .irq_set_irqchip_state = gic_irq_set_irqchip_state, |
| 864 | .flags = IRQCHIP_SET_TYPE_MASKED, | 864 | .flags = IRQCHIP_SET_TYPE_MASKED | |
| 865 | IRQCHIP_SKIP_SET_WAKE | | ||
| 866 | IRQCHIP_MASK_ON_SUSPEND, | ||
| 865 | }; | 867 | }; |
| 866 | 868 | ||
| 867 | static struct irq_chip gic_eoimode1_chip = { | 869 | static struct irq_chip gic_eoimode1_chip = { |
| @@ -874,7 +876,9 @@ static struct irq_chip gic_eoimode1_chip = { | |||
| 874 | .irq_get_irqchip_state = gic_irq_get_irqchip_state, | 876 | .irq_get_irqchip_state = gic_irq_get_irqchip_state, |
| 875 | .irq_set_irqchip_state = gic_irq_set_irqchip_state, | 877 | .irq_set_irqchip_state = gic_irq_set_irqchip_state, |
| 876 | .irq_set_vcpu_affinity = gic_irq_set_vcpu_affinity, | 878 | .irq_set_vcpu_affinity = gic_irq_set_vcpu_affinity, |
| 877 | .flags = IRQCHIP_SET_TYPE_MASKED, | 879 | .flags = IRQCHIP_SET_TYPE_MASKED | |
| 880 | IRQCHIP_SKIP_SET_WAKE | | ||
| 881 | IRQCHIP_MASK_ON_SUSPEND, | ||
| 878 | }; | 882 | }; |
| 879 | 883 | ||
| 880 | #define GIC_ID_NR (1U << GICD_TYPER_ID_BITS(gic_data.rdists.gicd_typer)) | 884 | #define GIC_ID_NR (1U << GICD_TYPER_ID_BITS(gic_data.rdists.gicd_typer)) |
diff --git a/drivers/irqchip/irq-s3c24xx.c b/drivers/irqchip/irq-s3c24xx.c index f6fd57ebe6e6..c19766fe8a1a 100644 --- a/drivers/irqchip/irq-s3c24xx.c +++ b/drivers/irqchip/irq-s3c24xx.c | |||
| @@ -250,7 +250,7 @@ static int s3c_irqext0_type(struct irq_data *data, unsigned int type) | |||
| 250 | void __iomem *gpcon_reg; | 250 | void __iomem *gpcon_reg; |
| 251 | unsigned long gpcon_offset, extint_offset; | 251 | unsigned long gpcon_offset, extint_offset; |
| 252 | 252 | ||
| 253 | if ((data->hwirq >= 0) && (data->hwirq <= 3)) { | 253 | if (data->hwirq <= 3) { |
| 254 | gpcon_reg = S3C2410_GPFCON; | 254 | gpcon_reg = S3C2410_GPFCON; |
| 255 | extint_reg = S3C24XX_EXTINT0; | 255 | extint_reg = S3C24XX_EXTINT0; |
| 256 | gpcon_offset = (data->hwirq) * 2; | 256 | gpcon_offset = (data->hwirq) * 2; |
diff --git a/drivers/irqchip/irq-stm32-exti.c b/drivers/irqchip/irq-stm32-exti.c index 3df527fcf4e1..0a2088e12d96 100644 --- a/drivers/irqchip/irq-stm32-exti.c +++ b/drivers/irqchip/irq-stm32-exti.c | |||
| @@ -603,17 +603,24 @@ stm32_exti_host_data *stm32_exti_host_init(const struct stm32_exti_drv_data *dd, | |||
| 603 | sizeof(struct stm32_exti_chip_data), | 603 | sizeof(struct stm32_exti_chip_data), |
| 604 | GFP_KERNEL); | 604 | GFP_KERNEL); |
| 605 | if (!host_data->chips_data) | 605 | if (!host_data->chips_data) |
| 606 | return NULL; | 606 | goto free_host_data; |
| 607 | 607 | ||
| 608 | host_data->base = of_iomap(node, 0); | 608 | host_data->base = of_iomap(node, 0); |
| 609 | if (!host_data->base) { | 609 | if (!host_data->base) { |
| 610 | pr_err("%pOF: Unable to map registers\n", node); | 610 | pr_err("%pOF: Unable to map registers\n", node); |
| 611 | return NULL; | 611 | goto free_chips_data; |
| 612 | } | 612 | } |
| 613 | 613 | ||
| 614 | stm32_host_data = host_data; | 614 | stm32_host_data = host_data; |
| 615 | 615 | ||
| 616 | return host_data; | 616 | return host_data; |
| 617 | |||
| 618 | free_chips_data: | ||
| 619 | kfree(host_data->chips_data); | ||
| 620 | free_host_data: | ||
| 621 | kfree(host_data); | ||
| 622 | |||
| 623 | return NULL; | ||
| 617 | } | 624 | } |
| 618 | 625 | ||
| 619 | static struct | 626 | static struct |
| @@ -665,10 +672,8 @@ static int __init stm32_exti_init(const struct stm32_exti_drv_data *drv_data, | |||
| 665 | struct irq_domain *domain; | 672 | struct irq_domain *domain; |
| 666 | 673 | ||
| 667 | host_data = stm32_exti_host_init(drv_data, node); | 674 | host_data = stm32_exti_host_init(drv_data, node); |
| 668 | if (!host_data) { | 675 | if (!host_data) |
| 669 | ret = -ENOMEM; | 676 | return -ENOMEM; |
| 670 | goto out_free_mem; | ||
| 671 | } | ||
| 672 | 677 | ||
| 673 | domain = irq_domain_add_linear(node, drv_data->bank_nr * IRQS_PER_BANK, | 678 | domain = irq_domain_add_linear(node, drv_data->bank_nr * IRQS_PER_BANK, |
| 674 | &irq_exti_domain_ops, NULL); | 679 | &irq_exti_domain_ops, NULL); |
| @@ -725,7 +730,6 @@ out_free_domain: | |||
| 725 | irq_domain_remove(domain); | 730 | irq_domain_remove(domain); |
| 726 | out_unmap: | 731 | out_unmap: |
| 727 | iounmap(host_data->base); | 732 | iounmap(host_data->base); |
| 728 | out_free_mem: | ||
| 729 | kfree(host_data->chips_data); | 733 | kfree(host_data->chips_data); |
| 730 | kfree(host_data); | 734 | kfree(host_data); |
| 731 | return ret; | 735 | return ret; |
| @@ -752,10 +756,8 @@ __init stm32_exti_hierarchy_init(const struct stm32_exti_drv_data *drv_data, | |||
| 752 | } | 756 | } |
| 753 | 757 | ||
| 754 | host_data = stm32_exti_host_init(drv_data, node); | 758 | host_data = stm32_exti_host_init(drv_data, node); |
| 755 | if (!host_data) { | 759 | if (!host_data) |
| 756 | ret = -ENOMEM; | 760 | return -ENOMEM; |
| 757 | goto out_free_mem; | ||
| 758 | } | ||
| 759 | 761 | ||
| 760 | for (i = 0; i < drv_data->bank_nr; i++) | 762 | for (i = 0; i < drv_data->bank_nr; i++) |
| 761 | stm32_exti_chip_init(host_data, i, node); | 763 | 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, | |||
| 777 | 779 | ||
| 778 | out_unmap: | 780 | out_unmap: |
| 779 | iounmap(host_data->base); | 781 | iounmap(host_data->base); |
| 780 | out_free_mem: | ||
| 781 | kfree(host_data->chips_data); | 782 | kfree(host_data->chips_data); |
| 782 | kfree(host_data); | 783 | kfree(host_data); |
| 783 | return ret; | 784 | return ret; |
diff --git a/drivers/irqchip/irq-tango.c b/drivers/irqchip/irq-tango.c index 0c085303a583..580e2d72b9ba 100644 --- a/drivers/irqchip/irq-tango.c +++ b/drivers/irqchip/irq-tango.c | |||
| @@ -205,8 +205,7 @@ static int __init tangox_irq_init(void __iomem *base, struct resource *baseres, | |||
| 205 | 205 | ||
| 206 | tangox_irq_domain_init(dom); | 206 | tangox_irq_domain_init(dom); |
| 207 | 207 | ||
| 208 | irq_set_chained_handler(irq, tangox_irq_handler); | 208 | irq_set_chained_handler_and_data(irq, tangox_irq_handler, dom); |
| 209 | irq_set_handler_data(irq, dom); | ||
| 210 | 209 | ||
| 211 | return 0; | 210 | return 0; |
| 212 | } | 211 | } |
