summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/utils/serial/gaisler-uart.c2
-rw-r--r--lib/utils/serial/shakti-uart.c8
-rw-r--r--lib/utils/serial/sifive-uart.c2
-rw-r--r--lib/utils/serial/uart8250.c7
4 files changed, 13 insertions, 6 deletions
diff --git a/lib/utils/serial/gaisler-uart.c b/lib/utils/serial/gaisler-uart.c
index 5f30ee43..eec75cca 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 35569356..8769cb26 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 7078611a..3581d47a 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 38ea11af..99bf1bf7 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);