FROMLIST: pinctrl: cherryview: Add missing spinlock usage in chv_gpio_irq_handler

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. commit cdca06e4e859
("pinctrl: baytrail: Add missing spinlock usage in byt_gpio_irq_handler")

Signed-off-by: Grace Kao <grace.kao@intel.com>
Reported-by: Brian Norris <briannorris@chromium.org>
Reviewed-by: Brian Norris <briannorris@chromium.org>

(am from http://patchwork.ozlabs.org/project/linux-gpio/patch/20200417041154.13063-1-grace.kao@intel.com/)

BUG=b:140090263
TEST=Verified on BSW devices and no found GPIO access causing IRQ fails.

Change-Id: I300b41b138c257a22da04669ed29a399125456db
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/kernel/+/2153193
Tested-by: Grace Kao <grace.kao@intel.com>
Tested-by: Radoslaw Biernacki <biernacki@google.com>
Reviewed-by: Alex Levin <levinale@chromium.org>
Reviewed-by: Brian Norris <briannorris@chromium.org>
Reviewed-by: Radoslaw Biernacki <biernacki@google.com>
Commit-Queue: Brian Norris <briannorris@chromium.org>
Commit-Queue: Alex Levin <levinale@chromium.org>
(cherry picked from commit 082723afd266c2b12fb7d0ba3702c6aa70f257b8)
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/kernel/+/2157445
Tested-by: Alex Levin <levinale@chromium.org>
diff --git a/drivers/pinctrl/intel/pinctrl-cherryview.c b/drivers/pinctrl/intel/pinctrl-cherryview.c
index f16baf9b..25932d2 100644
--- a/drivers/pinctrl/intel/pinctrl-cherryview.c
+++ b/drivers/pinctrl/intel/pinctrl-cherryview.c
@@ -1485,11 +1485,15 @@
 	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 irq, offset;