diff options
author | Alexander Stein <alexander.stein@systec-electronic.com> | 2017-01-30 06:35:28 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2017-02-09 02:08:25 -0500 |
commit | 20658b3df8b98cbdc433c824730471160a087afb (patch) | |
tree | ef85c2d2a6f6d9795d014a36101dd2b1d2c69c5d | |
parent | 7396685a1bca323b96fd79b836ae22b7569d7068 (diff) |
pinctrl: baytrail: Add missing spinlock usage in byt_gpio_irq_handler
commit cdca06e4e85974d8a3503ab15709dbbaf90d3dd1 upstream.
According to VLI64 Intel Atom E3800 Specification Update (#329901)
concurrent read accesses may result in returning 0xffffffff and write
accesses may be dropped silently.
To workaround all accesses must be protected by locks.
Signed-off-by: Alexander Stein <alexander.stein@systec-electronic.com>
Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | drivers/pinctrl/intel/pinctrl-baytrail.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/pinctrl/intel/pinctrl-baytrail.c b/drivers/pinctrl/intel/pinctrl-baytrail.c index 079015385fd8..7f2263d61063 100644 --- a/drivers/pinctrl/intel/pinctrl-baytrail.c +++ b/drivers/pinctrl/intel/pinctrl-baytrail.c | |||
@@ -1612,7 +1612,9 @@ static void byt_gpio_irq_handler(struct irq_desc *desc) | |||
1612 | continue; | 1612 | continue; |
1613 | } | 1613 | } |
1614 | 1614 | ||
1615 | raw_spin_lock(&vg->lock); | ||
1615 | pending = readl(reg); | 1616 | pending = readl(reg); |
1617 | raw_spin_unlock(&vg->lock); | ||
1616 | for_each_set_bit(pin, &pending, 32) { | 1618 | for_each_set_bit(pin, &pending, 32) { |
1617 | virq = irq_find_mapping(vg->chip.irqdomain, base + pin); | 1619 | virq = irq_find_mapping(vg->chip.irqdomain, base + pin); |
1618 | generic_handle_irq(virq); | 1620 | generic_handle_irq(virq); |