From: Matthias Schiffer Date: Tue, 30 Sep 2025 08:05:10 +0000 (+0200) Subject: net: mdio-uclass: introduce dm_eth_phy_connect_interface() X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8db554dcbb2374a2dea130af56d781732070beb7;p=thirdparty%2Fu-boot.git net: mdio-uclass: introduce dm_eth_phy_connect_interface() dm_eth_phy_connect_interface() is a variant of dm_eth_phy_connect() that allows to set the used PHY mode, in case the MAC driver needs to fix it up. The previously static dm_eth_connect_phy_handle() is renamed and extended for this purpose. Signed-off-by: Matthias Schiffer --- diff --git a/include/miiphy.h b/include/miiphy.h index 00d0b9b6a43..96afe5f4030 100644 --- a/include/miiphy.h +++ b/include/miiphy.h @@ -192,6 +192,21 @@ struct phy_device *dm_mdio_phy_connect(struct udevice *mdiodev, int phyaddr, struct udevice *ethdev, phy_interface_t interface); +/** + * dm_eth_phy_connect_interface - Connect an Eth device to a PHY based on device + * tree with custom PHY interface + * + * Picks up the DT phy-handle and from ethernet device node and connects the + * ethernet device to the linked PHY, while allowing the caller to specify + * the phy-mode to use. + * + * @ethdev: ethernet device + * @interface: MAC-PHY protocol + * + * Return: pointer to phy_device, or 0 on error + */ +struct phy_device *dm_eth_phy_connect_interface(struct udevice *ethdev, + phy_interface_t interface); /** * dm_eth_phy_connect - Connect an Eth device to a PHY based on device tree * diff --git a/net/mdio-uclass.c b/net/mdio-uclass.c index 4f052ae432c..64af689d2df 100644 --- a/net/mdio-uclass.c +++ b/net/mdio-uclass.c @@ -242,8 +242,8 @@ struct phy_device *dm_mdio_phy_connect(struct udevice *mdiodev, int phyaddr, return phy_connect(pdata->mii_bus, phyaddr, ethdev, interface); } -static struct phy_device *dm_eth_connect_phy_handle(struct udevice *ethdev, - phy_interface_t interface) +struct phy_device *dm_eth_phy_connect_interface(struct udevice *ethdev, + phy_interface_t interface) { u32 phy_addr; struct udevice *mdiodev; @@ -282,8 +282,10 @@ static struct phy_device *dm_eth_connect_phy_handle(struct udevice *ethdev, phy = dm_mdio_phy_connect(mdiodev, phy_addr, ethdev, interface); out: - if (phy) + if (phy) { phy->node = phynode; + phy->interface = interface; + } return phy; } @@ -292,7 +294,6 @@ out: struct phy_device *dm_eth_phy_connect(struct udevice *ethdev) { phy_interface_t interface; - struct phy_device *phy; if (!dev_has_ofnode(ethdev)) { debug("%s: supplied eth dev has no DT node!\n", ethdev->name); @@ -303,14 +304,7 @@ struct phy_device *dm_eth_phy_connect(struct udevice *ethdev) if (interface == PHY_INTERFACE_MODE_NA) dev_dbg(ethdev, "can't find interface mode, default to NA\n"); - phy = dm_eth_connect_phy_handle(ethdev, interface); - - if (!phy) - return NULL; - - phy->interface = interface; - - return phy; + return dm_eth_phy_connect_interface(ethdev, interface); } UCLASS_DRIVER(mdio) = {