irqchip/loongson-htvec: Fix initial interrupt clearing
authorHuacai Chen <chenhc@lemote.com>
Fri, 11 Sep 2020 10:26:18 +0000 (18:26 +0800)
committerMarc Zyngier <maz@kernel.org>
Sun, 13 Sep 2020 14:30:11 +0000 (15:30 +0100)
In htvec_reset() only the first group of initial interrupts is cleared.
This sometimes causes spurious interrupts, so let's clear all groups.

While at it, fix the nearby comment that to match the reality of what
the driver does.

Fixes: 818e915fbac518e8c78e1877 ("irqchip: Add Loongson HyperTransport Vector support")
Signed-off-by: Huacai Chen <chenhc@lemote.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/1599819978-13999-2-git-send-email-chenhc@lemote.com
drivers/irqchip/irq-loongson-htvec.c

index 13e6016fe46460ff09464ee1b276a86cceae564a..6392aafb9a6318903912e167f2abda4d1f331c33 100644 (file)
@@ -151,7 +151,7 @@ static void htvec_reset(struct htvec *priv)
        /* Clear IRQ cause registers, mask all interrupts */
        for (idx = 0; idx < priv->num_parents; idx++) {
                writel_relaxed(0x0, priv->base + HTVEC_EN_OFF + 4 * idx);
-               writel_relaxed(0xFFFFFFFF, priv->base);
+               writel_relaxed(0xFFFFFFFF, priv->base + 4 * idx);
        }
 }
 
@@ -172,7 +172,7 @@ static int htvec_of_init(struct device_node *node,
                goto free_priv;
        }
 
-       /* Interrupt may come from any of the 4 interrupt line */
+       /* Interrupt may come from any of the 8 interrupt lines */
        for (i = 0; i < HTVEC_MAX_PARENT_IRQ; i++) {
                parent_irq[i] = irq_of_parse_and_map(node, i);
                if (parent_irq[i] <= 0)