[U-Boot] [PATCH 1/1 v2] omap3_beagle: Enabling UART3 first allows the Transmitter to be empty

Manfred Huber man.huber at arcor.de
Mon Mar 25 23:02:47 CET 2013


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.huber at 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)) || \


More information about the U-Boot mailing list