Skip to contentSkip to conversation

serial: tegra: fix CREAD handling for PIO

PATCH In review Johan Hovold 2 participants 5 messages Jul 10, 2020 – Jul 14, 2020

Subsystems (4)
lore
Share & tools
lore
#0 lore raw

cover serial: tegra: fix CREAD handling for PIO

Stumbled over these two; compile-tested only.

Johan

Johan Hovold (2):
serial: tegra: fix CREAD handling for PIO
serial: tegra: drop bogus NULL tty-port checks

 drivers/tty/serial/serial-tegra.c | 16 +++++++---------
 1 file changed, 7 insertions(+), 9 deletions(-)
Signature · 1 line
2.26.2
#1 lore raw

PATCH 1/2 serial: tegra: fix CREAD handling for PIO

Commit 33ae787b74fc ("serial: tegra: add support to ignore read") added support for dropping input in case CREAD isn't set, but for PIO the ignore_status_mask wasn't checked until after the character had been put in the receive buffer.

Note that the NULL tty-port test is bogus and will be removed by a follow-on patch.

Fixes 33ae787b74fc ("serial: tegra: add support to ignore read")
Cc stable <[email protected]> # 5.4
Cc Shardar Shariff Md <[email protected]>
Cc Krishna Yarlagadda <[email protected]>
---
 drivers/tty/serial/serial-tegra.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)
drivers/tty/serial/serial-tegra.c +5 -2
index 8de8bac9c6c7..b3bbee6b6702 100644
@@ -653,11 +653,14 @@ static void tegra_uart_handle_rx_pio(struct tegra_uart_port *tup,
 		ch = (unsigned char) tegra_uart_read(tup, UART_RX);
 		tup->uport.icount.rx++;
 
-		if (!uart_handle_sysrq_char(&tup->uport, ch) && tty)
-			tty_insert_flip_char(tty, ch, flag);
+		if (uart_handle_sysrq_char(&tup->uport, ch))
+			continue;
 
 		if (tup->uport.ignore_status_mask & UART_LSR_DR)
 			continue;
+
+		if (tty)
+			tty_insert_flip_char(tty, ch, flag);
 	} while (1);
 }
 
Signature · 1 line
2.26.2
Acked-by on v1 1/2
#2 lore raw
Quoted 8 lines · Johan Hovold

Commit 33ae787b74fc ("serial: tegra: add support to ignore read") added support for dropping input in case CREAD isn't set, but for PIO the ignore_status_mask wasn't checked until after the character had been put in the receive buffer.

Note that the NULL tty-port test is bogus and will be removed by a follow-on patch.

Quoted 8 lines
Fixes 33ae787b74fc ("serial: tegra: add support to ignore read")
Cc stable <[email protected]> # 5.4
Cc Shardar Shariff Md <[email protected]>
Cc Krishna Yarlagadda <[email protected]>
---
 drivers/tty/serial/serial-tegra.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

Looks good to me:

#3 lore raw

PATCH 2/2 serial: tegra: drop bogus NULL tty-port checks

In reply to Johan Hovold

The struct tty_port is part of the uart state and will never be NULL in the receive helpers. Drop the bogus NULL checks and rename the pointer-variables "port" to differentiate them from struct tty_struct pointers (which can be NULL).

Fixes 962963e4ee23 ("serial: tegra: Switch to using struct tty_port")
---
 drivers/tty/serial/serial-tegra.c | 13 ++++---------
 1 file changed, 4 insertions(+), 9 deletions(-)
drivers/tty/serial/serial-tegra.c +4 -9
index b3bbee6b6702..04d1b0807e66 100644
@@ -635,7 +635,7 @@ static void tegra_uart_handle_tx_pio(struct tegra_uart_port *tup)
 }
 
 static void tegra_uart_handle_rx_pio(struct tegra_uart_port *tup,
-		struct tty_port *tty)
+		struct tty_port *port)
 {
 	do {
 		char flag = TTY_NORMAL;
@@ -659,13 +659,12 @@ static void tegra_uart_handle_rx_pio(struct tegra_uart_port *tup,
 		if (tup->uport.ignore_status_mask & UART_LSR_DR)
 			continue;
 
-		if (tty)
-			tty_insert_flip_char(tty, ch, flag);
+		tty_insert_flip_char(port, ch, flag);
 	} while (1);
 }
 
 static void tegra_uart_copy_rx_to_tty(struct tegra_uart_port *tup,
-				      struct tty_port *tty,
+				      struct tty_port *port,
 				      unsigned int count)
 {
 	int copied;
@@ -675,17 +674,13 @@ static void tegra_uart_copy_rx_to_tty(struct tegra_uart_port *tup,
 		return;
 
 	tup->uport.icount.rx += count;
-	if (!tty) {
-		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,
 				count, DMA_FROM_DEVICE);
-	copied = tty_insert_flip_string(tty,
+	copied = tty_insert_flip_string(port,
 			((unsigned char *)(tup->rx_dma_buf_virt)), count);
 	if (copied != count) {
 		WARN_ON(1);
Signature · 1 line
2.26.2
Acked-by on v1 2/2
#4 lore raw

Re: [PATCH 2/2] serial: tegra: drop bogus NULL tty-port checks

Quoted 10 lines · Johan Hovold

The struct tty_port is part of the uart state and will never be NULL in the receive helpers. Drop the bogus NULL checks and rename the pointer-variables "port" to differentiate them from struct tty_struct pointers (which can be NULL).

Fixes 962963e4ee23 ("serial: tegra: Switch to using struct tty_port")
---
 drivers/tty/serial/serial-tegra.c | 13 ++++---------
 1 file changed, 4 insertions(+), 9 deletions(-)