]> git.sur5r.net Git - u-boot/blobdiff - drivers/serial/serial_bcm6345.c
Merge branch 'master' of git://git.denx.de/u-boot-i2c
[u-boot] / drivers / serial / serial_bcm6345.c
index db270e3b21bd1cdc76b3fa9dad98b878ddc9f3f5..ee5d561bfd195f620f68d6bb93fe9250b59224f5 100644 (file)
@@ -1,19 +1,18 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  * Copyright (C) 2017 Álvaro Fernández Rojas <noltari@gmail.com>
  *
  * Derived from linux/drivers/tty/serial/bcm63xx_uart.c:
  *     Copyright (C) 2008 Maxime Bizon <mbizon@freebox.fr>
- *
- * SPDX-License-Identifier:    GPL-2.0+
  */
 
 #include <clk.h>
+#include <dm.h>
 #include <debug_uart.h>
 #include <errno.h>
 #include <serial.h>
 #include <asm/io.h>
 #include <asm/types.h>
-#include <dm/device.h>
 
 /* UART Control register */
 #define UART_CTL_REG                   0x0
@@ -141,6 +140,8 @@ static int bcm6345_serial_init(void __iomem *base, ulong clk, u32 baudrate)
                        UART_CTL_RXTIMEOUT_5 |
                        /* set 8 bits/symbol */
                        UART_CTL_BITSPERSYM_8 |
+                       /* set 1 stop bit */
+                       UART_CTL_STOPBITS_1 |
                        /* set parity to even */
                        UART_CTL_RXPAREVEN_MASK |
                        UART_CTL_TXPAREVEN_MASK);
@@ -155,11 +156,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 */
@@ -226,22 +227,18 @@ static int bcm6345_serial_probe(struct udevice *dev)
 {
        struct bcm6345_serial_priv *priv = dev_get_priv(dev);
        struct clk clk;
-       fdt_addr_t addr;
-       fdt_size_t size;
        int ret;
 
        /* get address */
-       addr = dev_get_addr_size_index(dev, 0, &size);
-       if (addr == FDT_ADDR_T_NONE)
+       priv->base = dev_remap_addr(dev);
+       if (!priv->base)
                return -EINVAL;
 
-       priv->base = ioremap(addr, size);
-
        /* get clock rate */
        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 */