]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
serial: imx: Add Rx Fifo overrun error message
authorAlexander Stein <alexander.stein@systec-electronic.com>
Tue, 14 May 2013 15:06:07 +0000 (17:06 +0200)
committerJason Liu <r64343@freescale.com>
Wed, 30 Oct 2013 01:54:02 +0000 (09:54 +0800)
This patch enables the overrun error (ORE) interrupt and increases the
counter in case of overrun.

Signed-off-by: Alexander Stein <alexander.stein@systec-electronic.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/imx.c

index 8cdfbd365892146611b772bbfb217a8f48938c3a..b350cf175940c30374833cd9d50b3a165b1d1aab 100644 (file)
@@ -449,6 +449,13 @@ static void imx_start_tx(struct uart_port *port)
                temp &= ~(UCR1_RRDYEN);
                writel(temp, sport->port.membase + UCR1);
        }
+       /* Clear any pending ORE flag before enabling interrupt */
+       temp = readl(sport->port.membase + USR2);
+       writel(temp | USR2_ORE, sport->port.membase + USR2);
+
+       temp = readl(sport->port.membase + UCR4);
+       temp |= UCR4_OREN;
+       writel(temp, sport->port.membase + UCR4);
 
        temp = readl(sport->port.membase + UCR1);
        writel(temp | UCR1_TXMPTYEN, sport->port.membase + UCR1);
@@ -582,6 +589,7 @@ static irqreturn_t imx_int(int irq, void *dev_id)
 {
        struct imx_port *sport = dev_id;
        unsigned int sts;
+       unsigned int sts2;
 
        sts = readl(sport->port.membase + USR1);
 
@@ -598,6 +606,13 @@ static irqreturn_t imx_int(int irq, void *dev_id)
        if (sts & USR1_AWAKE)
                writel(USR1_AWAKE, sport->port.membase + USR1);
 
+       sts2 = readl(sport->port.membase + USR2);
+       if (sts2 & USR2_ORE) {
+               dev_err(sport->port.dev, "Rx FIFO overrun\n");
+               sport->port.icount.overrun++;
+               writel(sts2 | USR2_ORE, sport->port.membase + USR2);
+       }
+
        return IRQ_HANDLED;
 }