RE: [PATCH 06/14] serial: tegra: report error to upper tty layer
From: Krishna Yarlagadda <hidden>
Date: 2019-08-27 09:34:58
Also in:
linux-serial, linux-tegra, lkml
-----Original Message----- From: Thierry Reding <redacted> Sent: Tuesday, August 13, 2019 3:22 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 06/14] serial: tegra: report error to upper tty layer On Mon, Aug 12, 2019 at 04:58:15PM +0530, Krishna Yarlagadda wrote:quoted
Report overrun/parity/frame/break errors to top tty layer. Add support to ignore break character if IGNBRK is set. Signed-off-by: Shardar Shariff Md <redacted> Signed-off-by: Krishna Yarlagadda <redacted> --- drivers/tty/serial/serial-tegra.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-)diff --git a/drivers/tty/serial/serial-tegra.cb/drivers/tty/serial/serial-tegra.c index f6a3f4e..7ab81bb 100644--- a/drivers/tty/serial/serial-tegra.c +++ b/drivers/tty/serial/serial-tegra.c@@ -374,13 +374,21 @@ static char tegra_uart_decode_rx_error(structtegra_uart_port *tup,quoted
tup->uport.icount.frame++; dev_err(tup->uport.dev, "Got frame errors\n"); } else if (lsr & UART_LSR_BI) { - dev_err(tup->uport.dev, "Got Break\n"); - tup->uport.icount.brk++; - /* If FIFO read error without any data, reset Rx FIFO*/quoted
+ /* + * Break error + * If FIFO read error without any data, reset Rx FIFO + */ if (!(lsr & UART_LSR_DR) && (lsr & UART_LSR_FIFOE)) tegra_uart_fifo_reset(tup,UART_FCR_CLEAR_RCVR);quoted
+ if (tup->uport.ignore_status_mask & UART_LSR_BI) + return TTY_BREAK; + flag = TTY_BREAK; + tup->uport.icount.brk++; + dev_err(tup->uport.dev, "Got Break\n");I know this is preexisting, but why do we want to output an error message in these cases. Isn't it perfectly legal for this to happen? Thierry
It is valid to have breaks for sysrq requests. But they also indicate possible mismatch in baud rate. So warning user as this could be potential issue. I will change this to dev_dbg to avoid spamming user in valid cases. KY
quoted
} + uart_insert_char(&tup->uport, lsr, UART_LSR_OE, 0, flag); } + return flag; }@@ -562,6 +570,9 @@ static void tegra_uart_handle_rx_pio(structtegra_uart_port *tup,quoted
break; flag = tegra_uart_decode_rx_error(tup, lsr); + if (flag != TTY_NORMAL) + continue; + ch = (unsigned char) tegra_uart_read(tup, UART_RX); tup->uport.icount.rx++;@@ -1224,6 +1235,8 @@ static void tegra_uart_set_termios(structuart_port *u,quoted
/* Ignore all characters if CREAD is not set */ if ((termios->c_cflag & CREAD) == 0) tup->uport.ignore_status_mask |= UART_LSR_DR; + if (termios->c_iflag & IGNBRK) + tup->uport.ignore_status_mask |= UART_LSR_BI; spin_unlock_irqrestore(&u->lock, flags); } -- 2.7.4