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 <risca@dalakolonin.se>
This commit is contained in:
Patrik Dahlström 2019-12-21 17:25:12 +01:00 committed by Tom Rini
parent b1b147f2b8
commit 1c16606aac

View File

@ -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