| From 1d1e5630de78f7253ac24b92cee6427c3ff04d56 Mon Sep 17 00:00:00 2001 |
| From: Huacai Chen <chenhc@lemote.com> |
| Date: Fri, 11 Sep 2020 18:26:18 +0800 |
| Subject: irqchip/loongson-htvec: Fix initial interrupt clearing |
| |
| From: Huacai Chen <chenhc@lemote.com> |
| |
| 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> |
| |
| --- |
| drivers/irqchip/irq-loongson-htvec.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/irqchip/irq-loongson-htvec.c |
| +++ b/drivers/irqchip/irq-loongson-htvec.c |
| @@ -151,7 +151,7 @@ static void htvec_reset(struct htvec *pr |
| /* 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_n |
| 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) |