summaryrefslogtreecommitdiff
path: root/drivers/i3c
diff options
context:
space:
mode:
authorJarkko Nikula <jarkko.nikula@linux.intel.com>2025-04-09 17:03:58 +0300
committerAlexandre Belloni <alexandre.belloni@bootlin.com>2025-05-15 11:41:13 +0200
commit279c24021b838e76ca8441e9446e0ab45271153a (patch)
tree6405f75548808eea8963c2e7127018efab422c47 /drivers/i3c
parenteeeec6c5475e914157feab00bdcaed79132e47a2 (diff)
i3c: mipi-i3c-hci: Fix handling status of i3c_hci_irq_handler()
Return IRQ_HANDLED from the i3c_hci_irq_handler() only if some INTR_STATUS bit was set or if DMA/PIO handler handled it. Currently it returns IRQ_HANDLED in case INTR_STATUS is zero and IO handler returns false. Which could be the case if interrupt comes from other device or is spurious. Reviewed-by: Frank Li <Frank.Li@nxp.com> Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com> Link: https://lore.kernel.org/r/20250409140401.299251-2-jarkko.nikula@linux.intel.com Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Diffstat (limited to 'drivers/i3c')
-rw-r--r--drivers/i3c/master/mipi-i3c-hci/core.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/i3c/master/mipi-i3c-hci/core.c b/drivers/i3c/master/mipi-i3c-hci/core.c
index ba7aa6bbcec5..780e9db7e21e 100644
--- a/drivers/i3c/master/mipi-i3c-hci/core.c
+++ b/drivers/i3c/master/mipi-i3c-hci/core.c
@@ -594,6 +594,7 @@ static irqreturn_t i3c_hci_irq_handler(int irq, void *dev_id)
if (val) {
reg_write(INTR_STATUS, val);
+ result = IRQ_HANDLED;
}
if (val & INTR_HC_RESET_CANCEL) {
@@ -605,12 +606,11 @@ static irqreturn_t i3c_hci_irq_handler(int irq, void *dev_id)
val &= ~INTR_HC_INTERNAL_ERR;
}
- hci->io->irq_handler(hci);
+ if (hci->io->irq_handler(hci))
+ result = IRQ_HANDLED;
if (val)
dev_err(&hci->master.dev, "unexpected INTR_STATUS %#x\n", val);
- else
- result = IRQ_HANDLED;
return result;
}