[PATCH net-next v12 04/12] net: phylink: save phylink instance fwnode on phylink_create
From: Christian Marangi
Date: Sun Aug 09 2026 - 16:42:21 EST
The firmware node associated with the phylink instance might differ from
the device firmware node passed in phylink_config as such device can
reference the parent switch or other platform peripherals.
Some function might need to reference this firmware node after
phylink_create so add a dedicated fwnode entry in phylink internal struct
and save it on phylink_create().
Signed-off-by: Christian Marangi <ansuelsmth@xxxxxxxxx>
---
drivers/net/phy/phylink.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c
index b69050f22717..b9a5cd123775 100644
--- a/drivers/net/phy/phylink.c
+++ b/drivers/net/phy/phylink.c
@@ -44,6 +44,7 @@ struct phylink {
const struct phylink_mac_ops *mac_ops;
struct phylink_config *config;
struct phylink_pcs *pcs;
+ struct fwnode_handle *fwnode;
struct device *dev;
unsigned int old_link_state:1;
@@ -1993,6 +1994,7 @@ struct phylink *phylink_create(struct phylink_config *config,
INIT_LIST_HEAD(&pl->pcs_list);
pl->config = config;
+ pl->fwnode = fwnode_handle_get((struct fwnode_handle *)fwnode);
if (config->type == PHYLINK_NETDEV) {
pl->netdev = to_net_dev(config->dev);
netif_carrier_off(pl->netdev);
@@ -2077,6 +2079,7 @@ struct phylink *phylink_create(struct phylink_config *config,
pcs->phylink = NULL;
}
free_pl:
+ fwnode_handle_put(pl->fwnode);
kfree(pl);
return ERR_PTR(ret);
}
@@ -2107,6 +2110,8 @@ void phylink_destroy(struct phylink *pl)
list_del(&pcs->list);
}
+ fwnode_handle_put(pl->fwnode);
+
kfree(pl);
}
EXPORT_SYMBOL_GPL(phylink_destroy);
--
2.53.0