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 /drivers | |
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
Diffstat (limited to 'drivers')
-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 |
5 files changed, 25 insertions, 17 deletions
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 | } |