From c4448bdc4fb398478bc8499cfcf85fca3c36ad08 Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Wed, 9 Jan 2019 20:35:31 +0100 Subject: 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 Reviewed-by: Simon Glass --- drivers/serial/Kconfig | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'drivers/serial/Kconfig') diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig index e67ea52338..887cd687c0 100644 --- a/drivers/serial/Kconfig +++ b/drivers/serial/Kconfig @@ -447,6 +447,18 @@ config DEBUG_UART_SKIP_INIT Select this if the UART you want to use for debug output is already initialized by the time U-Boot starts its execution. +config DEBUG_UART_NS16550_CHECK_ENABLED + bool "Check if UART is enabled on output" + depends on DEBUG_UART + depends on DEBUG_UART_NS16550 + help + Select this if puts()/putc() might be called before the debug UART + has been initialized. If this is disabled, putc() might sit in a + tight loop if it is called before debug_uart_init() has been called. + + Note that this does not work for every ns16550-compatible UART and + so has to be enabled carefully or you might notice lost characters. + config ALTERA_JTAG_UART bool "Altera JTAG UART support" depends on DM_SERIAL -- cgit v1.2.3