Signed-off-by: Oleksij Rempel <[email protected]>
---
 arch/arm/boards/skov-imx6/board.c | 48 +++++++++++++++++++++++++++----
 1 file changed, 43 insertions(+), 5 deletions(-)

diff --git a/arch/arm/boards/skov-imx6/board.c 
b/arch/arm/boards/skov-imx6/board.c
index f42a0cad00..c09a2cd898 100644
--- a/arch/arm/boards/skov-imx6/board.c
+++ b/arch/arm/boards/skov-imx6/board.c
@@ -390,13 +390,51 @@ static void skov_imx6_no_switch(struct device_node *root)
        }
 }
 
+static int skov_imx6_switch_port(struct device_node *root, const char *path)
+{
+       size_t size;
+       char *buf;
+       int ret;
+
+       /* size is, string + '\0' + port number */
+       size = strlen(path) + 2;
+       buf = xzalloc(size);
+       if (!buf)
+               return -ENOMEM;
+
+       ret = snprintf(buf, size, "%s0", path);
+       if (ret < 0)
+               return ret;
+
+       ret = eth_of_fixup_node_from_eth_device(root, buf, "eth0");
+       if (ret)
+               return ret;
+
+       ret = snprintf(buf, size, "%s1", path);
+       if (ret < 0)
+               return ret;
+
+       ret = eth2_of_fixup_node_individually(root, buf, "eth0",
+                                             "state.ethaddr.eth2",
+                                             "/state/ethaddr/eth2");
+       return ret;
+}
+
 static void skov_imx6_switch(struct device_node *root)
 {
-       eth_of_fixup_node_from_eth_device(root,
-                       "/mdio-gpio/ksz8873@3/ports/ports@0", "eth0");
-       eth2_of_fixup_node_individually(root,
-               "/mdio-gpio/ksz8873@3/ports/ports@1", "eth0",
-               "state.ethaddr.eth2", "/state/ethaddr/eth2");
+       const char *old = "/mdio-gpio/ksz8873@3/ports/ports@";
+       const char *new = "/mdio/switch@0/ports/ports@";
+       int ret;
+
+       /* Old DTS variants (pre kernel mainline) use different path. Try first
+        * the new variant, then fall back to the old one.
+        */
+       ret = skov_imx6_switch_port(root, new);
+       if (ret) {
+               ret = skov_imx6_switch_port(root, old);
+               if (ret)
+                       pr_err("Filed to set mac address\n");
+       }
 }
 
 static int skov_imx6_fixup(struct device_node *root, void *unused)
-- 
2.30.2


_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox

Reply via email to