summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorOleksij Rempel <o.rempel@pengutronix.de>2021-10-06 10:43:20 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2021-10-11 11:35:54 +0200
commit8487d71af0d8622aa3cfd9b3263aba9ddfba6fdb (patch)
treef55f24b59f6235df9bf01ad552ea0491c68ea631 /arch
parent3f5a5a490a0ea2737425ad8a3255d6bf6d97144d (diff)
downloadbarebox-8487d71af0d8622aa3cfd9b3263aba9ddfba6fdb.tar.gz
barebox-8487d71af0d8622aa3cfd9b3263aba9ddfba6fdb.tar.xz
ARM: boards: skov-imx6: fixup different DTS variants
Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de> Link: https://lore.barebox.org/20211006084323.14051-6-o.rempel@pengutronix.de Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/boards/skov-imx6/board.c48
1 files 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)