serial: ns16550: fix debug uart putc called before init
authorSimon Goldschmidt <simon.k.r.goldschmidt@gmail.com>
Wed, 9 Jan 2019 19:35:31 +0000 (20:35 +0100)
committerTom Rini <trini@konsulko.com>
Tue, 15 Jan 2019 20:28:52 +0000 (15:28 -0500)
commitc4448bdc4fb398478bc8499cfcf85fca3c36ad08
tree267e9f9c0b75d575fe6cc0d65e6fe55cb31c7e73
parent7828e3cf70513d7bd3a2bcefd52802633c78affd
serial: ns16550: fix debug uart putc called before init

If _debug_uart_putc() is called before _debug_uart_init(), the
ns16550 debug uart driver hangs in a tight loop waiting for the
tx FIFO to get empty.

As this can happen via a printf sneaking in before the port calls
debug_uart_init(), introduce a config option to ignore characters
before the debug uart is initialized.

This is done by reading the baudrate divisor and aborting if is zero.

The Kconfig option is required as reading the baudrate divisor does
not seem to work for all ns16500 compatibles (which is why the last
attempt on this has been reverted in 1a67969a99).

Tested on socfpga_cyclone5_socrates.

Signed-off-by: Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
drivers/serial/Kconfig
drivers/serial/ns16550.c