From 8487d71af0d8622aa3cfd9b3263aba9ddfba6fdb Mon Sep 17 00:00:00 2001 From: Oleksij Rempel Date: Wed, 6 Oct 2021 10:43:20 +0200 Subject: ARM: boards: skov-imx6: fixup different DTS variants Signed-off-by: Oleksij Rempel Link: https://lore.barebox.org/20211006084323.14051-6-o.rempel@pengutronix.de Signed-off-by: Sascha Hauer --- arch/arm/boards/skov-imx6/board.c | 48 +++++++++++++++++++++++++++++++++++---- 1 file changed, 43 insertions(+), 5 deletions(-) (limited to 'arch') 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) -- cgit v1.2.3