summaryrefslogtreecommitdiffstats
path: root/drivers/irqchip
diff options
context:
space:
mode:
authorHuacai Chen <chenhc@lemote.com>2020-09-11 18:26:18 +0800
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2020-11-05 11:51:31 +0100
commitbe4e2dcd85f639f4e61c873d37e2de040d67409c (patch)
tree9df5306ec2e0615cebdf1c804c888ddf99463236 /drivers/irqchip
parentccd11d1dcd66c7d1b3d404bd537f55edc5223cc5 (diff)
downloadlinux-stable-be4e2dcd85f639f4e61c873d37e2de040d67409c.tar.gz
linux-stable-be4e2dcd85f639f4e61c873d37e2de040d67409c.tar.bz2
linux-stable-be4e2dcd85f639f4e61c873d37e2de040d67409c.zip
irqchip/loongson-htvec: Fix initial interrupt clearing
commit 1d1e5630de78f7253ac24b92cee6427c3ff04d56 upstream. 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 Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/irqchip')
-rw-r--r--drivers/irqchip/irq-loongson-htvec.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/irqchip/irq-loongson-htvec.c b/drivers/irqchip/irq-loongson-htvec.c
index 13e6016fe464..6392aafb9a63 100644
--- a/drivers/irqchip/irq-loongson-htvec.c
+++ b/drivers/irqchip/irq-loongson-htvec.c
@@ -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)