serial: imx: reset the uart port all the time
authorHuang Shijie <b32955@freescale.com>
Wed, 21 May 2014 00:56:28 +0000 (08:56 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 28 May 2014 19:39:46 +0000 (12:39 -0700)
commit772f89910a8a1d1dd9dade2eec3125f283a9db63
tree97db2ad68cbe8543a12928812c7e8f94a95d09cc
parent0c6d774c4d1775aba7281183b424fa0a0b1a3cf0
serial: imx: reset the uart port all the time

Current code resets the uart port only when it supports the irda mode.
In actually, we also need to reset the uart port in the non-irda mode.
A hang was caught in the following case:

    UART A transmits data to the other end. But the transmission maybe
    terminated. In some corner case, the TX FIFO maybe not empty.

The kernel will hang at the imx_set_termios():
............................................................
while (!(readl(sport->port.membase + USR2) & USR2_TXDC))
barrier();
............................................................

This patch resets the uart port all the time in the imx_startup().
And fix the hang.

Signed-off-by: Huang Shijie <b32955@freescale.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/imx.c