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);