aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2018-08-24 10:06:42 -0400
committerThomas Gleixner <tglx@linutronix.de>2018-08-24 10:06:42 -0400
commit20b420dc42629f115a0339a2474aec419ea32ea0 (patch)
treea32fcaa846d4e3daf2daf0ae1826ac2804d5a908 /drivers
parentf19f5c49bbc3ffcc9126cc245fc1b24cc29f4a37 (diff)
parent4110b5cbb014ebaaeb3d18ac8b98470b7251847d (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.c4
-rw-r--r--drivers/irqchip/irq-gic-v3.c8
-rw-r--r--drivers/irqchip/irq-s3c24xx.c2
-rw-r--r--drivers/irqchip/irq-stm32-exti.c25
-rw-r--r--drivers/irqchip/irq-tango.c3
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
220static void bcm7038_l1_cpu_offline(struct irq_data *d) 221static 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
245static int __init bcm7038_l1_init_one(struct device_node *dn, 247static 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
299static int bcm7038_l1_map(struct irq_domain *d, unsigned int virq, 303static 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
867static struct irq_chip gic_eoimode1_chip = { 869static 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
618free_chips_data:
619 kfree(host_data->chips_data);
620free_host_data:
621 kfree(host_data);
622
623 return NULL;
617} 624}
618 625
619static struct 626static 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);
726out_unmap: 731out_unmap:
727 iounmap(host_data->base); 732 iounmap(host_data->base);
728out_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
778out_unmap: 780out_unmap:
779 iounmap(host_data->base); 781 iounmap(host_data->base);
780out_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}