tty: serial: fsl_lpuart: add imx8ulp support
authorSherry Sun <sherry.sun@nxp.com>
Mon, 30 Jan 2023 06:44:49 +0000 (14:44 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 31 Jan 2023 09:53:39 +0000 (10:53 +0100)
The lpuart of imx8ulp is basically the same as imx7ulp, but it supports
some new features based on imx7ulp, such as it can assert the DMA
request on EOP(end-of-packet).

Here add lpuart support for imx8ulp, and rx_watermark is set to 3 as
imx8ulp RX FIFO depth is 8.

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

index c35e49a09bcc30efd8eed4aae136150e50983619..644827e97cb0e78caeef88386421f1f37932e681 100644 (file)
@@ -252,6 +252,7 @@ enum lpuart_type {
        LS1021A_LPUART,
        LS1028A_LPUART,
        IMX7ULP_LPUART,
+       IMX8ULP_LPUART,
        IMX8QXP_LPUART,
        IMXRT1050_LPUART,
 };
@@ -319,6 +320,13 @@ static struct lpuart_soc_data imx7ulp_data = {
        .rx_watermark = 1,
 };
 
+static struct lpuart_soc_data imx8ulp_data = {
+       .devtype = IMX8ULP_LPUART,
+       .iotype = UPIO_MEM32,
+       .reg_off = IMX_REG_OFF,
+       .rx_watermark = 3,
+};
+
 static struct lpuart_soc_data imx8qxp_data = {
        .devtype = IMX8QXP_LPUART,
        .iotype = UPIO_MEM32,
@@ -337,6 +345,7 @@ static const struct of_device_id lpuart_dt_ids[] = {
        { .compatible = "fsl,ls1021a-lpuart",   .data = &ls1021a_data, },
        { .compatible = "fsl,ls1028a-lpuart",   .data = &ls1028a_data, },
        { .compatible = "fsl,imx7ulp-lpuart",   .data = &imx7ulp_data, },
+       { .compatible = "fsl,imx8ulp-lpuart",   .data = &imx8ulp_data, },
        { .compatible = "fsl,imx8qxp-lpuart",   .data = &imx8qxp_data, },
        { .compatible = "fsl,imxrt1050-lpuart", .data = &imxrt1050_data},
        { /* sentinel */ }
@@ -357,6 +366,11 @@ static inline bool is_imx7ulp_lpuart(struct lpuart_port *sport)
        return sport->devtype == IMX7ULP_LPUART;
 }
 
+static inline bool is_imx8ulp_lpuart(struct lpuart_port *sport)
+{
+       return sport->devtype == IMX8ULP_LPUART;
+}
+
 static inline bool is_imx8qxp_lpuart(struct lpuart_port *sport)
 {
        return sport->devtype == IMX8QXP_LPUART;
@@ -2691,7 +2705,7 @@ static int lpuart_global_reset(struct lpuart_port *sport)
                return ret;
        }
 
-       if (is_imx7ulp_lpuart(sport) || is_imx8qxp_lpuart(sport)) {
+       if (is_imx7ulp_lpuart(sport) || is_imx8ulp_lpuart(sport) || is_imx8qxp_lpuart(sport)) {
                /*
                 * If the transmitter is used by earlycon, wait for transmit engine to
                 * complete and then reset.