From: Manfred Huber

Due to a Bug in the ROM code of some OMAP3 devices, the TEMT bit is not set if UART3 is configured before (only THRE is set). Reason is the disabling of UART3 even though the Transmitter is not empty. Enabling UART3 allows the Transmitter to be empty.

Signed-off-by: Manfred Huber <man.hu...@arcor.de>
---
 drivers/serial/ns16550.c |   12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/drivers/serial/ns16550.c b/drivers/serial/ns16550.c
index b2da8b3..24ff84f 100644
--- a/drivers/serial/ns16550.c
+++ b/drivers/serial/ns16550.c
@@ -36,10 +36,18 @@

 void NS16550_init(NS16550_t com_port, int baud_divisor)
 {
-#if (!defined(CONFIG_SYS_NS16550_BROKEN_TEMT))
+#if (defined(CONFIG_SPL_BUILD) && defined(CONFIG_OMAP34XX))
+ if ((serial_in(&com_port->lsr) & (UART_LSR_TEMT | UART_LSR_THRE)) == UART_LSR_THRE) {
+               serial_out(UART_LCR_DLAB, &com_port->lcr);
+               serial_out(baud_divisor & 0xff, &com_port->dll);
+               serial_out((baud_divisor >> 8) & 0xff, &com_port->dlm);
+               serial_out(UART_LCRVAL, &com_port->lcr);
+               serial_out(0, &com_port->mdr1);
+       }
+#endif
+
        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)) || \
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to