aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/tty
diff options
context:
space:
mode:
authorNava kishore Manne <nava.manne@xilinx.com>2016-09-22 16:58:15 +0100
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2016-09-27 12:54:41 +0200
commit212d249b6acbe00ac3617938433ce785c2d68e88 (patch)
tree66703d0f852d89f1228a9af6ce8411632a8a7838 /drivers/tty
parentserial: xuartps: Rewrite the interrupt handling logic (diff)
downloadlinux-dev-212d249b6acbe00ac3617938433ce785c2d68e88.tar.xz
linux-dev-212d249b6acbe00ac3617938433ce785c2d68e88.zip
serial: xuartps: Removed unwanted checks while reading the error conditions
This patch Remove the unwated checks while reading the parity,framing, overrun and Break detection errors. Signed-off-by: Nava kishore Manne <navam@xilinx.com> Signed-off-by: Michal Simek <michal.simek@xilinx.com> [stelford@cadence.com: cherry picked from https://github.com/Xilinx/linux-xlnx commit b1cf74970df5470ffbc8e7876a9edf5e3498ef94] Signed-off-by: Scott Telford <stelford@cadence.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/tty')
-rw-r--r--drivers/tty/serial/xilinx_uartps.c72
1 files changed, 35 insertions, 37 deletions
diff --git a/drivers/tty/serial/xilinx_uartps.c b/drivers/tty/serial/xilinx_uartps.c
index 511999755f5c..39f41bfd7c22 100644
--- a/drivers/tty/serial/xilinx_uartps.c
+++ b/drivers/tty/serial/xilinx_uartps.c
@@ -248,48 +248,46 @@ static void cdns_uart_handle_rx(void *dev_id, unsigned int isrstatus)
status_mask = port->read_status_mask;
status_mask &= ~port->ignore_status_mask;
- if ((isrstatus & CDNS_UART_IXR_TOUT) ||
- (isrstatus & CDNS_UART_IXR_RXTRIG)) {
- if (data &&
- (port->read_status_mask & CDNS_UART_IXR_BRK)) {
- port->read_status_mask &= ~CDNS_UART_IXR_BRK;
- port->icount.brk++;
- if (uart_handle_break(port))
- continue;
- }
-
- if (uart_handle_sysrq_char(port, data))
+ if (data &&
+ (port->read_status_mask & CDNS_UART_IXR_BRK)) {
+ port->read_status_mask &= ~CDNS_UART_IXR_BRK;
+ port->icount.brk++;
+ if (uart_handle_break(port))
continue;
+ }
- if (is_rxbs_support) {
- if ((rxbs_status & CDNS_UART_RXBS_PARITY)
- && (status_mask & CDNS_UART_IXR_PARITY)) {
- port->icount.parity++;
- status = TTY_PARITY;
- }
- if ((rxbs_status & CDNS_UART_RXBS_FRAMING)
- && (status_mask & CDNS_UART_IXR_PARITY)) {
- port->icount.frame++;
- status = TTY_FRAME;
- }
- } else {
- if (isrstatus & CDNS_UART_IXR_PARITY) {
- port->icount.parity++;
- status = TTY_PARITY;
- }
- if ((isrstatus & CDNS_UART_IXR_FRAMING) &&
- !framerrprocessed) {
- port->icount.frame++;
- status = TTY_FRAME;
- }
+ if (uart_handle_sysrq_char(port, data))
+ continue;
+
+ if (is_rxbs_support) {
+ if ((rxbs_status & CDNS_UART_RXBS_PARITY)
+ && (status_mask & CDNS_UART_IXR_PARITY)) {
+ port->icount.parity++;
+ status = TTY_PARITY;
+ }
+ if ((rxbs_status & CDNS_UART_RXBS_FRAMING)
+ && (status_mask & CDNS_UART_IXR_PARITY)) {
+ port->icount.frame++;
+ status = TTY_FRAME;
}
- if (isrstatus & CDNS_UART_IXR_OVERRUN) {
- port->icount.overrun++;
- tty_insert_flip_char(&port->state->port, 0,
- TTY_OVERRUN);
+ } else {
+ if (isrstatus & CDNS_UART_IXR_PARITY) {
+ port->icount.parity++;
+ status = TTY_PARITY;
}
- tty_insert_flip_char(&port->state->port, data, status);
+ if ((isrstatus & CDNS_UART_IXR_FRAMING) &&
+ !framerrprocessed) {
+ port->icount.frame++;
+ status = TTY_FRAME;
+ }
+ }
+ if (isrstatus & CDNS_UART_IXR_OVERRUN) {
+ port->icount.overrun++;
+ tty_insert_flip_char(&port->state->port, 0,
+ TTY_OVERRUN);
}
+ tty_insert_flip_char(&port->state->port, data, status);
+ isrstatus = 0;
}
spin_unlock(&port->lock);
tty_flip_buffer_push(&port->state->port);