diff options
Diffstat (limited to 'drivers/irqchip')
-rw-r--r-- | drivers/irqchip/exynos-combiner.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/drivers/irqchip/exynos-combiner.c b/drivers/irqchip/exynos-combiner.c index 6855c92c2262..494c2e21b538 100644 --- a/drivers/irqchip/exynos-combiner.c +++ b/drivers/irqchip/exynos-combiner.c | |||
@@ -33,7 +33,7 @@ | |||
33 | static DEFINE_SPINLOCK(irq_controller_lock); | 33 | static DEFINE_SPINLOCK(irq_controller_lock); |
34 | 34 | ||
35 | struct combiner_chip_data { | 35 | struct combiner_chip_data { |
36 | unsigned int irq_offset; | 36 | unsigned int hwirq_offset; |
37 | unsigned int irq_mask; | 37 | unsigned int irq_mask; |
38 | void __iomem *base; | 38 | void __iomem *base; |
39 | unsigned int parent_irq; | 39 | unsigned int parent_irq; |
@@ -80,11 +80,11 @@ static void combiner_handle_cascade_irq(unsigned int irq, struct irq_desc *desc) | |||
80 | if (status == 0) | 80 | if (status == 0) |
81 | goto out; | 81 | goto out; |
82 | 82 | ||
83 | combiner_irq = __ffs(status); | 83 | combiner_irq = chip_data->hwirq_offset + __ffs(status); |
84 | cascade_irq = irq_find_mapping(combiner_irq_domain, combiner_irq); | ||
84 | 85 | ||
85 | cascade_irq = combiner_irq + (chip_data->irq_offset & ~31); | 86 | if (unlikely(!cascade_irq)) |
86 | if (unlikely(cascade_irq >= NR_IRQS)) | 87 | do_bad_IRQ(irq, desc); |
87 | do_bad_IRQ(cascade_irq, desc); | ||
88 | else | 88 | else |
89 | generic_handle_irq(cascade_irq); | 89 | generic_handle_irq(cascade_irq); |
90 | 90 | ||
@@ -129,8 +129,7 @@ static void __init combiner_init_one(struct combiner_chip_data *combiner_data, | |||
129 | void __iomem *base, unsigned int irq) | 129 | void __iomem *base, unsigned int irq) |
130 | { | 130 | { |
131 | combiner_data->base = base; | 131 | combiner_data->base = base; |
132 | combiner_data->irq_offset = irq_find_mapping( | 132 | combiner_data->hwirq_offset = (combiner_nr & ~3) * IRQ_IN_COMBINER; |
133 | combiner_irq_domain, combiner_nr * IRQ_IN_COMBINER); | ||
134 | combiner_data->irq_mask = 0xff << ((combiner_nr % 4) << 3); | 133 | combiner_data->irq_mask = 0xff << ((combiner_nr % 4) << 3); |
135 | combiner_data->parent_irq = irq; | 134 | combiner_data->parent_irq = irq; |
136 | 135 | ||