+++ /dev/null
-From patchwork Fri Feb 7 09:53:35 2020
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-X-Patchwork-Submitter: Daniel Golle <daniel@makrotopia.org>
-X-Patchwork-Id: 1190470
-Date: Fri, 7 Feb 2020 11:53:35 +0200
-From: Daniel Golle <daniel@makrotopia.org>
-To: linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org
-Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
- Jiri Slaby <jslaby@suse.com>,
- Chuanhong Guo <gch981213@gmail.com>,
- Eitan Cohen <eitan@neot-semadar.com>,
- Ori Gofen <origofen@gmail.com>
-Subject: [PATCH] serial: ar933x_uart: set UART_CS_{RX,TX}_READY_ORIDE
-Message-ID: <20200207095335.GA179836@makrotopia.org>
-MIME-Version: 1.0
-Content-Disposition: inline
-Sender: linux-kernel-owner@vger.kernel.org
-Precedence: bulk
-List-ID: <linux-kernel.vger.kernel.org>
-X-Mailing-List: linux-kernel@vger.kernel.org
-
-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>
----
- drivers/tty/serial/ar933x_uart.c | 8 ++++++++
- 1 file changed, 8 insertions(+)
-
---- a/drivers/tty/serial/ar933x_uart.c
-+++ b/drivers/tty/serial/ar933x_uart.c
-@@ -290,6 +290,10 @@ static void ar933x_uart_set_termios(stru
- ar933x_uart_rmw_set(up, AR933X_UART_CS_REG,
- AR933X_UART_CS_TX_READY_ORIDE | AR933X_UART_CS_RX_READY_ORIDE);
-
-+ /* 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,
-@@ -424,6 +428,10 @@ static int ar933x_uart_startup(struct ua
-
- /* 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 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 */
}
static void ar933x_uart_break_ctl(struct uart_port *port, int break_state)
-@@ -340,11 +397,20 @@ static void ar933x_uart_rx_chars(struct
+@@ -336,11 +393,20 @@ static void ar933x_uart_rx_chars(struct
static void ar933x_uart_tx_chars(struct ar933x_uart_port *up)
{
struct circ_buf *xmit = &up->port.state->xmit;
count = up->port.fifosize;
do {
unsigned int rdata;
-@@ -372,8 +438,14 @@ static void ar933x_uart_tx_chars(struct
+@@ -368,8 +434,14 @@ static void ar933x_uart_tx_chars(struct
if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
uart_write_wakeup(&up->port);
}
static irqreturn_t ar933x_uart_interrupt(int irq, void *dev_id)
-@@ -435,8 +507,7 @@ static int ar933x_uart_startup(struct ua
+@@ -427,8 +499,7 @@ static int ar933x_uart_startup(struct ua
AR933X_UART_CS_TX_READY_ORIDE | AR933X_UART_CS_RX_READY_ORIDE);
/* Enable RX interrupts */
spin_unlock_irqrestore(&up->port.lock, flags);
-@@ -519,6 +590,21 @@ static const struct uart_ops ar933x_uart
+@@ -511,6 +582,21 @@ static const struct uart_ops ar933x_uart
.verify_port = ar933x_uart_verify_port,
};
#ifdef CONFIG_SERIAL_AR933X_CONSOLE
static struct ar933x_uart_port *
ar933x_console_ports[CONFIG_SERIAL_AR933X_NR_UARTS];
-@@ -688,6 +774,8 @@ static int ar933x_uart_probe(struct plat
+@@ -680,6 +766,8 @@ static int ar933x_uart_probe(struct plat
goto err_disable_clk;
}
port->mapbase = mem_res->start;
port->line = id;
port->irq = irq_res->start;
-@@ -698,6 +786,7 @@ static int ar933x_uart_probe(struct plat
+@@ -690,6 +778,7 @@ static int ar933x_uart_probe(struct plat
port->regshift = 2;
port->fifosize = AR933X_UART_FIFO_SIZE;
port->ops = &ar933x_uart_ops;
baud = ar933x_uart_get_baud(port->uartclk, AR933X_UART_MAX_SCALE, 1);
up->min_baud = max_t(unsigned int, baud, AR933X_UART_MIN_BAUD);
-@@ -705,6 +794,18 @@ static int ar933x_uart_probe(struct plat
+@@ -697,6 +786,18 @@ static int ar933x_uart_probe(struct plat
baud = ar933x_uart_get_baud(port->uartclk, 0, AR933X_UART_MAX_STEP);
up->max_baud = min_t(unsigned int, baud, AR933X_UART_MAX_BAUD);