diff mbox

[U-Boot,v4] dm: serial: bcm6345: fix baud rate clock calculation

Message ID 1495476106-22688-1-git-send-email-noltari@gmail.com
State Accepted, archived
Commit 24f85482c90227d6ba4cc3739874bae7e8969a62
Delegated to: Daniel Schwierzeck
Headers show

Commit Message

Álvaro Fernández Rojas May 22, 2017, 6:01 p.m. UTC
It's currently bugged and doesn't work for even cases.
Right shift bits instead of dividing and fix even cases.

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
---
 v4: really fix baud rate calculation
 v3: fix baud rate calculation

 drivers/serial/serial_bcm6345.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

Comments

Daniel Schwierzeck May 31, 2017, 12:58 p.m. UTC | #1
Am 22.05.2017 um 20:01 schrieb Álvaro Fernández Rojas:
> It's currently bugged and doesn't work for even cases.
> Right shift bits instead of dividing and fix even cases.
> 
> Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
> ---
>  v4: really fix baud rate calculation
>  v3: fix baud rate calculation
> 
>  drivers/serial/serial_bcm6345.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 

applied to u-boot-mips/next and replaced the previously applied v3
patch, thanks.
diff mbox

Patch

diff --git a/drivers/serial/serial_bcm6345.c b/drivers/serial/serial_bcm6345.c
index 14c1bf2..0843b48 100644
--- a/drivers/serial/serial_bcm6345.c
+++ b/drivers/serial/serial_bcm6345.c
@@ -157,11 +157,11 @@  static int bcm6345_serial_init(void __iomem *base, ulong clk, u32 baudrate)
 			UART_FIFO_CFG_TX_4);
 
 	/* set baud rate */
-	val = (clk / baudrate) / 16;
+	val = ((clk / baudrate) >> 4);
 	if (val & 0x1)
-		val = val;
+		val = (val >> 1);
 	else
-		val = val / 2 - 1;
+		val = (val >> 1) - 1;
 	writel_be(val, base + UART_BAUD_REG);
 
 	/* clear interrupts */
@@ -243,7 +243,7 @@  static int bcm6345_serial_probe(struct udevice *dev)
 	ret = clk_get_by_index(dev, 0, &clk);
 	if (ret < 0)
 		return ret;
-	priv->uartclk = clk_get_rate(&clk) / 2;
+	priv->uartclk = clk_get_rate(&clk);
 	clk_free(&clk);
 
 	/* initialize serial */