]> git.sur5r.net Git - u-boot/blobdiff - drivers/serial/serial_uniphier.c
ns16550: Improve debug UART so it can work with 32-bit access
[u-boot] / drivers / serial / serial_uniphier.c
index 327e0dc517bc38bbaae0bb7082dc7a727d6d9b94..f21098607862062782bc61fc1fb9f234747ef582 100644 (file)
@@ -1,15 +1,15 @@
 /*
- * Copyright (C) 2012-2015 Panasonic Corporation
- *   Author: Masahiro Yamada <yamada.m@jp.panasonic.com>
+ * Copyright (C) 2012-2015 Masahiro Yamada <yamada.masahiro@socionext.com>
  *
  * SPDX-License-Identifier:    GPL-2.0+
  */
 
+#include <linux/io.h>
 #include <linux/serial_reg.h>
-#include <asm/io.h>
 #include <asm/errno.h>
 #include <dm/device.h>
 #include <dm/platform_data/serial-uniphier.h>
+#include <mapmem.h>
 #include <serial.h>
 #include <fdtdec.h>
 
@@ -45,12 +45,6 @@ static int uniphier_serial_setbrg(struct udevice *dev, int baudrate)
        struct uniphier_serial __iomem *port = uniphier_serial_port(dev);
        const unsigned int mode_x_div = 16;
        unsigned int divisor;
-       u32 tmp;
-
-       tmp = readl(&port->lcr_mcr);
-       tmp &= ~LCR_MASK;
-       tmp |= UART_LCR_WLEN8 << LCR_SHIFT;
-       writel(tmp, &port->lcr_mcr);
 
        divisor = DIV_ROUND_CLOSEST(plat->uartclk, mode_x_div * baudrate);
 
@@ -93,14 +87,22 @@ static int uniphier_serial_pending(struct udevice *dev, bool input)
 
 static int uniphier_serial_probe(struct udevice *dev)
 {
+       u32 tmp;
        struct uniphier_serial_private_data *priv = dev_get_priv(dev);
        struct uniphier_serial_platform_data *plat = dev_get_platdata(dev);
+       struct uniphier_serial __iomem *port;
 
-       priv->membase = map_sysmem(plat->base, sizeof(struct uniphier_serial));
-
-       if (!priv->membase)
+       port = map_sysmem(plat->base, sizeof(struct uniphier_serial));
+       if (!port)
                return -ENOMEM;
 
+       priv->membase = port;
+
+       tmp = readl(&port->lcr_mcr);
+       tmp &= ~LCR_MASK;
+       tmp |= UART_LCR_WLEN8 << LCR_SHIFT;
+       writel(tmp, &port->lcr_mcr);
+
        return 0;
 }
 
@@ -113,8 +115,8 @@ static int uniphier_serial_remove(struct udevice *dev)
 
 #ifdef CONFIG_OF_CONTROL
 static const struct udevice_id uniphier_uart_of_match[] = {
-       { .compatible = "panasonic,uniphier-uart" },
-       {},
+       { .compatible = "socionext,uniphier-uart" },
+       { /* sentinel */ }
 };
 
 static int uniphier_serial_ofdata_to_platdata(struct udevice *dev)