From: Grace Kao <grace....@intel.com>

[ Upstream commit 69388e15f5078c961b9e5319e22baea4c57deff1 ]

According to Braswell NDA Specification Update (#557593),
concurrent read accesses may result in returning 0xffffffff and write
instructions may be dropped. We have an established format for the
commit references, i.e.
cdca06e4e859 ("pinctrl: baytrail: Add missing spinlock usage in
byt_gpio_irq_handler")

Fixes: 0bd50d719b00 ("pinctrl: cherryview: prevent concurrent access to GPIO 
controllers")
Signed-off-by: Grace Kao <grace....@intel.com>
Reported-by: Brian Norris <briannor...@chromium.org>
Reviewed-by: Brian Norris <briannor...@chromium.org>
Acked-by: Mika Westerberg <mika.westerb...@linux.intel.com>
Signed-off-by: Andy Shevchenko <andriy.shevche...@linux.intel.com>
Signed-off-by: Sasha Levin <sas...@kernel.org>
---
 drivers/pinctrl/intel/pinctrl-cherryview.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/pinctrl/intel/pinctrl-cherryview.c 
b/drivers/pinctrl/intel/pinctrl-cherryview.c
index 4c74fdde576d0..1093a6105d40c 100644
--- a/drivers/pinctrl/intel/pinctrl-cherryview.c
+++ b/drivers/pinctrl/intel/pinctrl-cherryview.c
@@ -1479,11 +1479,15 @@ static void chv_gpio_irq_handler(struct irq_desc *desc)
        struct chv_pinctrl *pctrl = gpiochip_get_data(gc);
        struct irq_chip *chip = irq_desc_get_chip(desc);
        unsigned long pending;
+       unsigned long flags;
        u32 intr_line;
 
        chained_irq_enter(chip, desc);
 
+       raw_spin_lock_irqsave(&chv_lock, flags);
        pending = readl(pctrl->regs + CHV_INTSTAT);
+       raw_spin_unlock_irqrestore(&chv_lock, flags);
+
        for_each_set_bit(intr_line, &pending, pctrl->community->nirqs) {
                unsigned int irq, offset;
 
-- 
2.20.1



Reply via email to