diff options
author | Tom Rini <trini@ti.com> | 2014-09-17 18:01:04 -0400 |
---|---|---|
committer | Tom Rini <trini@ti.com> | 2014-09-17 18:01:04 -0400 |
commit | e38b15b0619f9a8b869896229355808f494fb2ac (patch) | |
tree | 2048b9e715f1d6f76b298bf404d4b2e293ae3b0c /drivers/serial/serial_lpuart.c | |
parent | 1ee30aeed47724eb7c8f145f064b8d03cd294808 (diff) | |
parent | c292adae170fa8c27dca75963bdb0a9afc640e57 (diff) | |
download | u-boot-imx-e38b15b0619f9a8b869896229355808f494fb2ac.zip u-boot-imx-e38b15b0619f9a8b869896229355808f494fb2ac.tar.gz u-boot-imx-e38b15b0619f9a8b869896229355808f494fb2ac.tar.bz2 |
Merge branch 'master' of git://git.denx.de/u-boot-arm
Diffstat (limited to 'drivers/serial/serial_lpuart.c')
-rw-r--r-- | drivers/serial/serial_lpuart.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/drivers/serial/serial_lpuart.c b/drivers/serial/serial_lpuart.c index b0c6f6f..63fc388 100644 --- a/drivers/serial/serial_lpuart.c +++ b/drivers/serial/serial_lpuart.c @@ -14,8 +14,13 @@ #define US1_TDRE (1 << 7) #define US1_RDRF (1 << 5) +#define US1_OR (1 << 3) #define UC2_TE (1 << 3) #define UC2_RE (1 << 2) +#define CFIFO_TXFLUSH (1 << 7) +#define CFIFO_RXFLUSH (1 << 6) +#define SFIFO_RXOF (1 << 2) +#define SFIFO_RXUF (1 << 0) #define STAT_LBKDIF (1 << 31) #define STAT_RXEDGIF (1 << 30) @@ -62,14 +67,10 @@ static void lpuart_serial_setbrg(void) static int lpuart_serial_getc(void) { - u8 status; - - while (!(__raw_readb(&base->us1) & US1_RDRF)) + while (!(__raw_readb(&base->us1) & (US1_RDRF | US1_OR))) WATCHDOG_RESET(); - status = __raw_readb(&base->us1); - status |= US1_RDRF; - __raw_writeb(status, &base->us1); + barrier(); return __raw_readb(&base->ud); } @@ -112,6 +113,12 @@ static int lpuart_serial_init(void) __raw_writeb(0, &base->umodem); __raw_writeb(0, &base->uc1); + /* Disable FIFO and flush buffer */ + __raw_writeb(0x0, &base->upfifo); + __raw_writeb(0x0, &base->utwfifo); + __raw_writeb(0x1, &base->urwfifo); + __raw_writeb(CFIFO_TXFLUSH | CFIFO_RXFLUSH, &base->ucfifo); + /* provide data bits, parity, stop bit, etc */ serial_setbrg(); |