diff --git a/lib/utils/serial/gaisler-uart.c b/lib/utils/serial/gaisler-uart.c index 5f30ee4..eec75cc 100644 --- a/lib/utils/serial/gaisler-uart.c +++ b/lib/utils/serial/gaisler-uart.c @@ -70,7 +70,7 @@ int gaisler_uart_init(unsigned long base, u32 in_freq, u32 baudrate) uart_base = (volatile char *)base; /* Configure baudrate */ - if (in_freq) + if (in_freq && baudrate) set_reg(UART_REG_SCALER, in_freq / (baudrate * 8 + 7)); ctrl = get_reg(UART_REG_CTRL); diff --git a/lib/utils/serial/shakti-uart.c b/lib/utils/serial/shakti-uart.c index 3556935..8769cb2 100644 --- a/lib/utils/serial/shakti-uart.c +++ b/lib/utils/serial/shakti-uart.c @@ -47,8 +47,12 @@ static struct sbi_console_device shakti_console = { int shakti_uart_init(unsigned long base, u32 in_freq, u32 baudrate) { uart_base = (volatile char *)base; - u16 baud = (u16)(in_freq/(16 * baudrate)); - writew(baud, uart_base + REG_BAUD); + u16 baud; + + if (baudrate) { + baud = (u16)(in_freq / (16 * baudrate)); + writew(baud, uart_base + REG_BAUD); + } sbi_console_set_device(&shakti_console); diff --git a/lib/utils/serial/sifive-uart.c b/lib/utils/serial/sifive-uart.c index 7078611..3581d47 100644 --- a/lib/utils/serial/sifive-uart.c +++ b/lib/utils/serial/sifive-uart.c @@ -97,7 +97,7 @@ int sifive_uart_init(unsigned long base, u32 in_freq, u32 baudrate) uart_baudrate = baudrate; /* Configure baudrate */ - if (in_freq) + if (in_freq && baudrate) set_reg(UART_REG_DIV, uart_min_clk_divisor(in_freq, baudrate)); /* Disable interrupts */ diff --git a/lib/utils/serial/uart8250.c b/lib/utils/serial/uart8250.c index 38ea11a..99bf1bf 100644 --- a/lib/utils/serial/uart8250.c +++ b/lib/utils/serial/uart8250.c @@ -93,7 +93,7 @@ static struct sbi_console_device uart8250_console = { int uart8250_init(unsigned long base, u32 in_freq, u32 baudrate, u32 reg_shift, u32 reg_width, u32 reg_offset) { - u16 bdiv; + u16 bdiv = 0; uart8250_base = (volatile char *)base + reg_offset; uart8250_reg_shift = reg_shift; @@ -101,7 +101,10 @@ int uart8250_init(unsigned long base, u32 in_freq, u32 baudrate, u32 reg_shift, uart8250_in_freq = in_freq; uart8250_baudrate = baudrate; - bdiv = (uart8250_in_freq + 8 * uart8250_baudrate) / (16 * uart8250_baudrate); + if (uart8250_baudrate) { + bdiv = (uart8250_in_freq + 8 * uart8250_baudrate) / + (16 * uart8250_baudrate); + } /* Disable all interrupts */ set_reg(UART_IER_OFFSET, 0x00);