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

Message ID 20221116144305.2317573-2-xiaolei.wang@windriver.com
State New
Headers
Series Add link between phy dev and mac dev |

Commit Message

xiaolei wang Nov. 16, 2022, 2:43 p.m. UTC
  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(+)
  

Comments

kernel test robot Nov. 16, 2022, 11:11 p.m. UTC | #1
Hi Xiaolei,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on net-next/master]
[also build test WARNING on net/master linus/master v6.1-rc5 next-20221116]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Xiaolei-Wang/Add-link-between-phy-dev-and-mac-dev/20221116-224621
patch link:    https://lore.kernel.org/r/20221116144305.2317573-2-xiaolei.wang%40windriver.com
patch subject: [PATCH 1/2] net: phy: Add link between phy dev and mac dev
config: m68k-allyesconfig
compiler: m68k-linux-gcc (GCC) 12.1.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/intel-lab-lkp/linux/commit/a5e03a412891ff1a482e9a53794432817fd9e84e
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Xiaolei-Wang/Add-link-between-phy-dev-and-mac-dev/20221116-224621
        git checkout a5e03a412891ff1a482e9a53794432817fd9e84e
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=m68k SHELL=/bin/bash drivers/net/phy/

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

>> drivers/net/phy/phy.c:1542: warning: This comment starts with '/**', but isn't a kernel-doc comment. Refer Documentation/doc-guide/kernel-doc.rst
    * The external phy used by current mac interface is managed by


vim +1542 drivers/net/phy/phy.c

  1540	
  1541	/**
> 1542	 * The external phy used by current mac interface is managed by
  
Florian Fainelli Nov. 16, 2022, 11:22 p.m. UTC | #2
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@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);

Where is the matching device_link_del()?
  
xiaolei wang Nov. 17, 2022, 4:39 a.m. UTC | #3
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@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);
>
> 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
>
  
kernel test robot Nov. 17, 2022, 7:28 p.m. UTC | #4
Hi Xiaolei,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on net-next/master]
[also build test WARNING on net/master linus/master v6.1-rc5 next-20221117]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Xiaolei-Wang/Add-link-between-phy-dev-and-mac-dev/20221116-224621
patch link:    https://lore.kernel.org/r/20221116144305.2317573-2-xiaolei.wang%40windriver.com
patch subject: [PATCH 1/2] net: phy: Add link between phy dev and mac dev
config: x86_64-randconfig-a016
compiler: clang version 14.0.6 (https://github.com/llvm/llvm-project f28c006a5895fc0e329fe15fead81e37457cb1d1)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/intel-lab-lkp/linux/commit/a5e03a412891ff1a482e9a53794432817fd9e84e
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Xiaolei-Wang/Add-link-between-phy-dev-and-mac-dev/20221116-224621
        git checkout a5e03a412891ff1a482e9a53794432817fd9e84e
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash drivers/net/phy/

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

>> drivers/net/phy/phy.c:1542: warning: This comment starts with '/**', but isn't a kernel-doc comment. Refer Documentation/doc-guide/kernel-doc.rst
    * The external phy used by current mac interface is managed by


vim +1542 drivers/net/phy/phy.c

  1540	
  1541	/**
> 1542	 * The external phy used by current mac interface is managed by
  

Patch

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);