serial: serial_mtk: enable FIFO and disable flow control
authorWeijie Gao <weijie.gao@mediatek.com>
Wed, 25 Sep 2019 09:45:17 +0000 (17:45 +0800)
committerDaniel Schwierzeck <daniel.schwierzeck@gmail.com>
Fri, 25 Oct 2019 15:20:43 +0000 (17:20 +0200)
This patch adds codes to enable FIFO and disable flow control taken from
ns16550 driver.

Signed-off-by: Weijie Gao <weijie.gao@mediatek.com>
drivers/serial/serial_mtk.c

index bce1be82279362e53d7cafb14996336daa642e42..11892a87405536e8d81101fc598e1653a062395e 100644 (file)
@@ -46,6 +46,22 @@ struct mtk_serial_regs {
 
 #define UART_LSR_DR    0x01            /* Data ready */
 #define UART_LSR_THRE  0x20            /* Xmit holding register empty */
+#define UART_LSR_TEMT  0x40            /* Xmitter empty */
+
+#define UART_MCR_DTR   0x01            /* DTR   */
+#define UART_MCR_RTS   0x02            /* RTS   */
+
+#define UART_FCR_FIFO_EN       0x01    /* Fifo enable */
+#define UART_FCR_RXSR          0x02    /* Receiver soft reset */
+#define UART_FCR_TXSR          0x04    /* Transmitter soft reset */
+
+#define UART_MCRVAL (UART_MCR_DTR | \
+                    UART_MCR_RTS)
+
+/* Clear & enable FIFOs */
+#define UART_FCRVAL (UART_FCR_FIFO_EN | \
+                    UART_FCR_RXSR |    \
+                    UART_FCR_TXSR)
 
 /* the data is correct if the real baud is within 3%. */
 #define BAUD_ALLOW_MAX(baud)   ((baud) + (baud) * 3 / 100)
@@ -175,6 +191,9 @@ static int mtk_serial_probe(struct udevice *dev)
        /* Disable interrupt */
        writel(0, &priv->regs->ier);
 
+       writel(UART_MCRVAL, &priv->regs->mcr);
+       writel(UART_FCRVAL, &priv->regs->fcr);
+
        return 0;
 }
 
@@ -248,6 +267,8 @@ static inline void _debug_uart_init(void)
        priv.clock = CONFIG_DEBUG_UART_CLOCK;
 
        writel(0, &priv.regs->ier);
+       writel(UART_MCRVAL, &priv.regs->mcr);
+       writel(UART_FCRVAL, &priv.regs->fcr);
 
        _mtk_serial_setbrg(&priv, CONFIG_BAUDRATE);
 }