.. | .. |
---|
58 | 58 | unsigned int mask; |
---|
59 | 59 | unsigned long flags; |
---|
60 | 60 | |
---|
61 | | - spin_lock_irqsave(&bank->slock, flags); |
---|
| 61 | + raw_spin_lock_irqsave(&bank->slock, flags); |
---|
62 | 62 | |
---|
63 | 63 | mask = readl(bank->eint_base + reg_mask); |
---|
64 | 64 | mask |= 1 << irqd->hwirq; |
---|
65 | 65 | writel(mask, bank->eint_base + reg_mask); |
---|
66 | 66 | |
---|
67 | | - spin_unlock_irqrestore(&bank->slock, flags); |
---|
| 67 | + raw_spin_unlock_irqrestore(&bank->slock, flags); |
---|
68 | 68 | } |
---|
69 | 69 | |
---|
70 | 70 | static void exynos_irq_ack(struct irq_data *irqd) |
---|
.. | .. |
---|
97 | 97 | if (irqd_get_trigger_type(irqd) & IRQ_TYPE_LEVEL_MASK) |
---|
98 | 98 | exynos_irq_ack(irqd); |
---|
99 | 99 | |
---|
100 | | - spin_lock_irqsave(&bank->slock, flags); |
---|
| 100 | + raw_spin_lock_irqsave(&bank->slock, flags); |
---|
101 | 101 | |
---|
102 | 102 | mask = readl(bank->eint_base + reg_mask); |
---|
103 | 103 | mask &= ~(1 << irqd->hwirq); |
---|
104 | 104 | writel(mask, bank->eint_base + reg_mask); |
---|
105 | 105 | |
---|
106 | | - spin_unlock_irqrestore(&bank->slock, flags); |
---|
| 106 | + raw_spin_unlock_irqrestore(&bank->slock, flags); |
---|
107 | 107 | } |
---|
108 | 108 | |
---|
109 | 109 | static int exynos_irq_set_type(struct irq_data *irqd, unsigned int type) |
---|
.. | .. |
---|
169 | 169 | shift = irqd->hwirq * bank_type->fld_width[PINCFG_TYPE_FUNC]; |
---|
170 | 170 | mask = (1 << bank_type->fld_width[PINCFG_TYPE_FUNC]) - 1; |
---|
171 | 171 | |
---|
172 | | - spin_lock_irqsave(&bank->slock, flags); |
---|
| 172 | + raw_spin_lock_irqsave(&bank->slock, flags); |
---|
173 | 173 | |
---|
174 | 174 | con = readl(bank->pctl_base + reg_con); |
---|
175 | 175 | con &= ~(mask << shift); |
---|
176 | 176 | con |= EXYNOS_PIN_FUNC_EINT << shift; |
---|
177 | 177 | writel(con, bank->pctl_base + reg_con); |
---|
178 | 178 | |
---|
179 | | - spin_unlock_irqrestore(&bank->slock, flags); |
---|
| 179 | + raw_spin_unlock_irqrestore(&bank->slock, flags); |
---|
180 | 180 | |
---|
181 | 181 | return 0; |
---|
182 | 182 | } |
---|
.. | .. |
---|
192 | 192 | shift = irqd->hwirq * bank_type->fld_width[PINCFG_TYPE_FUNC]; |
---|
193 | 193 | mask = (1 << bank_type->fld_width[PINCFG_TYPE_FUNC]) - 1; |
---|
194 | 194 | |
---|
195 | | - spin_lock_irqsave(&bank->slock, flags); |
---|
| 195 | + raw_spin_lock_irqsave(&bank->slock, flags); |
---|
196 | 196 | |
---|
197 | 197 | con = readl(bank->pctl_base + reg_con); |
---|
198 | 198 | con &= ~(mask << shift); |
---|
199 | 199 | con |= EXYNOS_PIN_FUNC_INPUT << shift; |
---|
200 | 200 | writel(con, bank->pctl_base + reg_con); |
---|
201 | 201 | |
---|
202 | | - spin_unlock_irqrestore(&bank->slock, flags); |
---|
| 202 | + raw_spin_unlock_irqrestore(&bank->slock, flags); |
---|
203 | 203 | |
---|
204 | 204 | gpiochip_unlock_as_irq(&bank->gpio_chip, irqd->hwirq); |
---|
205 | 205 | } |
---|
.. | .. |
---|
216 | 216 | .irq_set_type = exynos_irq_set_type, |
---|
217 | 217 | .irq_request_resources = exynos_irq_request_resources, |
---|
218 | 218 | .irq_release_resources = exynos_irq_release_resources, |
---|
| 219 | + .flags = IRQCHIP_PIPELINE_SAFE, |
---|
219 | 220 | }, |
---|
220 | 221 | .eint_con = EXYNOS_GPIO_ECON_OFFSET, |
---|
221 | 222 | .eint_mask = EXYNOS_GPIO_EMASK_OFFSET, |
---|
.. | .. |
---|
287 | 288 | } |
---|
288 | 289 | |
---|
289 | 290 | ret = devm_request_irq(dev, d->irq, exynos_eint_gpio_irq, |
---|
290 | | - 0, dev_name(dev), d); |
---|
| 291 | + IRQF_OOB, dev_name(dev), d); |
---|
291 | 292 | if (ret) { |
---|
292 | 293 | dev_err(dev, "irq request failed\n"); |
---|
293 | 294 | return -ENXIO; |
---|
.. | .. |
---|
305 | 306 | goto err_domains; |
---|
306 | 307 | } |
---|
307 | 308 | bank->irq_chip->chip.name = bank->name; |
---|
| 309 | + bank->irq_chip->chip.flags |= IRQCHIP_PIPELINE_SAFE; |
---|
308 | 310 | |
---|
309 | 311 | bank->irq_domain = irq_domain_add_linear(bank->of_node, |
---|
310 | 312 | bank->nr_pins, &exynos_eint_irqd_ops, bank); |
---|
.. | .. |
---|
408 | 410 | .irq_set_wake = exynos_wkup_irq_set_wake, |
---|
409 | 411 | .irq_request_resources = exynos_irq_request_resources, |
---|
410 | 412 | .irq_release_resources = exynos_irq_release_resources, |
---|
| 413 | + .flags = IRQCHIP_PIPELINE_SAFE, |
---|
411 | 414 | }, |
---|
412 | 415 | .eint_con = EXYNOS_WKUP_ECON_OFFSET, |
---|
413 | 416 | .eint_mask = EXYNOS_WKUP_EMASK_OFFSET, |
---|
.. | .. |
---|
428 | 431 | .irq_set_wake = exynos_wkup_irq_set_wake, |
---|
429 | 432 | .irq_request_resources = exynos_irq_request_resources, |
---|
430 | 433 | .irq_release_resources = exynos_irq_release_resources, |
---|
| 434 | + .flags = IRQCHIP_PIPELINE_SAFE, |
---|
431 | 435 | }, |
---|
432 | 436 | .eint_con = EXYNOS_WKUP_ECON_OFFSET, |
---|
433 | 437 | .eint_mask = EXYNOS_WKUP_EMASK_OFFSET, |
---|
.. | .. |
---|
447 | 451 | .irq_set_wake = exynos_wkup_irq_set_wake, |
---|
448 | 452 | .irq_request_resources = exynos_irq_request_resources, |
---|
449 | 453 | .irq_release_resources = exynos_irq_release_resources, |
---|
| 454 | + .flags = IRQCHIP_PIPELINE_SAFE, |
---|
450 | 455 | }, |
---|
451 | 456 | .eint_con = EXYNOS7_WKUP_ECON_OFFSET, |
---|
452 | 457 | .eint_mask = EXYNOS7_WKUP_EMASK_OFFSET, |
---|