Commit 1d1e5630 authored by Huacai Chen's avatar Huacai Chen Committed by Marc Zyngier

irqchip/loongson-htvec: Fix initial interrupt clearing

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: 818e915f ("irqchip: Add Loongson HyperTransport Vector support")
Signed-off-by: default avatarHuacai Chen <chenhc@lemote.com>
Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/1599819978-13999-2-git-send-email-chenhc@lemote.com
parent 8ddf1905
...@@ -151,7 +151,7 @@ static void htvec_reset(struct htvec *priv) ...@@ -151,7 +151,7 @@ static void htvec_reset(struct htvec *priv)
/* Clear IRQ cause registers, mask all interrupts */ /* Clear IRQ cause registers, mask all interrupts */
for (idx = 0; idx < priv->num_parents; idx++) { for (idx = 0; idx < priv->num_parents; idx++) {
writel_relaxed(0x0, priv->base + HTVEC_EN_OFF + 4 * 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, ...@@ -172,7 +172,7 @@ static int htvec_of_init(struct device_node *node,
goto free_priv; 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++) { for (i = 0; i < HTVEC_MAX_PARENT_IRQ; i++) {
parent_irq[i] = irq_of_parse_and_map(node, i); parent_irq[i] = irq_of_parse_and_map(node, i);
if (parent_irq[i] <= 0) if (parent_irq[i] <= 0)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment