diff options
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 | } |
