Skip to content

Commit 8fb36f8

Browse files
uditkumartigregkh
authored andcommitted
serial: 8250_omap: Fix Errata i2310 with RX FIFO level check
commit c128a1b upstream. Errata i2310[0] says, Erroneous timeout can be triggered, if this Erroneous interrupt is not cleared then it may leads to storm of interrupts. Commit 9d141c1 ("serial: 8250_omap: Implementation of Errata i2310") which added the workaround but missed ensuring RX FIFO is really empty before applying the errata workaround as recommended in the errata text. Fix this by adding back check for UART_OMAP_RX_LVL to be 0 for workaround to take effect. [0] https://www.ti.com/lit/pdf/sprz536 page 23 Fixes: 9d141c1 ("serial: 8250_omap: Implementation of Errata i2310") Cc: [email protected] Reported-by: Vignesh Raghavendra <[email protected]> Closes: https://lore.kernel.org/all/[email protected]/ Signed-off-by: Udit Kumar <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent f05cdbe commit 8fb36f8

File tree

1 file changed

+2
-1
lines changed

1 file changed

+2
-1
lines changed

drivers/tty/serial/8250/8250_omap.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -673,7 +673,8 @@ static irqreturn_t omap8250_irq(int irq, void *dev_id)
673673
* https://www.ti.com/lit/pdf/sprz536
674674
*/
675675
if (priv->habit & UART_RX_TIMEOUT_QUIRK &&
676-
(iir & UART_IIR_RX_TIMEOUT) == UART_IIR_RX_TIMEOUT) {
676+
(iir & UART_IIR_RX_TIMEOUT) == UART_IIR_RX_TIMEOUT &&
677+
serial_port_in(port, UART_OMAP_RX_LVL) == 0) {
677678
unsigned char efr2, timeout_h, timeout_l;
678679

679680
efr2 = serial_in(up, UART_OMAP_EFR2);

0 commit comments

Comments
 (0)