Commit a931237
serial: 8250: Fall back to non-DMA Rx if IIR_RDI occurs
DW UART sometimes triggers IIR_RDI during DMA Rx when IIR_RX_TIMEOUT
should have been triggered instead. Since IIR_RDI has higher priority
than IIR_RX_TIMEOUT, this causes the Rx to hang into interrupt loop.
The problem seems to occur at least with some combinations of
small-sized transfers (I've reproduced the problem on Elkhart Lake PSE
UARTs).
If there's already an on-going Rx DMA and IIR_RDI triggers, fall
graciously back to non-DMA Rx. That is, behave as if IIR_RX_TIMEOUT had
occurred.
8250_omap already considers IIR_RDI similar to this change so its
nothing unheard of.
Fixes: 75df022 ("serial: 8250_dma: Fix RX handling")
Cc: <[email protected]>
Co-developed-by: Srikanth Thokala <[email protected]>
Signed-off-by: Srikanth Thokala <[email protected]>
Co-developed-by: Aman Kumar <[email protected]>
Signed-off-by: Aman Kumar <[email protected]>
Signed-off-by: Ilpo Järvinen <[email protected]>
Reviewed-by: Andy Shevchenko <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Greg Kroah-Hartman <[email protected]>1 parent 7b7dfe4 commit a931237
1 file changed
+4
-0
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1897 | 1897 | | |
1898 | 1898 | | |
1899 | 1899 | | |
| 1900 | + | |
| 1901 | + | |
| 1902 | + | |
| 1903 | + | |
1900 | 1904 | | |
1901 | 1905 | | |
1902 | 1906 | | |
| |||
0 commit comments