Re: [PATCH 2/2] tty: serial: fsl_lpuart: improve lpuart32 registers clearing when shutdown

From: Ilpo Järvinen
Date: Wed Nov 09 2022 - 07:19:47 EST


On Wed, 9 Nov 2022, Sherry Sun wrote:

> Need to clear the UARTSTAT and UARTMODIR registers when shutdown the
> uart port, also clear the Rx/Tx DMA enable bits and loopback
> configuration bit.

This lacks answer to "Why?" question. Think about somebody not as familiar
with the HW as you are looking back to this very commit message like 5
years from now and wondering why this change was made.

Preferrably make a separate change out of all these four changes if the
answers to why question are different.

It would also help in deciding whether Fixes tag is necessary or not
since you didn't seem to include.

--
i.

> Signed-off-by: Sherry Sun <sherry.sun@xxxxxxx>
> ---
> drivers/tty/serial/fsl_lpuart.c | 13 ++++++++++++-
> 1 file changed, 12 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/tty/serial/fsl_lpuart.c b/drivers/tty/serial/fsl_lpuart.c
> index f5a0a14fa366..43d9d6a6e94a 100644
> --- a/drivers/tty/serial/fsl_lpuart.c
> +++ b/drivers/tty/serial/fsl_lpuart.c
> @@ -1771,11 +1771,22 @@ static void lpuart32_shutdown(struct uart_port *port)
>
> spin_lock_irqsave(&port->lock, flags);
>
> + /* clear statue */
> + temp = lpuart32_read(&sport->port, UARTSTAT);
> + lpuart32_write(&sport->port, temp, UARTSTAT);
> +
> + /* disable Rx/Tx DMA */
> + temp = lpuart32_read(port, UARTBAUD);
> + temp &= ~(UARTBAUD_TDMAE | UARTBAUD_RDMAE);
> + lpuart32_write(port, temp, UARTBAUD);
> +
> /* disable Rx/Tx and interrupts */
> temp = lpuart32_read(port, UARTCTRL);
> temp &= ~(UARTCTRL_TE | UARTCTRL_RE | UARTCTRL_ILIE |
> - UARTCTRL_TIE | UARTCTRL_TCIE | UARTCTRL_RIE);
> + UARTCTRL_TIE | UARTCTRL_TCIE | UARTCTRL_RIE |
> + UARTCTRL_LOOPS);
> lpuart32_write(port, temp, UARTCTRL);
> + lpuart32_write(port, 0, UARTMODIR);
>
> spin_unlock_irqrestore(&port->lock, flags);
>
>