| .. | .. |
|---|
| 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, |
|---|