hc
2024-11-01 2f529f9b558ca1c1bd74be7437a84e4711743404
kernel/drivers/pinctrl/samsung/pinctrl-exynos.c
....@@ -58,13 +58,13 @@
5858 unsigned int mask;
5959 unsigned long flags;
6060
61
- spin_lock_irqsave(&bank->slock, flags);
61
+ raw_spin_lock_irqsave(&bank->slock, flags);
6262
6363 mask = readl(bank->eint_base + reg_mask);
6464 mask |= 1 << irqd->hwirq;
6565 writel(mask, bank->eint_base + reg_mask);
6666
67
- spin_unlock_irqrestore(&bank->slock, flags);
67
+ raw_spin_unlock_irqrestore(&bank->slock, flags);
6868 }
6969
7070 static void exynos_irq_ack(struct irq_data *irqd)
....@@ -97,13 +97,13 @@
9797 if (irqd_get_trigger_type(irqd) & IRQ_TYPE_LEVEL_MASK)
9898 exynos_irq_ack(irqd);
9999
100
- spin_lock_irqsave(&bank->slock, flags);
100
+ raw_spin_lock_irqsave(&bank->slock, flags);
101101
102102 mask = readl(bank->eint_base + reg_mask);
103103 mask &= ~(1 << irqd->hwirq);
104104 writel(mask, bank->eint_base + reg_mask);
105105
106
- spin_unlock_irqrestore(&bank->slock, flags);
106
+ raw_spin_unlock_irqrestore(&bank->slock, flags);
107107 }
108108
109109 static int exynos_irq_set_type(struct irq_data *irqd, unsigned int type)
....@@ -169,14 +169,14 @@
169169 shift = irqd->hwirq * bank_type->fld_width[PINCFG_TYPE_FUNC];
170170 mask = (1 << bank_type->fld_width[PINCFG_TYPE_FUNC]) - 1;
171171
172
- spin_lock_irqsave(&bank->slock, flags);
172
+ raw_spin_lock_irqsave(&bank->slock, flags);
173173
174174 con = readl(bank->pctl_base + reg_con);
175175 con &= ~(mask << shift);
176176 con |= EXYNOS_PIN_FUNC_EINT << shift;
177177 writel(con, bank->pctl_base + reg_con);
178178
179
- spin_unlock_irqrestore(&bank->slock, flags);
179
+ raw_spin_unlock_irqrestore(&bank->slock, flags);
180180
181181 return 0;
182182 }
....@@ -192,14 +192,14 @@
192192 shift = irqd->hwirq * bank_type->fld_width[PINCFG_TYPE_FUNC];
193193 mask = (1 << bank_type->fld_width[PINCFG_TYPE_FUNC]) - 1;
194194
195
- spin_lock_irqsave(&bank->slock, flags);
195
+ raw_spin_lock_irqsave(&bank->slock, flags);
196196
197197 con = readl(bank->pctl_base + reg_con);
198198 con &= ~(mask << shift);
199199 con |= EXYNOS_PIN_FUNC_INPUT << shift;
200200 writel(con, bank->pctl_base + reg_con);
201201
202
- spin_unlock_irqrestore(&bank->slock, flags);
202
+ raw_spin_unlock_irqrestore(&bank->slock, flags);
203203
204204 gpiochip_unlock_as_irq(&bank->gpio_chip, irqd->hwirq);
205205 }
....@@ -216,6 +216,7 @@
216216 .irq_set_type = exynos_irq_set_type,
217217 .irq_request_resources = exynos_irq_request_resources,
218218 .irq_release_resources = exynos_irq_release_resources,
219
+ .flags = IRQCHIP_PIPELINE_SAFE,
219220 },
220221 .eint_con = EXYNOS_GPIO_ECON_OFFSET,
221222 .eint_mask = EXYNOS_GPIO_EMASK_OFFSET,
....@@ -287,7 +288,7 @@
287288 }
288289
289290 ret = devm_request_irq(dev, d->irq, exynos_eint_gpio_irq,
290
- 0, dev_name(dev), d);
291
+ IRQF_OOB, dev_name(dev), d);
291292 if (ret) {
292293 dev_err(dev, "irq request failed\n");
293294 return -ENXIO;
....@@ -305,6 +306,7 @@
305306 goto err_domains;
306307 }
307308 bank->irq_chip->chip.name = bank->name;
309
+ bank->irq_chip->chip.flags |= IRQCHIP_PIPELINE_SAFE;
308310
309311 bank->irq_domain = irq_domain_add_linear(bank->of_node,
310312 bank->nr_pins, &exynos_eint_irqd_ops, bank);
....@@ -408,6 +410,7 @@
408410 .irq_set_wake = exynos_wkup_irq_set_wake,
409411 .irq_request_resources = exynos_irq_request_resources,
410412 .irq_release_resources = exynos_irq_release_resources,
413
+ .flags = IRQCHIP_PIPELINE_SAFE,
411414 },
412415 .eint_con = EXYNOS_WKUP_ECON_OFFSET,
413416 .eint_mask = EXYNOS_WKUP_EMASK_OFFSET,
....@@ -428,6 +431,7 @@
428431 .irq_set_wake = exynos_wkup_irq_set_wake,
429432 .irq_request_resources = exynos_irq_request_resources,
430433 .irq_release_resources = exynos_irq_release_resources,
434
+ .flags = IRQCHIP_PIPELINE_SAFE,
431435 },
432436 .eint_con = EXYNOS_WKUP_ECON_OFFSET,
433437 .eint_mask = EXYNOS_WKUP_EMASK_OFFSET,
....@@ -447,6 +451,7 @@
447451 .irq_set_wake = exynos_wkup_irq_set_wake,
448452 .irq_request_resources = exynos_irq_request_resources,
449453 .irq_release_resources = exynos_irq_release_resources,
454
+ .flags = IRQCHIP_PIPELINE_SAFE,
450455 },
451456 .eint_con = EXYNOS7_WKUP_ECON_OFFSET,
452457 .eint_mask = EXYNOS7_WKUP_EMASK_OFFSET,