diff options
| author | Patrik Dahlström <[email protected]> | 2019-12-21 17:25:12 +0100 |
|---|---|---|
| committer | Tom Rini <[email protected]> | 2020-01-24 11:19:52 -0500 |
| commit | 1c16606aac8f03be80d9c38ada00fd03123e0dbe (patch) | |
| tree | 5dbc242a579e1d6d31214f6482f7029f9558b005 /drivers | |
| parent | b1b147f2b839c45b896dfacf5a2929313d88aa63 (diff) | |
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 <[email protected]>
Diffstat (limited to 'drivers')
| -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 a92d2b1de88..9851663dc54 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 |
