]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
arm64: a37xx: Handle pin controls in early board init
authorKonstantin Porotchkin <kostap@marvell.com>
Thu, 16 Feb 2017 11:52:26 +0000 (13:52 +0200)
committerStefan Roese <sr@denx.de>
Wed, 29 Mar 2017 05:38:09 +0000 (07:38 +0200)
Fix the default pin control values in a board-specific
function on early board init stage.
This fix allows the NETA driver to work in RGMII
mode until the full-featured pin control driver gets
introduced.

Signed-off-by: Konstantin Porotchkin <kostap@marvell.com>
Cc: Stefan Roese <sr@denx.de>
Cc: Igal Liberman <igall@marvell.com>
Cc: Nadav Haklai <nadavh@marvell.com>
Signed-off-by: Stefan Roese <sr@denx.de>
board/Marvell/mvebu_armada-37xx/board.c

index edf88c73e632cbf750f11e3fdea30d6e590d3de9..3337f3fbe756e4cb600e444ccb325baf03a89919 100644 (file)
@@ -19,9 +19,33 @@ DECLARE_GLOBAL_DATA_PTR;
 #define I2C_IO_REG_0_SATA_OFF  2
 #define I2C_IO_REG_0_USB_H_OFF 1
 
+#define PINCTRL_NB_REG_VALUE   0x000173fa
+#define PINCTRL_SB_REG_VALUE   0x00007a23
+
 int board_early_init_f(void)
 {
-       /* Nothing to do (yet), perhaps later some pin-muxing etc */
+       const void *blob = gd->fdt_blob;
+       const char *bank_name;
+       const char *compat = "marvell,armada-3700-pinctl";
+       int off, len;
+       void __iomem *addr;
+
+       /* FIXME
+        * Temporary WA for setting correct pin control values
+        * until the real pin control driver is awailable.
+        */
+       off = fdt_node_offset_by_compatible(blob, -1, compat);
+       while (off != -FDT_ERR_NOTFOUND) {
+               bank_name = fdt_getprop(blob, off, "bank-name", &len);
+               addr = (void __iomem *)fdtdec_get_addr_size_auto_noparent(
+                               blob, off, "reg", 0, NULL, true);
+               if (!strncmp(bank_name, "armada-3700-nb", len))
+                       writel(PINCTRL_NB_REG_VALUE, addr);
+               else if (!strncmp(bank_name, "armada-3700-sb", len))
+                       writel(PINCTRL_SB_REG_VALUE, addr);
+
+               off = fdt_node_offset_by_compatible(blob, off, compat);
+       }
 
        return 0;
 }