summaryrefslogtreecommitdiff
path: root/drivers/serial/ns16550.c
diff options
context:
space:
mode:
authorJavier Martinez Canillas <javier@dowhile0.org>2013-01-07 01:35:20 +0000
committerTom Rini <trini@ti.com>2013-01-10 15:09:24 -0700
commit7de0fe1ac330399afc1873e11061668a93cf4fb9 (patch)
tree1dbd487b9b511aec938cb52c1b4accf62b051f75 /drivers/serial/ns16550.c
parent94bcfe524cab9574f799bd2b7df9c7de2b81465a (diff)
downloadu-boot-imx-7de0fe1ac330399afc1873e11061668a93cf4fb9.zip
u-boot-imx-7de0fe1ac330399afc1873e11061668a93cf4fb9.tar.gz
u-boot-imx-7de0fe1ac330399afc1873e11061668a93cf4fb9.tar.bz2
serial/ns16550: add an option to avoid hanging on broken platforms
Some platforms (e.g. IGEPv2 board) has a broken ns16550 UART that does not set the TEMT bit when the transmitter is empty in SPL. This makes U-Boot to hang while waiting for TEMT to be set. Add a new option to avoid this: CONFIG_SYS_NS16550_BROKEN_TEMT 16550 UART set the Transmitter Empty (TEMT) Bit when all output has finished and the transmitter is totally empty. U-Boot waits for this bit to be set to initialize the serial console. On some broken platforms this bit is not set in SPL making U-Boot to hang while waiting for TEMT. Define this option to avoid it. Signed-off-by: Javier Martinez Canillas <javier.martinez@collabora.co.uk>
Diffstat (limited to 'drivers/serial/ns16550.c')
-rw-r--r--drivers/serial/ns16550.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/serial/ns16550.c b/drivers/serial/ns16550.c
index bbd91ca..87a0917 100644
--- a/drivers/serial/ns16550.c
+++ b/drivers/serial/ns16550.c
@@ -36,8 +36,10 @@
void NS16550_init(NS16550_t com_port, int baud_divisor)
{
+#if (!defined(CONFIG_SYS_NS16550_BROKEN_TEMT))
while (!(serial_in(&com_port->lsr) & UART_LSR_TEMT))
;
+#endif
serial_out(CONFIG_SYS_NS16550_IER, &com_port->ier);
#if (defined(CONFIG_OMAP) && !defined(CONFIG_OMAP3_ZOOM2)) || \