| From f16cbd879ed26181b9badd916f486ae90c11a4fa Mon Sep 17 00:00:00 2001 |
| From: Daniel Golle <daniel@makrotopia.org> |
| Date: Fri, 7 Feb 2020 11:53:35 +0200 |
| Subject: [PATCH] serial: ar933x_uart: set UART_CS_{RX,TX}_READY_ORIDE |
| |
| commit 87c5cbf71ecbb9e289d60a2df22eb686c70bf196 upstream. |
| |
| On AR934x this UART is usually not initialized by the bootloader |
| as it is only used as a secondary serial port while the primary |
| UART is a newly introduced NS16550-compatible. |
| In order to make use of the ar933x-uart on AR934x without RTS/CTS |
| hardware flow control, one needs to set the |
| UART_CS_{RX,TX}_READY_ORIDE bits as other than on AR933x where this |
| UART is used as primary/console, the bootloader on AR934x typically |
| doesn't set those bits. |
| Setting them explicitely on AR933x should not do any harm, so just |
| set them unconditionally. |
| |
| Tested-by: Chuanhong Guo <gch981213@gmail.com> |
| Signed-off-by: Daniel Golle <daniel@makrotopia.org> |
| Link: https://lore.kernel.org/r/20200207095335.GA179836@makrotopia.org |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/tty/serial/ar933x_uart.c b/drivers/tty/serial/ar933x_uart.c |
| index 3bdd56a1021b..ea12f10610b6 100644 |
| --- a/drivers/tty/serial/ar933x_uart.c |
| +++ b/drivers/tty/serial/ar933x_uart.c |
| @@ -286,6 +286,10 @@ static void ar933x_uart_set_termios(struct uart_port *port, |
| ar933x_uart_rmw_set(up, AR933X_UART_CS_REG, |
| AR933X_UART_CS_HOST_INT_EN); |
| |
| + /* enable RX and TX ready overide */ |
| + ar933x_uart_rmw_set(up, AR933X_UART_CS_REG, |
| + AR933X_UART_CS_TX_READY_ORIDE | AR933X_UART_CS_RX_READY_ORIDE); |
| + |
| /* reenable the UART */ |
| ar933x_uart_rmw(up, AR933X_UART_CS_REG, |
| AR933X_UART_CS_IF_MODE_M << AR933X_UART_CS_IF_MODE_S, |
| @@ -418,6 +422,10 @@ static int ar933x_uart_startup(struct uart_port *port) |
| ar933x_uart_rmw_set(up, AR933X_UART_CS_REG, |
| AR933X_UART_CS_HOST_INT_EN); |
| |
| + /* enable RX and TX ready overide */ |
| + ar933x_uart_rmw_set(up, AR933X_UART_CS_REG, |
| + AR933X_UART_CS_TX_READY_ORIDE | AR933X_UART_CS_RX_READY_ORIDE); |
| + |
| /* Enable RX interrupts */ |
| up->ier = AR933X_UART_INT_RX_VALID; |
| ar933x_uart_write(up, AR933X_UART_INT_EN_REG, up->ier); |
| -- |
| 2.7.4 |
| |