summaryrefslogtreecommitdiffstats
path: root/lib/timerqueue.c
diff options
context:
space:
mode:
authorSimon Gassner <simon.gassner@noxsystems.com>2026-10-01 08:05:39 +0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2026-10-01 11:06:14 +0200
commit8aebfde6e84dceb7d47fe8001e50b754eb45d5df (patch)
tree8f47292d9411b75ecee14a211305e4ba1c8e2653 /lib/timerqueue.c
parentabfafa6fc3c17b7dffa5dce3acc8dba70ed656b9 (diff)
downloadlinux-stable-8aebfde6e84dceb7d47fe8001e50b754eb45d5df.tar.gz
linux-stable-8aebfde6e84dceb7d47fe8001e50b754eb45d5df.zip
serial: tegra: don't clear the Tx FIFO on an Rx-only reset
tegra_uart_fifo_reset() applies the Tegra30 workaround for "cannot clear the Tx FIFO while FIFO mode is enabled" unconditionally: it leaves FIFO mode, writes the requested FCR clear bits, and re-enters FIFO mode. Leaving FIFO mode empties both FIFOs, so an Rx-only reset discards queued Tx data as well. The break handler in tegra_uart_decode_rx_error() calls it with UART_FCR_CLEAR_RCVR only. On a half-duplex RS485 board whose Rx line is pulled low while the transceiver drives the bus, every transmission raises a spurious break, and all but the first character of the frame is lost. Only take the FIFO-mode path when the caller actually asked for CLEAR_XMIT. Likewise only wait for TEMT in that case: with the Tx FIFO deliberately left intact, that loop would otherwise spin for a full frame time in hard IRQ context with the port lock held. Tested on a Colibri T30 (Tegra30) with Rx DMA: - Break during transmission: the reset still fires from tegra_uart_decode_rx_error(), and the complete frame now reaches the peer. Before this change only the character in the shift register was sent. - Internal loopback with a generated break: the Rx FIFO is correctly cleared by the plain FCR write, and subsequent receive works with no frame, parity or overrun errors. Fixes: e9ea096dd225 ("serial: tegra: add serial driver") Cc: stable@kernel.org Signed-off-by: Simon Gassner <simon.gassner@noxsystems.com> Link: https://patch.msgid.link/20261001060539.32659-1-simon.gassner@noxsystems.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'lib/timerqueue.c')
0 files changed, 0 insertions, 0 deletions