net: hifemac: register MDIO bus device for subnode

register internal MDIO bus device if it is a subnode.

Signed-off-by: Yang Xiwen <forbidden405@outlook.com>
This commit is contained in:
Yang Xiwen
2024-01-22 22:33:22 +08:00
committed by Tom Rini
parent a91263c321
commit 561856ec5e

View File

@@ -15,6 +15,7 @@
#include <wait_bit.h> #include <wait_bit.h>
#include <asm/io.h> #include <asm/io.h>
#include <dm/device_compat.h> #include <dm/device_compat.h>
#include <dm/lists.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/kernel.h> #include <linux/kernel.h>
@@ -337,6 +338,8 @@ int hisi_femac_of_to_plat(struct udevice *dev)
{ {
int ret, i; int ret, i;
struct hisi_femac_priv *priv = dev_get_priv(dev); struct hisi_femac_priv *priv = dev_get_priv(dev);
ofnode mdio_node;
bool mdio_registered = false;
static const char * const clk_strs[] = { static const char * const clk_strs[] = {
[CLK_MAC] = "mac", [CLK_MAC] = "mac",
[CLK_BUS] = "bus", [CLK_BUS] = "bus",
@@ -388,6 +391,31 @@ int hisi_femac_of_to_plat(struct udevice *dev)
MAC_RESET_DELAY_PROPERTY, MAC_RESET_DELAY_PROPERTY,
MAC_RESET_ASSERT_PERIOD); MAC_RESET_ASSERT_PERIOD);
/* Create MDIO bus */
ofnode_for_each_subnode(mdio_node, dev_ofnode(dev)) {
const char *subnode_name = ofnode_get_name(mdio_node);
struct udevice *mdiodev;
// Skip subnodes not starting with "mdio"
if (strncmp(subnode_name, "mdio", 4))
continue;
ret = device_bind_driver_to_node(dev, "hisi-femac-mdio",
subnode_name, mdio_node, &mdiodev);
if (ret) {
dev_err(dev, "Failed to register MDIO bus device %d\n", ret);
return log_msg_ret("net", ret);
}
mdio_registered = true;
break;
}
if (!mdio_registered) {
dev_err(dev, "No MDIO subnode is found!\n");
return log_msg_ret("mdio", -ENODATA);
}
return 0; return 0;
} }