Re: [PATCH net-next v2 3/4] of: property: link PHY package suppliers to member PHYs
From: Saravana Kannan
Date: Mon Aug 17 2026 - 01:08:31 EST
On Sun, Aug 16, 2026 at 5:00 PM James Hilliard
<james.hilliard1@xxxxxxxxx> wrote:
>
> Ethernet PHY package nodes describe shared resources for their member
> PHYs, but are not populated as struct devices. fw_devlink consequently
> represents the package dependencies with proxy links to the closest
> ancestor device.
>
> The MDIO bus is a class device without a driver, so such a proxy can
> remain available indefinitely and prevent a supplier from receiving its
> sync_state() callback even after every PHY has probed.
>
> Treat every enabled member PHY as a consumer of the common package
> suppliers. The links can then be converted to links for the real PHY
> devices and retired through their normal driver lifecycle.
>
> Fixes: 385ef48f4686 ("net: phy: add support for scanning PHY in PHY packages nodes")
> Signed-off-by: James Hilliard <james.hilliard1@xxxxxxxxx>
> ---
> drivers/of/property.c | 14 ++++++++++++++
> 1 file changed, 14 insertions(+)
>
> diff --git a/drivers/of/property.c b/drivers/of/property.c
> index 38c0c7dc428a..d59bcb1f29de 100644
> --- a/drivers/of/property.c
> +++ b/drivers/of/property.c
> @@ -1272,6 +1272,20 @@ static void of_link_to_phandle(struct device_node *con_np,
> tmp_np = of_get_next_parent(tmp_np);
> }
>
> + /*
> + * An Ethernet PHY package node describes resources shared by its member
> + * PHYs, but is not populated as a struct device. Link every enabled
> + * member PHY to those suppliers so fw_devlink can use the real consumer
> + * devices instead of leaving a proxy link on the MDIO bus indefinitely.
> + */
> + if (of_node_name_eq(con_np, "ethernet-phy-package")) {
> + for_each_available_child_of_node_scoped(con_np, child)
> + fwnode_link_add(of_fwnode_handle(child),
> + of_fwnode_handle(sup_np), flags);
> +
> + return;
> + }
> +
The design philosophy behind fwnode links is that it's purely a
parsing optimization. It doesn't care how this is later converted into
device links. If one DT node points to another, then there'll be a
fwnode link between those two. Whether the node gets converted to a
struct device or not and how that should be handles should be outside
of the fwnode links code. So, please solve this elsewhere.
Without digging too deep into the code, this feels more like something
that should be solved at the MDIO or phy layer.
Thanks,
Saravana
> fwnode_link_add(of_fwnode_handle(con_np), of_fwnode_handle(sup_np), flags);
> }
>
>
> --
> 2.53.0
>