[PATCH v4] net: phy: fix duplicate eth_phy binding
Marek Vasut
marek.vasut at mailbox.org
Tue May 12 21:13:31 CEST 2026
On 5/12/26 2:23 PM, Pranav Tilak wrote:
[...]
> @@ -927,29 +928,40 @@ struct phy_device *phy_connect(struct mii_dev *bus, int addr,
> {
> struct phy_device *phydev = NULL;
> uint mask = (addr >= 0) ? (1 << addr) : 0xffffffff;
> -
> + struct udevice *phy_dev;
> + bool phy_bound;
> +
> + /* Skip binding if PHY already bound by eth_phy_binds_nodes(). */
> + phy_bound = !uclass_find_device_by_phandle(UCLASS_ETH_PHY, dev,
> + "phy-handle",
> + &phy_dev);
> + if (!phy_bound) {
The double negation is not needed, simply use int data type .
Also, try "goto exit" ...
> #ifdef CONFIG_PHY_FIXED
> - phydev = phy_connect_fixed(bus, dev);
> + phydev = phy_connect_fixed(bus, dev);
> #endif
>
> #ifdef CONFIG_PHY_NCSI
> - if (!phydev && interface == PHY_INTERFACE_MODE_NCSI)
> - phydev = phy_device_create(bus, 0, PHY_NCSI_ID, false);
> + if (!phydev && interface == PHY_INTERFACE_MODE_NCSI)
> + phydev = phy_device_create(bus, 0, PHY_NCSI_ID, false);
> #endif
>
> #ifdef CONFIG_PHY_ETHERNET_ID
> - if (!phydev)
> - phydev = phy_connect_phy_id(bus, dev, addr);
> + if (!phydev)
> + phydev = phy_connect_phy_id(bus, dev, addr);
> #endif
>
> #ifdef CONFIG_PHY_XILINX_GMII2RGMII
> - if (!phydev)
> - phydev = phy_connect_gmii2rgmii(bus, dev);
> + if (!phydev)
> + phydev = phy_connect_gmii2rgmii(bus, dev);
> #endif
> + }
exit:
This may simplify the patch .
> if (!phydev)
> phydev = phy_find_by_mask(bus, mask);
>
> + if (phydev && phy_bound && !ofnode_valid(phydev->node))
> + phydev->node = dev_ofnode(phy_dev);
> +
> if (phydev)
> phy_connect_dev(phydev, dev, interface);
> else
[...]
More information about the U-Boot
mailing list