net: phy: Bind ETH_PHY uclass driver to each new PHY

In case a new PHY is created and DM_ETH_PHY is enabled, bind a
generic PHY driver from ETH_PHY uclass to the PHY to have a
matching DM representation of that PHY.

Signed-off-by: Marek Vasut <marek.vasut+renesas@mailbox.org>
Reviewed-by: Ramon Fried <rfried.dev@gmail.com>
diff --git a/drivers/net/phy/ethernet_id.c b/drivers/net/phy/ethernet_id.c
index a715e83..877a51c 100644
--- a/drivers/net/phy/ethernet_id.c
+++ b/drivers/net/phy/ethernet_id.c
@@ -7,6 +7,8 @@
 
 #include <common.h>
 #include <dm/device_compat.h>
+#include <dm/device-internal.h>
+#include <dm/lists.h>
 #include <phy.h>
 #include <linux/delay.h>
 #include <asm/gpio.h>
@@ -17,6 +19,8 @@
 	struct phy_device *phydev;
 	struct ofnode_phandle_args phandle_args;
 	struct gpio_desc gpio;
+	const char *node_name;
+	struct udevice *pdev;
 	ofnode node;
 	u32 id, assert, deassert;
 	u16 vendor, device;
@@ -72,5 +76,18 @@
 	if (phydev)
 		phydev->node = node;
 
+	if (IS_ENABLED(CONFIG_DM_ETH_PHY) && ofnode_valid(node)) {
+		node_name = ofnode_get_name(node);
+		ret = device_bind_driver_to_node(dev, "eth_phy_generic_drv",
+						 node_name, node,
+						 &pdev);
+		if (ret)
+			return NULL;
+
+		ret = device_probe(pdev);
+		if (ret)
+			return NULL;
+	}
+
 	return phydev;
 }