mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 09:04:39 +02:00
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>
This commit is contained in:
parent
eeeec6c547
commit
279c24021b
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user