diff options
author | Patrik Dahlström <risca@dalakolonin.se> | 2019-12-21 17:25:12 +0100 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2020-01-24 11:19:52 -0500 |
commit | 1c16606aac8f03be80d9c38ada00fd03123e0dbe (patch) | |
tree | 5dbc242a579e1d6d31214f6482f7029f9558b005 | |
parent | b1b147f2b839c45b896dfacf5a2929313d88aa63 (diff) | |
download | u-boot-1c16606aac8f03be80d9c38ada00fd03123e0dbe.zip u-boot-1c16606aac8f03be80d9c38ada00fd03123e0dbe.tar.gz u-boot-1c16606aac8f03be80d9c38ada00fd03123e0dbe.tar.bz2 |
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>
-rw-r--r-- | drivers/serial/ns16550.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/serial/ns16550.c b/drivers/serial/ns16550.c index a92d2b1..9851663 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 |