If the user has set baudrate as "auto" (use whatever was configured) but
Xen cannot find any set baudrate use a default fallback baudrate of
115200.
Otherwise the console will very likely end up being non-functional, as
further values are derived from the baudrate (like the transmit timeout),
and using -1 will result in screwed parameters being derived from the
baudrate.
Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
---
xen/drivers/char/ns16550.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/xen/drivers/char/ns16550.c b/xen/drivers/char/ns16550.c
index b23e85a3c68b..130e292f057d 100644
--- a/xen/drivers/char/ns16550.c
+++ b/xen/drivers/char/ns16550.c
@@ -346,9 +346,16 @@ static void ns16550_setup_preirq(struct ns16550 *uart)
if ( divisor )
uart->baud = uart->clock_hz / (divisor << 4);
else
+ {
+ uart->baud = 115200;
printk(XENLOG_ERR
"Automatic baud rate determination was requested,"
- " but a baud rate was not set up\n");
+ " but a baud rate was not set up\n"
+ "Setting baudrate to %u\n", uart->baud);
+ divisor = uart->clock_hz / (uart->baud << 4);
+ ns_write_reg(uart, UART_DLL, (uint8_t)divisor);
+ ns_write_reg(uart, UART_DLM, (uint8_t)(divisor >> 8));
+ }
}
ns_write_reg(uart, UART_LCR, lcr);
--
2.51.0