From: Patrik Dahlström Date: Sat, 21 Dec 2019 16:25:12 +0000 (+0100) Subject: serial: ns16550: Use old baud rate divisor for flushing if not given X-Git-Tag: v2020.04-rc1~8^2~20 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=1c16606aac8f03be80d9c38ada00fd03123e0dbe;p=oweals%2Fu-boot.git serial: ns16550: Use old baud rate divisor for flushing if not given If baud_divisor is not set (i.e. == -1), we should use the baud divisor already in use for flushing the xmit register. If we don't flush the xmit register, then SPL will hang. Signed-off-by: Patrik Dahlström --- diff --git a/drivers/serial/ns16550.c b/drivers/serial/ns16550.c index a92d2b1de8..9851663dc5 100644 --- a/drivers/serial/ns16550.c +++ b/drivers/serial/ns16550.c @@ -171,6 +171,13 @@ void NS16550_init(NS16550_t com_port, int baud_divisor) == UART_LSR_THRE) { if (baud_divisor != -1) NS16550_setbrg(com_port, baud_divisor); + else { + // Re-use old baud rate divisor to flush transmit reg. + const int dll = serial_in(&com_port->dll); + const int dlm = serial_in(&com_port->dlm); + const int divisor = dll | (dlm << 8); + NS16550_setbrg(com_port, divisor); + } serial_out(0, &com_port->mdr1); } #endif