All of lore.kernel.org
 help / color / mirror / Atom feed
From: Raviteja Narayanam <raviteja.narayanam@xilinx.com>
To: linux-serial@vger.kernel.org
Cc: gregkh@linuxfoundation.org, jslaby@suse.com,
	michal.simek@xilinx.com, linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, git@xilinx.com,
	Raviteja Narayanam <raviteja.narayanam@xilinx.com>
Subject: [PATCH v2 1/2] serial: uartps: Wait for tx_empty in console setup
Date: Thu,  9 Apr 2020 11:56:02 +0530	[thread overview]
Message-ID: <1586413563-29125-2-git-send-email-raviteja.narayanam@xilinx.com> (raw)
In-Reply-To: <1586413563-29125-1-git-send-email-raviteja.narayanam@xilinx.com>

On some platforms, the log is corrupted while console is being
registered. It is observed that when set_termios is called, there
are still some bytes in the FIFO to be transmitted.

So, wait for tx_empty inside cdns_uart_console_setup before calling
set_termios.

Signed-off-by: Raviteja Narayanam <raviteja.narayanam@xilinx.com>
---
 drivers/tty/serial/xilinx_uartps.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/tty/serial/xilinx_uartps.c b/drivers/tty/serial/xilinx_uartps.c
index 6b26f76..0bf946b 100644
--- a/drivers/tty/serial/xilinx_uartps.c
+++ b/drivers/tty/serial/xilinx_uartps.c
@@ -1260,6 +1260,7 @@ static int cdns_uart_console_setup(struct console *co, char *options)
 	int bits = 8;
 	int parity = 'n';
 	int flow = 'n';
+	unsigned long time_out;
 
 	if (!port->membase) {
 		pr_debug("console on " CDNS_UART_TTY_NAME "%i not present\n",
@@ -1270,6 +1271,13 @@ static int cdns_uart_console_setup(struct console *co, char *options)
 	if (options)
 		uart_parse_options(options, &baud, &parity, &bits, &flow);
 
+	/* Wait for tx_empty before setting up the console */
+	time_out = jiffies + usecs_to_jiffies(TX_TIMEOUT);
+
+	while (time_before(jiffies, time_out) &&
+	       cdns_uart_tx_empty(port) != TIOCSER_TEMT)
+		cpu_relax();
+
 	return uart_set_options(port, co, baud, parity, bits, flow);
 }
 #endif /* CONFIG_SERIAL_XILINX_PS_UART_CONSOLE */
-- 
2.7.4


WARNING: multiple messages have this Message-ID (diff)
From: Raviteja Narayanam <raviteja.narayanam@xilinx.com>
To: linux-serial@vger.kernel.org
Cc: Raviteja Narayanam <raviteja.narayanam@xilinx.com>,
	gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org,
	michal.simek@xilinx.com, git@xilinx.com, jslaby@suse.com,
	linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 1/2] serial: uartps: Wait for tx_empty in console setup
Date: Thu,  9 Apr 2020 11:56:02 +0530	[thread overview]
Message-ID: <1586413563-29125-2-git-send-email-raviteja.narayanam@xilinx.com> (raw)
In-Reply-To: <1586413563-29125-1-git-send-email-raviteja.narayanam@xilinx.com>

On some platforms, the log is corrupted while console is being
registered. It is observed that when set_termios is called, there
are still some bytes in the FIFO to be transmitted.

So, wait for tx_empty inside cdns_uart_console_setup before calling
set_termios.

Signed-off-by: Raviteja Narayanam <raviteja.narayanam@xilinx.com>
---
 drivers/tty/serial/xilinx_uartps.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/tty/serial/xilinx_uartps.c b/drivers/tty/serial/xilinx_uartps.c
index 6b26f76..0bf946b 100644
--- a/drivers/tty/serial/xilinx_uartps.c
+++ b/drivers/tty/serial/xilinx_uartps.c
@@ -1260,6 +1260,7 @@ static int cdns_uart_console_setup(struct console *co, char *options)
 	int bits = 8;
 	int parity = 'n';
 	int flow = 'n';
+	unsigned long time_out;
 
 	if (!port->membase) {
 		pr_debug("console on " CDNS_UART_TTY_NAME "%i not present\n",
@@ -1270,6 +1271,13 @@ static int cdns_uart_console_setup(struct console *co, char *options)
 	if (options)
 		uart_parse_options(options, &baud, &parity, &bits, &flow);
 
+	/* Wait for tx_empty before setting up the console */
+	time_out = jiffies + usecs_to_jiffies(TX_TIMEOUT);
+
+	while (time_before(jiffies, time_out) &&
+	       cdns_uart_tx_empty(port) != TIOCSER_TEMT)
+		cpu_relax();
+
 	return uart_set_options(port, co, baud, parity, bits, flow);
 }
 #endif /* CONFIG_SERIAL_XILINX_PS_UART_CONSOLE */
-- 
2.7.4


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2020-04-09  6:27 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-04-09  6:26 [PATCH v2 0/2] serial: uartps: Add tx_empty checks Raviteja Narayanam
2020-04-09  6:26 ` Raviteja Narayanam
2020-04-09  6:26 ` Raviteja Narayanam [this message]
2020-04-09  6:26   ` [PATCH v2 1/2] serial: uartps: Wait for tx_empty in console setup Raviteja Narayanam
2020-04-09  6:26 ` [PATCH v2 2/2] serial: uartps: Use cdns_uart_tx_empty in console_write Raviteja Narayanam
2020-04-09  6:26   ` Raviteja Narayanam
2020-04-13 10:00 ` [PATCH v2 0/2] serial: uartps: Add tx_empty checks Shubhrajyoti Datta
2020-04-13 10:00   ` Shubhrajyoti Datta

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=1586413563-29125-2-git-send-email-raviteja.narayanam@xilinx.com \
    --to=raviteja.narayanam@xilinx.com \
    --cc=git@xilinx.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=jslaby@suse.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-serial@vger.kernel.org \
    --cc=michal.simek@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.