lib: utils/serial: Round UART8250 baud rate divisor to nearest integer
authorJakub Luzny <jakub.luzny@codasip.com>
Fri, 21 Jan 2022 15:06:14 +0000 (16:06 +0100)
committerAnup Patel <anup@brainfault.org>
Fri, 4 Feb 2022 05:46:29 +0000 (11:16 +0530)
Previously, it was rounded down and that gives suboptimal results when
non-standard clock sources or baud rates are used.

Signed-off-by: Jakub Luzny <jakub.luzny@codasip.com>
Reviewed-by: Anup Patel <anup@brainfault.org>
lib/utils/serial/uart8250.c

index 142f8dc..141bd45 100644 (file)
@@ -101,7 +101,7 @@ 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 / (16 * uart8250_baudrate);
+       bdiv = (uart8250_in_freq + 8 * uart8250_baudrate) / (16 * uart8250_baudrate);
 
        /* Disable all interrupts */
        set_reg(UART_IER_OFFSET, 0x00);