Commit ea55c65d authored by Jonas Gorski's avatar Jonas Gorski Committed by Greg Kroah-Hartman
Browse files

serial: bcm63xx-uart: fix tx after conversion to uart_port_tx_limited()



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 7be50f2e ("serial: mxs-auart: fix tx").

Fixes: d11cc8c3 ("tty: serial: use uart_port_tx_limited()")
Cc: stable@vger.kernel.org
Signed-off-by: default avatarJonas Gorski <jonas.gorski@gmail.com>
Signed-off-by: default avatarDoug Brown <doug@schmorgal.com>
Link: https://lore.kernel.org/r/20240606195632.173255-4-doug@schmorgal.com


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 9bb43b9e
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -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);
}

/*