]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
serial: bcm63xx-uart: fix tx after conversion to uart_port_tx_limited()
authorJonas Gorski <jonas.gorski@gmail.com>
Thu, 6 Jun 2024 19:56:33 +0000 (12:56 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 24 Jun 2024 14:14:48 +0000 (16:14 +0200)
When bcm63xx-uart was converted to uart_port_tx_limited(), it implicitly
added a call to stop_tx(). This causes garbage to be put out on the
serial console. To fix this, pass UART_TX_NOSTOP in flags, and manually
call stop_tx() ourselves analogue to how a similar issue was fixed in
commit 7be50f2e8f20 ("serial: mxs-auart: fix tx").

Fixes: d11cc8c3c4b6 ("tty: serial: use uart_port_tx_limited()")
Cc: stable@vger.kernel.org
Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
Signed-off-by: Doug Brown <doug@schmorgal.com>
Link: https://lore.kernel.org/r/20240606195632.173255-4-doug@schmorgal.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/bcm63xx_uart.c

index 34801a6f300b6841464f5195f9399ebd90b654d1..b88cc28c94e33711be426201157f7e905b9e09ff 100644 (file)
@@ -308,8 +308,8 @@ static void bcm_uart_do_tx(struct uart_port *port)
 
        val = bcm_uart_readl(port, UART_MCTL_REG);
        val = (val & UART_MCTL_TXFIFOFILL_MASK) >> UART_MCTL_TXFIFOFILL_SHIFT;
-
-       pending = uart_port_tx_limited(port, ch, port->fifosize - val,
+       pending = uart_port_tx_limited_flags(port, ch, UART_TX_NOSTOP,
+               port->fifosize - val,
                true,
                bcm_uart_writel(port, ch, UART_FIFO_REG),
                ({}));
@@ -320,6 +320,9 @@ static void bcm_uart_do_tx(struct uart_port *port)
        val = bcm_uart_readl(port, UART_IR_REG);
        val &= ~UART_TX_INT_MASK;
        bcm_uart_writel(port, val, UART_IR_REG);
+
+       if (uart_tx_stopped(port))
+               bcm_uart_stop_tx(port);
 }
 
 /*