Commit 8a79052c authored by Sherry Sun's avatar Sherry Sun Committed by Greg Kroah-Hartman
Browse files

tty: serial: fsl_lpuart: don't enable receiver/transmitter before rx/tx dma ready



lpuart32_setup_watermark_enable() will configure the UART FIFO and
watermark, also enable the receiver and transmitter, this should be done
after the rx/tx dma steup ready.

Also add lpuart32_hw_disable() to make sure the receiver/transmitter and
interrupts are disabled during the dma steup.

Signed-off-by: default avatarSherry Sun <sherry.sun@nxp.com>
Link: https://lore.kernel.org/r/20230130054107.9119-1-sherry.sun@nxp.com


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent ed0400ad
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -1702,6 +1702,16 @@ static int lpuart_startup(struct uart_port *port)
	return 0;
}

static void lpuart32_hw_disable(struct lpuart_port *sport)
{
	unsigned long temp;

	temp = lpuart32_read(&sport->port, UARTCTRL);
	temp &= ~(UARTCTRL_RIE | UARTCTRL_ILIE | UARTCTRL_RE |
		  UARTCTRL_TIE | UARTCTRL_TE);
	lpuart32_write(&sport->port, temp, UARTCTRL);
}

static void lpuart32_configure(struct lpuart_port *sport)
{
	unsigned long temp;
@@ -1726,11 +1736,12 @@ static void lpuart32_hw_setup(struct lpuart_port *sport)

	spin_lock_irqsave(&sport->port.lock, flags);

	lpuart32_setup_watermark_enable(sport);
	lpuart32_hw_disable(sport);

	lpuart_rx_dma_startup(sport);
	lpuart_tx_dma_startup(sport);

	lpuart32_setup_watermark_enable(sport);
	lpuart32_configure(sport);

	spin_unlock_irqrestore(&sport->port.lock, flags);