Skip to content

Commit 60ab0fa

Browse files
Aaron Sierragregkh
authored andcommitted
serial: 8250_exar: Read INT0 from slave device, too
The sleep wake-up refactoring that I introduced in commit c7e1b40 ("tty: serial: exar: Relocate sleep wake-up handling") did not account for devices with a slave device on the expansion port. This patch pokes the INT0 register in the slave device, if present, in order to ensure that MSI interrupts don't get permanently "stuck" because of a sleep wake-up interrupt as described here: commit 2c0ac5b ("serial: exar: Fix stuck MSIs") This also converts an ioread8() to readb() in order to provide visual consistency with the MMIO-only accessors used elsewhere in the driver. Reported-by: Andy Shevchenko <[email protected]> Signed-off-by: Aaron Sierra <[email protected]> Fixes: c7e1b40 ("tty: serial: exar: Relocate sleep wake-up handling") Reviewed-by: Andy Shevchenko <[email protected]> Cc: stable <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent 0419056 commit 60ab0fa

File tree

1 file changed

+5
-1
lines changed

1 file changed

+5
-1
lines changed

drivers/tty/serial/8250/8250_exar.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -445,7 +445,11 @@ static irqreturn_t exar_misc_handler(int irq, void *data)
445445
struct exar8250 *priv = data;
446446

447447
/* Clear all PCI interrupts by reading INT0. No effect on IIR */
448-
ioread8(priv->virt + UART_EXAR_INT0);
448+
readb(priv->virt + UART_EXAR_INT0);
449+
450+
/* Clear INT0 for Expansion Interface slave ports, too */
451+
if (priv->board->num_ports > 8)
452+
readb(priv->virt + 0x2000 + UART_EXAR_INT0);
449453

450454
return IRQ_HANDLED;
451455
}

0 commit comments

Comments
 (0)