> +static int of_phy_package(struct phy_device *phydev) > +{ > + struct device_node *node = phydev->mdio.dev.of_node; > + struct device_node *package_node; > + u32 base_addr; > + int ret; > + > + if (!node) > + return 0; > + > + package_node = of_get_parent(node); > + if (!package_node) > + return 0; > + > + if (!of_device_is_compatible(package_node, "ethernet-phy-package")) > + return 0; > + > + if (of_property_read_u32(package_node, "reg", &base_addr)) > + return -EINVAL; > + > + ret = devm_phy_package_join(&phydev->mdio.dev, phydev, > + base_addr, 0); No don't do this. It is just going to lead to errors. The PHY driver knows how many PHYs are in the package. So it can figure out what the base address is and create the package. It can add each PHY as they probe. That cannot go wrong. If you create the package based on DT you have to validate that the DT is correct. You need the same information, the base address, how many packages are in the PHY, etc. So DT gains your nothing except more potential to get it wrong. Please use DT just for properties for the package, nothing else. Andrew