[ARM] 4995/1: <IMX UART>: Do not use URXD_CHARRDY for polling
authorSascha Hauer <sascha@saschahauer.de>
Thu, 17 Apr 2008 07:43:14 +0000 (08:43 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Thu, 17 Apr 2008 15:18:20 +0000 (16:18 +0100)
Do not use the URXD_CHARRDY bit for polling for new characters. This works
on i.MX1, but on MX31 the datasheet states that this bit should not be
used for polling. On MX27 it is even worse, here we get a bus error when
we access the read FIFO when no character is present.
Instead, use USR2_RDR (receive data ready) bit.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
drivers/serial/imx.c

index c637ae219126939e62bcc5582299dcbf5e3541c5..f7596641f121a31b908be26e773ea86daf085966 100644 (file)
@@ -356,10 +356,12 @@ static irqreturn_t imx_rxint(int irq, void *dev_id)
 
        spin_lock_irqsave(&sport->port.lock,flags);
 
-       while ((rx = readl(sport->port.membase + URXD0)) & URXD_CHARRDY) {
+       while (readl(sport->port.membase + USR2) & USR2_RDR) {
                flg = TTY_NORMAL;
                sport->port.icount.rx++;
 
+               rx = readl(sport->port.membase + URXD0);
+
                temp = readl(sport->port.membase + USR2);
                if (temp & USR2_BRCD) {
                        writel(temp | USR2_BRCD, sport->port.membase + USR2);