From 99cdd0954db9c6c298e71130d9168e3157f67362 Mon Sep 17 00:00:00 2001 From: Maxime Bizon Date: Fri, 10 Jun 2011 23:17:58 +0200 Subject: [PATCH] --- yaml --- r: 254143 b: refs/heads/master c: 3bc46b312b1486b1fe2db4246a34a30160d26d8d h: refs/heads/master i: 254141: ac0ecc690ca8780d9cb7572023535b2592fb6dcd 254139: 27446f3598e9b2c6478f50f1de6b60468e84b535 254135: f92e3d8944bba8fbb307ac5dd1aa5cf63da34766 254127: c722964a3f8d2891ce07d8f6bdf4d4f72538211a 254111: 0a3940b4c95fbe329c6fa442c4a27648e49205aa 254079: c1f20724e61b5700d503c3a909df9e096e1da3be v: v3 --- [refs] | 2 +- trunk/drivers/tty/serial/bcm63xx_uart.c | 18 ++++++++++++++---- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index 5c75f2405098..6df9f9370d3f 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 1a7d4369b3fe1f8e5efe7f11a1c482055693852f +refs/heads/master: 3bc46b312b1486b1fe2db4246a34a30160d26d8d diff --git a/trunk/drivers/tty/serial/bcm63xx_uart.c b/trunk/drivers/tty/serial/bcm63xx_uart.c index a1a0e55d0807..c0b68b9cad91 100644 --- a/trunk/drivers/tty/serial/bcm63xx_uart.c +++ b/trunk/drivers/tty/serial/bcm63xx_uart.c @@ -250,6 +250,20 @@ static void bcm_uart_do_rx(struct uart_port *port) /* get overrun/fifo empty information from ier * register */ iestat = bcm_uart_readl(port, UART_IR_REG); + + if (unlikely(iestat & UART_IR_STAT(UART_IR_RXOVER))) { + unsigned int val; + + /* fifo reset is required to clear + * interrupt */ + val = bcm_uart_readl(port, UART_CTL_REG); + val |= UART_CTL_RSTRXFIFO_MASK; + bcm_uart_writel(port, val, UART_CTL_REG); + + port->icount.overrun++; + tty_insert_flip_char(tty, 0, TTY_OVERRUN); + } + if (!(iestat & UART_IR_STAT(UART_IR_RXNOTEMPTY))) break; @@ -284,10 +298,6 @@ static void bcm_uart_do_rx(struct uart_port *port) if (uart_handle_sysrq_char(port, c)) continue; - if (unlikely(iestat & UART_IR_STAT(UART_IR_RXOVER))) { - port->icount.overrun++; - tty_insert_flip_char(tty, 0, TTY_OVERRUN); - } if ((cstat & port->ignore_status_mask) == 0) tty_insert_flip_char(tty, c, flag);