Thread (35 messages) 35 messages, 3 authors, 2019-08-27

RE: [PATCH 02/14] serial: tegra: add support to ignore read

From: Krishna Yarlagadda <hidden>
Date: 2019-08-27 09:29:27
Also in: linux-serial, linux-tegra, lkml

-----Original Message-----
From: linux-tegra-owner@vger.kernel.org <linux-tegra-
owner@vger.kernel.org> On Behalf Of Thierry Reding
Sent: Tuesday, August 13, 2019 3:12 PM
To: Krishna Yarlagadda <redacted>
Cc: gregkh@linuxfoundation.org; robh+dt@kernel.org;
mark.rutland@arm.com; Jonathan Hunter [off-list ref]; Laxman
Dewangan [off-list ref]; jslaby@suse.com; linux-
serial@vger.kernel.org; devicetree@vger.kernel.org; linux-
tegra@vger.kernel.org; linux-kernel@vger.kernel.org; Shardar Mohammed
[off-list ref]
Subject: Re: [PATCH 02/14] serial: tegra: add support to ignore read

On Mon, Aug 12, 2019 at 04:58:11PM +0530, Krishna Yarlagadda wrote:
quoted
From: Shardar Shariff Md <redacted>

Add support to ignore read characters if CREAD flag is not set.

Signed-off-by: Shardar Shariff Md <redacted>
Signed-off-by: Krishna Yarlagadda <redacted>
---
 drivers/tty/serial/serial-tegra.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)
diff --git a/drivers/tty/serial/serial-tegra.c
b/drivers/tty/serial/serial-tegra.c
index 19f4c24..93d299e 100644
--- a/drivers/tty/serial/serial-tegra.c
+++ b/drivers/tty/serial/serial-tegra.c
@@ -542,6 +542,9 @@ static void tegra_uart_handle_rx_pio(struct
tegra_uart_port *tup,
quoted
 		ch = (unsigned char) tegra_uart_read(tup, UART_RX);
 		tup->uport.icount.rx++;

+		if (tup->uport.ignore_status_mask & UART_LSR_DR)
+			continue;
+
 		if (!uart_handle_sysrq_char(&tup->uport, ch) && tty)
 			tty_insert_flip_char(tty, ch, flag);
Is it a good idea to ignore even sysrq characters if CREAD is not set?
According to termios, CREAD enables the receiver, so technically if it isn't set
you can't even receive sysrq characters. But I don't know if there are any
rules regarding this.

Is this the same way that other drivers work?

Thierry
Looked into few drivers and sysrq characters are not ignored. This driver does
not support console driver. So this might not be needed.

KY
quoted
 	} while (1);
@@ -562,6 +565,10 @@ static void tegra_uart_copy_rx_to_tty(struct
tegra_uart_port *tup,
quoted
 		dev_err(tup->uport.dev, "No tty port\n");
 		return;
 	}
+
+	if (tup->uport.ignore_status_mask & UART_LSR_DR)
+		return;
+
 	dma_sync_single_for_cpu(tup->uport.dev, tup->rx_dma_buf_phys,
 				TEGRA_UART_RX_DMA_BUFFER_SIZE,
DMA_FROM_DEVICE);
quoted
 	copied = tty_insert_flip_string(tty, @@ -1190,6 +1197,11 @@ static
void tegra_uart_set_termios(struct uart_port *u,
 	tegra_uart_write(tup, tup->ier_shadow, UART_IER);
 	tegra_uart_read(tup, UART_IER);

+	tup->uport.ignore_status_mask = 0;
+	/* Ignore all characters if CREAD is not set */
+	if ((termios->c_cflag & CREAD) == 0)
+		tup->uport.ignore_status_mask |= UART_LSR_DR;
+
 	spin_unlock_irqrestore(&u->lock, flags);  }

--
2.7.4
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help