tty: serial: fsl_lpuart: don't break the on-going transfer when global reset
authorSherry Sun <sherry.sun@nxp.com>
Mon, 24 Oct 2022 08:58:44 +0000 (16:58 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 3 Nov 2022 03:12:09 +0000 (04:12 +0100)
commit76bad3f88750f8cc465c489e6846249e0bc3d8f5
tree6e8044925ad51395646f07df6ed0c2ed932e6435
parentd0b68629bd2fb61e0171a62f2e8da3db322f5cf6
tty: serial: fsl_lpuart: don't break the on-going transfer when global reset

lpuart_global_reset() shouldn't break the on-going transmit engine, need
to recover the on-going data transfer after reset.

This can help earlycon here, since commit 60f361722ad2 ("serial:
fsl_lpuart: Reset prior to registration") moved lpuart_global_reset()
before uart_add_one_port(), earlycon is writing during global reset,
as global reset will disable the TX and clear the baud rate register,
which caused the earlycon cannot work any more after reset, needs to
restore the baud rate and re-enable the transmitter to recover the
earlycon write.

Also move the lpuart_global_reset() down, then we can reuse the
lpuart32_tx_empty() without declaration.

Fixes: bd5305dcabbc ("tty: serial: fsl_lpuart: do software reset for imx7ulp and imx8qxp")
Signed-off-by: Sherry Sun <sherry.sun@nxp.com>
Link: https://lore.kernel.org/r/20221024085844.22786-1-sherry.sun@nxp.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/fsl_lpuart.c