Messages in this thread Patch in this message | | | From | Xiaolei Wang <> | Subject | [PATCH 1/2] net: phy: Add link between phy dev and mac dev | Date | Wed, 16 Nov 2022 22:43:04 +0800 |
| |
The external phy used by current mac interface is managed by another mac interface, so we should create a device link between phy dev and mac dev.
Signed-off-by: Xiaolei Wang <xiaolei.wang@windriver.com> --- drivers/net/phy/phy.c | 20 ++++++++++++++++++++ include/linux/phy.h | 1 + 2 files changed, 21 insertions(+)
diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c index e741d8aebffe..0ef6b69026c7 100644 --- a/drivers/net/phy/phy.c +++ b/drivers/net/phy/phy.c @@ -35,6 +35,7 @@ #include <net/netlink.h> #include <net/genetlink.h> #include <net/sock.h> +#include <linux/of_mdio.h> #define PHY_STATE_TIME HZ @@ -1535,3 +1536,22 @@ int phy_ethtool_nway_reset(struct net_device *ndev) return phy_restart_aneg(phydev); } EXPORT_SYMBOL(phy_ethtool_nway_reset); + +/** + * The external phy used by current mac interface is managed by + * another mac interface, so we should create a device link between + * phy dev and mac dev. + */ +void phy_mac_link_add(struct device_node *phy_np, struct net_device *ndev) +{ + struct phy_device *phy_dev = of_phy_find_device(phy_np); + struct device *dev = phy_dev ? &phy_dev->mdio.dev : NULL; + + if (dev && ndev->dev.parent != dev) + device_link_add(ndev->dev.parent, dev, + DL_FLAG_PM_RUNTIME); + + if (phy_dev) + put_device(&phy_dev->mdio.dev); +} +EXPORT_SYMBOL(phy_mac_link_add); diff --git a/include/linux/phy.h b/include/linux/phy.h index ddf66198f751..11cdfbd81153 100644 --- a/include/linux/phy.h +++ b/include/linux/phy.h @@ -1758,6 +1758,7 @@ int phy_package_join(struct phy_device *phydev, int addr, size_t priv_size); void phy_package_leave(struct phy_device *phydev); int devm_phy_package_join(struct device *dev, struct phy_device *phydev, int addr, size_t priv_size); +void phy_mac_link_add(struct device_node *phy_np, struct net_device *ndev); #if IS_ENABLED(CONFIG_PHYLIB) int __init mdio_bus_init(void); -- 2.25.1
| |