From: Shubhrajyoti Datta <shubhrajyoti.datta@xilinx.com>
To: linux-serial@vger.kernel.org
Cc: gregkh@linuxfoundation.org, jslaby@suse.com,
michal.simek@xilinx.com, linux-kernel@vger.kernel.org,
Raviteja Narayanam <raviteja.narayanam@xilinx.com>,
Shubhrajyoti Datta <shubhrajyoti.datta@xilinx.com>
Subject: [PATCH v3] serial: uartps: Add TACTIVE bit in cdns_uart_tx_empty function
Date: Fri, 31 Jan 2020 16:34:45 +0530 [thread overview]
Message-ID: <1580468685-11373-1-git-send-email-shubhrajyoti.datta@xilinx.com> (raw)
From: Raviteja Narayanam <raviteja.narayanam@xilinx.com>
Make sure that all the bytes are transmitted out of Uart by monitoring
TACTIVE bit as well.
Before setting up baud rate in set termios function, do not wait for
Tx empty as it is taken care by the tty layer if user specified.
Signed-off-by: Raviteja Narayanam <raviteja.narayanam@xilinx.com>
Signed-off-by: Shubhrajyoti Datta <shubhrajyoti.datta@xilinx.com>
---
v3:
removed the wait from the set_termios and added the TACTIVE to cdns_uart_tx_empty
As suggested by Johan.
drivers/tty/serial/xilinx_uartps.c | 22 +++++-----------------
1 file changed, 5 insertions(+), 17 deletions(-)
diff --git a/drivers/tty/serial/xilinx_uartps.c b/drivers/tty/serial/xilinx_uartps.c
index ed2f325..ebd0a74 100644
--- a/drivers/tty/serial/xilinx_uartps.c
+++ b/drivers/tty/serial/xilinx_uartps.c
@@ -32,7 +32,6 @@
#define CDNS_UART_NAME "xuartps"
#define CDNS_UART_FIFO_SIZE 64 /* FIFO size */
#define CDNS_UART_REGISTER_SPACE 0x1000
-#define TX_TIMEOUT 500000
/* Rx Trigger level */
static int rx_trigger_level = 56;
@@ -656,8 +655,9 @@ static unsigned int cdns_uart_tx_empty(struct uart_port *port)
{
unsigned int status;
- status = readl(port->membase + CDNS_UART_SR) &
- CDNS_UART_SR_TXEMPTY;
+ status = ((readl(port->membase + CDNS_UART_SR) &
+ (CDNS_UART_SR_TXEMPTY |
+ CDNS_UART_SR_TACTIVE)) == CDNS_UART_SR_TXEMPTY);
return status ? TIOCSER_TEMT : 0;
}
@@ -700,20 +700,8 @@ static void cdns_uart_set_termios(struct uart_port *port,
u32 cval = 0;
unsigned int baud, minbaud, maxbaud;
unsigned long flags;
- unsigned int ctrl_reg, mode_reg, val;
- int err;
-
- /* Wait for the transmit FIFO to empty before making changes */
- if (!(readl(port->membase + CDNS_UART_CR) &
- CDNS_UART_CR_TX_DIS)) {
- err = readl_poll_timeout(port->membase + CDNS_UART_SR,
- val, (val & CDNS_UART_SR_TXEMPTY),
- 1000, TX_TIMEOUT);
- if (err) {
- dev_err(port->dev, "timed out waiting for tx empty");
- return;
- }
- }
+ unsigned int ctrl_reg, mode_reg;
+
spin_lock_irqsave(&port->lock, flags);
/* Disable the TX and RX to set baud rate */
--
2.7.4
next reply other threads:[~2020-01-31 11:05 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-01-31 11:04 Shubhrajyoti Datta [this message]
2020-01-31 14:18 ` [PATCH v3] serial: uartps: Add TACTIVE bit in cdns_uart_tx_empty function Johan Hovold
2020-02-01 11:29 ` Maarten Brock
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1580468685-11373-1-git-send-email-shubhrajyoti.datta@xilinx.com \
--to=shubhrajyoti.datta@xilinx.com \
--cc=gregkh@linuxfoundation.org \
--cc=jslaby@suse.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-serial@vger.kernel.org \
--cc=michal.simek@xilinx.com \
--cc=raviteja.narayanam@xilinx.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).