Commit 7de0fe1a authored by Javier Martinez Canillas's avatar Javier Martinez Canillas Committed by Tom Rini
Browse files

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: default avatarJavier Martinez Canillas <javier.martinez@collabora.co.uk>
parent 94bcfe52
...@@ -616,6 +616,14 @@ The following options need to be configured: ...@@ -616,6 +616,14 @@ The following options need to be configured:
boot loader that has already initialized the UART. Define this boot loader that has already initialized the UART. Define this
variable to flush the UART at init time. variable to flush the UART at init time.
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.
- Console Interface: - Console Interface:
Depending on board, define exactly one serial port Depending on board, define exactly one serial port
......
...@@ -36,8 +36,10 @@ ...@@ -36,8 +36,10 @@
void NS16550_init(NS16550_t com_port, int baud_divisor) 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)) while (!(serial_in(&com_port->lsr) & UART_LSR_TEMT))
; ;
#endif
serial_out(CONFIG_SYS_NS16550_IER, &com_port->ier); serial_out(CONFIG_SYS_NS16550_IER, &com_port->ier);
#if (defined(CONFIG_OMAP) && !defined(CONFIG_OMAP3_ZOOM2)) || \ #if (defined(CONFIG_OMAP) && !defined(CONFIG_OMAP3_ZOOM2)) || \
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment