Skip to content

Commit

Permalink
tty: serial: lpuart: fix lpuart32_write usage
Browse files Browse the repository at this point in the history
commit 9ea40db upstream.

The 2nd and 3rd parameter were wrongly used, and cause kernel abort when
doing kgdb debug.

Fixes: 1da17d7 ("tty: serial: fsl_lpuart: Use appropriate lpuart32_* I/O funcs")
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Peng Fan <peng.fan@nxp.com>
Link: https://lore.kernel.org/r/20200929091920.22612-1-peng.fan@nxp.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
MrVan authored and gregkh committed Oct 29, 2020
1 parent 6a8a92d commit 40254b8
Showing 1 changed file with 6 additions and 8 deletions.
14 changes: 6 additions & 8 deletions drivers/tty/serial/fsl_lpuart.c
Original file line number Diff line number Diff line change
Expand Up @@ -649,26 +649,24 @@ static int lpuart32_poll_init(struct uart_port *port)
spin_lock_irqsave(&sport->port.lock, flags);

/* Disable Rx & Tx */
lpuart32_write(&sport->port, UARTCTRL, 0);
lpuart32_write(&sport->port, 0, UARTCTRL);

temp = lpuart32_read(&sport->port, UARTFIFO);

/* Enable Rx and Tx FIFO */
lpuart32_write(&sport->port, UARTFIFO,
temp | UARTFIFO_RXFE | UARTFIFO_TXFE);
lpuart32_write(&sport->port, temp | UARTFIFO_RXFE | UARTFIFO_TXFE, UARTFIFO);

/* flush Tx and Rx FIFO */
lpuart32_write(&sport->port, UARTFIFO,
UARTFIFO_TXFLUSH | UARTFIFO_RXFLUSH);
lpuart32_write(&sport->port, UARTFIFO_TXFLUSH | UARTFIFO_RXFLUSH, UARTFIFO);

/* explicitly clear RDRF */
if (lpuart32_read(&sport->port, UARTSTAT) & UARTSTAT_RDRF) {
lpuart32_read(&sport->port, UARTDATA);
lpuart32_write(&sport->port, UARTFIFO, UARTFIFO_RXUF);
lpuart32_write(&sport->port, UARTFIFO_RXUF, UARTFIFO);
}

/* Enable Rx and Tx */
lpuart32_write(&sport->port, UARTCTRL, UARTCTRL_RE | UARTCTRL_TE);
lpuart32_write(&sport->port, UARTCTRL_RE | UARTCTRL_TE, UARTCTRL);
spin_unlock_irqrestore(&sport->port.lock, flags);

return 0;
Expand All @@ -677,7 +675,7 @@ static int lpuart32_poll_init(struct uart_port *port)
static void lpuart32_poll_put_char(struct uart_port *port, unsigned char c)
{
lpuart32_wait_bit_set(port, UARTSTAT, UARTSTAT_TDRE);
lpuart32_write(port, UARTDATA, c);
lpuart32_write(port, c, UARTDATA);
}

static int lpuart32_poll_get_char(struct uart_port *port)
Expand Down

0 comments on commit 40254b8

Please sign in to comment.