Re: [PATCH 1/2] net: phy: Add link between phy dev and mac dev

From: Wang, Xiaolei
Date: Wed Nov 16 2022 - 23:40:38 EST



On 11/17/2022 7:22 AM, Florian Fainelli wrote:
CAUTION: This email comes from a non Wind River email account!
Do not click links or open attachments unless you recognize the sender and know the content is safe.

On 11/16/22 06:43, Xiaolei Wang wrote:
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@xxxxxxxxxxxxx>
---
  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);

Where is the matching device_link_del()?

Hi

Oh, what do you mean when some modules are uninstalled, should we delete the link?
My original idea was to wait for the dev (consumer or supplier) to be unregistered and automatically deleted, I read the comment of device_link_add, if DL_FLAG_STATELESS is not set, the caller of this function will completely hand over the management of the link to the driver core, then The link will remain until one of the devices it points to (consumer or provider) is unregistered.

thanks

xiaolei

--
Florian