OSDN Git Service

tty: serial: fsl_lpuart: set RTS watermark for lpuart
authorSherry Sun <sherry.sun@nxp.com>
Mon, 30 Jan 2023 06:44:48 +0000 (14:44 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 31 Jan 2023 09:53:39 +0000 (10:53 +0100)
Add RTS watermark support for LPUART. The RX RTS_B output negates when
the number of empty words in the receive FIFO is greater or equal to
RTSWATER. Here set the RTSWATER to half of the rxfifo_size.

Signed-off-by: Sherry Sun <sherry.sun@nxp.com>
Link: https://lore.kernel.org/r/20230130064449.9564-6-sherry.sun@nxp.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/fsl_lpuart.c

index 2789749..c35e49a 100644 (file)
 #define UARTDATA_MASK          0x3ff
 
 #define UARTMODIR_IREN         0x00020000
+#define UARTMODIR_RTSWATER     GENMASK(10, 8)
 #define UARTMODIR_TXCTSSRC     0x00000020
 #define UARTMODIR_TXCTSC       0x00000010
 #define UARTMODIR_RXRTSE       0x00000008
@@ -1573,6 +1574,13 @@ static void lpuart32_setup_watermark(struct lpuart_port *sport)
              (0x0 << UARTWATER_TXWATER_OFF);
        lpuart32_write(&sport->port, val, UARTWATER);
 
+       /* set RTS watermark */
+       if (!uart_console(&sport->port)) {
+               val = lpuart32_read(&sport->port, UARTMODIR);
+               val |= FIELD_PREP(UARTMODIR_RTSWATER, sport->rxfifo_size >> 1);
+               lpuart32_write(&sport->port, val, UARTMODIR);
+       }
+
        /* Restore cr2 */
        lpuart32_write(&sport->port, ctrl_saved, UARTCTRL);
 }