diff options
author | Oleksij Rempel <o.rempel@pengutronix.de> | 2021-10-06 10:43:20 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2021-10-11 11:35:54 +0200 |
commit | 8487d71af0d8622aa3cfd9b3263aba9ddfba6fdb (patch) | |
tree | f55f24b59f6235df9bf01ad552ea0491c68ea631 /arch | |
parent | 3f5a5a490a0ea2737425ad8a3255d6bf6d97144d (diff) | |
download | barebox-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.c | 48 |
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) |