All of lore.kernel.org
 help / color / mirror / Atom feed
From: Simon Horman <horms@kernel.org>
To: Christian Marangi <ansuelsmth@gmail.com>
Cc: "David S. Miller" <davem@davemloft.net>,
	Eric Dumazet <edumazet@google.com>,
	Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
	Rob Herring <robh+dt@kernel.org>,
	Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
	Conor Dooley <conor+dt@kernel.org>,
	Andy Gross <agross@kernel.org>,
	Bjorn Andersson <andersson@kernel.org>,
	Konrad Dybcio <konrad.dybcio@linaro.org>,
	Andrew Lunn <andrew@lunn.ch>,
	Heiner Kallweit <hkallweit1@gmail.com>,
	Russell King <linux@armlinux.org.uk>,
	Florian Fainelli <florian.fainelli@broadcom.com>,
	Broadcom internal kernel review list
	<bcm-kernel-feedback-list@broadcom.com>,
	Daniel Golle <daniel@makrotopia.org>,
	Qingfang Deng <dqfext@gmail.com>,
	SkyLake Huang <SkyLake.Huang@mediatek.com>,
	Matthias Brugger <matthias.bgg@gmail.com>,
	AngeloGioacchino Del Regno
	<angelogioacchino.delregno@collabora.com>,
	David Epping <david.epping@missinglinkelectronics.com>,
	Vladimir Oltean <olteanv@gmail.com>,
	"Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>,
	Harini Katakam <harini.katakam@amd.com>,
	Robert Marko <robert.marko@sartura.hr>,
	netdev@vger.kernel.org, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-mediatek@lists.infradead.org
Subject: Re: [net-next RFC PATCH 04/14] net: phy: add initial support for PHY package in DT
Date: Wed, 22 Nov 2023 10:52:43 +0000	[thread overview]
Message-ID: <20231122105243.GB28959@kernel.org> (raw)
In-Reply-To: <20231120135041.15259-5-ansuelsmth@gmail.com>

On Mon, Nov 20, 2023 at 02:50:31PM +0100, Christian Marangi wrote:
> Add initial support for PHY package in DT.
> 
> Make it easier to define PHY package and describe the global PHY
> directly in DT by refereincing them by phandles instead of custom
> functions in each PHY driver.
> 
> Each PHY in a package needs to be defined in a dedicated node in the
> mdio node. This dedicated node needs to have the compatible set to
> "ethernet-phy-package" and define "global-phys" and "#global-phy-cells"
> respectively to a list of phandle to the global phy to define for the
> PHY package and 0 for cells as the phandle won't take any args.
> 
> With this defined, the generic PHY probe will join each PHY in this
> dedicated node to the package.
> 
> PHY driver MUST set the required global PHY count in
> .phy_package_global_phy_num to correctly verify that DT define the
> correct number of phandle to the required global PHY.
> 
> mdio_bus.c and of_mdio.c is updated to now support and parse also
> PHY package subnote that have the compatible "phy-package".
> 
> Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>

Hi Christian,

I was a little hasty in hitting send on my previous message.
Please find some more minor feedback from my side below.

...

> diff --git a/drivers/net/mdio/of_mdio.c b/drivers/net/mdio/of_mdio.c
> index 64ebcb6d235c..bb910651118f 100644
> --- a/drivers/net/mdio/of_mdio.c
> +++ b/drivers/net/mdio/of_mdio.c
> @@ -139,6 +139,44 @@ bool of_mdiobus_child_is_phy(struct device_node *child)
>  }
>  EXPORT_SYMBOL(of_mdiobus_child_is_phy);
>  
> +static int __of_mdiobus_parse_phys(struct mii_bus *mdio, struct device_node *np,
> +				   bool *scanphys)
> +{
> +	struct device_node *child;
> +	int addr, rc;
> +
> +	/* Loop over the child nodes and register a phy_device for each phy */
> +	for_each_available_child_of_node(np, child) {
> +		if (of_device_is_compatible(child, "ethernet-phy-package")) {
> +			rc = __of_mdiobus_parse_phys(mdio, child, scanphys);
> +			if (rc && rc != -ENODEV)
> +				return rc;

for_each_available_child_of_node() makes calls to of_node_get() and
of_node_put(), so when jumping out of a loop it is necessary to call
of_node_put(), in this case of_node_put(child).

As flagged by Coccinelle.

Also flagged in of_mdiobus_find_phy() both before and after this patch.

> +
> +			continue;
> +		}
> +
> +		addr = of_mdio_parse_addr(&mdio->dev, child);
> +		if (addr < 0) {
> +			*scanphys = true;
> +			continue;
> +		}
> +
> +		if (of_mdiobus_child_is_phy(child))
> +			rc = of_mdiobus_register_phy(mdio, child, addr);
> +		else
> +			rc = of_mdiobus_register_device(mdio, child, addr);
> +
> +		if (rc == -ENODEV)
> +			dev_err(&mdio->dev,
> +				"MDIO device at address %d is missing.\n",
> +				addr);
> +		else if (rc)
> +			return rc;
> +	}
> +
> +	return 0;
> +}
> +
>  /**
>   * __of_mdiobus_register - Register mii_bus and create PHYs from the device tree
>   * @mdio: pointer to mii_bus structure
> @@ -180,25 +218,9 @@ int __of_mdiobus_register(struct mii_bus *mdio, struct device_node *np,
>  		return rc;
>  
>  	/* Loop over the child nodes and register a phy_device for each phy */
> -	for_each_available_child_of_node(np, child) {
> -		addr = of_mdio_parse_addr(&mdio->dev, child);
> -		if (addr < 0) {
> -			scanphys = true;
> -			continue;
> -		}
> -
> -		if (of_mdiobus_child_is_phy(child))
> -			rc = of_mdiobus_register_phy(mdio, child, addr);
> -		else
> -			rc = of_mdiobus_register_device(mdio, child, addr);
> -
> -		if (rc == -ENODEV)
> -			dev_err(&mdio->dev,
> -				"MDIO device at address %d is missing.\n",
> -				addr);
> -		else if (rc)
> -			goto unregister;
> -	}
> +	rc = __of_mdiobus_parse_phys(mdio, np, &scanphys);
> +	if (rc)
> +		goto unregister;

Jumping to unregister will call of_node_put(child),
however child appears to be uninitialised here.

Flagged by clang-16 W=1 build, and Smatch.

>  
>  	if (!scanphys)
>  		return 0;

...

WARNING: multiple messages have this Message-ID (diff)
From: Simon Horman <horms@kernel.org>
To: Christian Marangi <ansuelsmth@gmail.com>
Cc: "David S. Miller" <davem@davemloft.net>,
	Eric Dumazet <edumazet@google.com>,
	Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
	Rob Herring <robh+dt@kernel.org>,
	Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
	Conor Dooley <conor+dt@kernel.org>,
	Andy Gross <agross@kernel.org>,
	Bjorn Andersson <andersson@kernel.org>,
	Konrad Dybcio <konrad.dybcio@linaro.org>,
	Andrew Lunn <andrew@lunn.ch>,
	Heiner Kallweit <hkallweit1@gmail.com>,
	Russell King <linux@armlinux.org.uk>,
	Florian Fainelli <florian.fainelli@broadcom.com>,
	Broadcom internal kernel review list
	<bcm-kernel-feedback-list@broadcom.com>,
	Daniel Golle <daniel@makrotopia.org>,
	Qingfang Deng <dqfext@gmail.com>,
	SkyLake Huang <SkyLake.Huang@mediatek.com>,
	Matthias Brugger <matthias.bgg@gmail.com>,
	AngeloGioacchino Del Regno
	<angelogioacchino.delregno@collabora.com>,
	David Epping <david.epping@missinglinkelectronics.com>,
	Vladimir Oltean <olteanv@gmail.com>,
	"Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>,
	Harini Katakam <harini.katakam@amd.com>,
	Robert Marko <robert.marko@sartura.hr>,
	netdev@vger.kernel.org, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-mediatek@lists.infradead.org
Subject: Re: [net-next RFC PATCH 04/14] net: phy: add initial support for PHY package in DT
Date: Wed, 22 Nov 2023 10:52:43 +0000	[thread overview]
Message-ID: <20231122105243.GB28959@kernel.org> (raw)
In-Reply-To: <20231120135041.15259-5-ansuelsmth@gmail.com>

On Mon, Nov 20, 2023 at 02:50:31PM +0100, Christian Marangi wrote:
> Add initial support for PHY package in DT.
> 
> Make it easier to define PHY package and describe the global PHY
> directly in DT by refereincing them by phandles instead of custom
> functions in each PHY driver.
> 
> Each PHY in a package needs to be defined in a dedicated node in the
> mdio node. This dedicated node needs to have the compatible set to
> "ethernet-phy-package" and define "global-phys" and "#global-phy-cells"
> respectively to a list of phandle to the global phy to define for the
> PHY package and 0 for cells as the phandle won't take any args.
> 
> With this defined, the generic PHY probe will join each PHY in this
> dedicated node to the package.
> 
> PHY driver MUST set the required global PHY count in
> .phy_package_global_phy_num to correctly verify that DT define the
> correct number of phandle to the required global PHY.
> 
> mdio_bus.c and of_mdio.c is updated to now support and parse also
> PHY package subnote that have the compatible "phy-package".
> 
> Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>

Hi Christian,

I was a little hasty in hitting send on my previous message.
Please find some more minor feedback from my side below.

...

> diff --git a/drivers/net/mdio/of_mdio.c b/drivers/net/mdio/of_mdio.c
> index 64ebcb6d235c..bb910651118f 100644
> --- a/drivers/net/mdio/of_mdio.c
> +++ b/drivers/net/mdio/of_mdio.c
> @@ -139,6 +139,44 @@ bool of_mdiobus_child_is_phy(struct device_node *child)
>  }
>  EXPORT_SYMBOL(of_mdiobus_child_is_phy);
>  
> +static int __of_mdiobus_parse_phys(struct mii_bus *mdio, struct device_node *np,
> +				   bool *scanphys)
> +{
> +	struct device_node *child;
> +	int addr, rc;
> +
> +	/* Loop over the child nodes and register a phy_device for each phy */
> +	for_each_available_child_of_node(np, child) {
> +		if (of_device_is_compatible(child, "ethernet-phy-package")) {
> +			rc = __of_mdiobus_parse_phys(mdio, child, scanphys);
> +			if (rc && rc != -ENODEV)
> +				return rc;

for_each_available_child_of_node() makes calls to of_node_get() and
of_node_put(), so when jumping out of a loop it is necessary to call
of_node_put(), in this case of_node_put(child).

As flagged by Coccinelle.

Also flagged in of_mdiobus_find_phy() both before and after this patch.

> +
> +			continue;
> +		}
> +
> +		addr = of_mdio_parse_addr(&mdio->dev, child);
> +		if (addr < 0) {
> +			*scanphys = true;
> +			continue;
> +		}
> +
> +		if (of_mdiobus_child_is_phy(child))
> +			rc = of_mdiobus_register_phy(mdio, child, addr);
> +		else
> +			rc = of_mdiobus_register_device(mdio, child, addr);
> +
> +		if (rc == -ENODEV)
> +			dev_err(&mdio->dev,
> +				"MDIO device at address %d is missing.\n",
> +				addr);
> +		else if (rc)
> +			return rc;
> +	}
> +
> +	return 0;
> +}
> +
>  /**
>   * __of_mdiobus_register - Register mii_bus and create PHYs from the device tree
>   * @mdio: pointer to mii_bus structure
> @@ -180,25 +218,9 @@ int __of_mdiobus_register(struct mii_bus *mdio, struct device_node *np,
>  		return rc;
>  
>  	/* Loop over the child nodes and register a phy_device for each phy */
> -	for_each_available_child_of_node(np, child) {
> -		addr = of_mdio_parse_addr(&mdio->dev, child);
> -		if (addr < 0) {
> -			scanphys = true;
> -			continue;
> -		}
> -
> -		if (of_mdiobus_child_is_phy(child))
> -			rc = of_mdiobus_register_phy(mdio, child, addr);
> -		else
> -			rc = of_mdiobus_register_device(mdio, child, addr);
> -
> -		if (rc == -ENODEV)
> -			dev_err(&mdio->dev,
> -				"MDIO device at address %d is missing.\n",
> -				addr);
> -		else if (rc)
> -			goto unregister;
> -	}
> +	rc = __of_mdiobus_parse_phys(mdio, np, &scanphys);
> +	if (rc)
> +		goto unregister;

Jumping to unregister will call of_node_put(child),
however child appears to be uninitialised here.

Flagged by clang-16 W=1 build, and Smatch.

>  
>  	if (!scanphys)
>  		return 0;

...

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  parent reply	other threads:[~2023-11-22 10:52 UTC|newest]

Thread overview: 113+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-11-20 13:50 [net-next RFC PATCH 00/14] net: phy: Support DT PHY package Christian Marangi
2023-11-20 13:50 ` Christian Marangi
2023-11-20 13:50 ` [net-next RFC PATCH 01/14] net: phy: extend PHY package API to support multiple global address Christian Marangi
2023-11-20 13:50   ` Christian Marangi
2023-11-20 13:50 ` [net-next RFC PATCH 02/14] dt-bindings: net: move PHY modes to common PHY mode types definition Christian Marangi
2023-11-20 13:50   ` Christian Marangi
2023-11-20 15:14   ` Rob Herring
2023-11-20 15:14     ` Rob Herring
2023-11-20 17:30   ` Rob Herring
2023-11-20 17:30     ` Rob Herring
2023-11-20 13:50 ` [net-next RFC PATCH 03/14] dt-bindings: net: document ethernet PHY package nodes Christian Marangi
2023-11-20 13:50   ` Christian Marangi
2023-11-20 17:41   ` Rob Herring
2023-11-20 17:41     ` Rob Herring
2023-11-20 16:39     ` Christian Marangi
2023-11-20 16:39       ` Christian Marangi
2023-11-20 20:44   ` Andrew Lunn
2023-11-20 20:44     ` Andrew Lunn
2023-11-20 18:09     ` Christian Marangi
2023-11-20 18:09       ` Christian Marangi
2023-11-20 21:25       ` Andrew Lunn
2023-11-20 21:25         ` Andrew Lunn
2023-11-20 18:45         ` Christian Marangi
2023-11-20 18:45           ` Christian Marangi
2023-11-21 14:42     ` Rob Herring
2023-11-21 14:42       ` Rob Herring
2023-11-21 14:45       ` Andrew Lunn
2023-11-21 14:45         ` Andrew Lunn
2023-11-22 18:32         ` Christian Marangi
2023-11-22 18:32           ` Christian Marangi
2023-11-23  3:30           ` Andrew Lunn
2023-11-23  3:30             ` Andrew Lunn
2023-11-23 10:38             ` Christian Marangi
2023-11-23 10:38               ` Christian Marangi
2023-11-23 14:27               ` Andrew Lunn
2023-11-23 14:27                 ` Andrew Lunn
2023-11-23 14:35                 ` Russell King (Oracle)
2023-11-23 14:35                   ` Russell King (Oracle)
2023-11-23 14:57                   ` Andrew Lunn
2023-11-23 14:57                     ` Andrew Lunn
2023-11-23 19:33                     ` Christian Marangi
2023-11-23 19:33                       ` Christian Marangi
2023-11-24 11:49                       ` Jie Luo
2023-11-24 11:49                         ` Jie Luo
2023-11-24 12:02                         ` Russell King (Oracle)
2023-11-24 12:02                           ` Russell King (Oracle)
2023-11-24 14:44                           ` Andrew Lunn
2023-11-24 14:44                             ` Andrew Lunn
2023-11-24 15:16                             ` Russell King (Oracle)
2023-11-24 15:16                               ` Russell King (Oracle)
2023-11-24 16:59                               ` Robert Marko
2023-11-24 16:59                                 ` Robert Marko
2023-11-23 15:07               ` Andrew Lunn
2023-11-23 15:07                 ` Andrew Lunn
2023-11-23 19:36                 ` Christian Marangi
2023-11-23 19:36                   ` Christian Marangi
2023-11-24 16:59           ` Vladimir Oltean
2023-11-24 16:59             ` Vladimir Oltean
2023-11-24 16:25             ` Christian Marangi
2023-11-24 16:25               ` Christian Marangi
2023-11-24 18:27               ` Vladimir Oltean
2023-11-24 18:27                 ` Vladimir Oltean
2023-11-24 18:35             ` Andrew Lunn
2023-11-24 18:35               ` Andrew Lunn
2023-11-24 19:40               ` Vladimir Oltean
2023-11-24 19:40                 ` Vladimir Oltean
2023-11-20 13:50 ` [net-next RFC PATCH 04/14] net: phy: add initial support for PHY package in DT Christian Marangi
2023-11-20 13:50   ` Christian Marangi
2023-11-22 10:41   ` Simon Horman
2023-11-22 10:41     ` Simon Horman
2023-11-22 10:52   ` Simon Horman [this message]
2023-11-22 10:52     ` Simon Horman
2023-11-22 18:15     ` Christian Marangi
2023-11-22 18:15       ` Christian Marangi
2023-11-22 21:14       ` Simon Horman
2023-11-22 21:14         ` Simon Horman
2023-11-22 12:40   ` kernel test robot
2023-11-20 13:50 ` [net-next RFC PATCH 05/14] net: phy: add support for named global PHY in DT PHY package Christian Marangi
2023-11-20 13:50   ` Christian Marangi
2023-11-20 13:50 ` [net-next RFC PATCH 06/14] net: phy: add support for shared priv data size for PHY package in DT Christian Marangi
2023-11-20 13:50   ` Christian Marangi
2023-11-20 13:50 ` [net-next RFC PATCH 07/14] net: phy: add support for driver specific PHY package probe/config Christian Marangi
2023-11-20 13:50   ` Christian Marangi
2023-11-20 13:50 ` [net-next RFC PATCH 08/14] net: phy: add support for PHY package interface mode Christian Marangi
2023-11-20 13:50   ` Christian Marangi
2023-11-20 13:50 ` [net-next RFC PATCH 09/14] net: phy: move mmd_phy_indirect to generic header Christian Marangi
2023-11-20 13:50   ` Christian Marangi
2023-11-20 13:50 ` [net-next RFC PATCH 10/14] net: phy: add support for PHY package MMD read/write Christian Marangi
2023-11-20 13:50   ` Christian Marangi
2023-11-20 13:50 ` [net-next RFC PATCH 11/14] dt-bindings: net: add QCA807x PHY defines Christian Marangi
2023-11-20 13:50   ` Christian Marangi
2023-11-23  3:01   ` Andrew Lunn
2023-11-23  3:01     ` Andrew Lunn
2023-11-20 13:50 ` [net-next RFC PATCH 12/14] dt-bindings: net: Document Qcom QCA807x PHY package Christian Marangi
2023-11-20 13:50   ` Christian Marangi
2023-11-23  2:15   ` Andrew Lunn
2023-11-23  2:15     ` Andrew Lunn
2023-11-23 11:20     ` Robert Marko
2023-11-23 11:20       ` Robert Marko
2023-11-23  9:41   ` Russell King (Oracle)
2023-11-23  9:41     ` Russell King (Oracle)
2023-11-20 13:50 ` [net-next RFC PATCH 13/14] net: phy: add Qualcom QCA807x driver Christian Marangi
2023-11-20 13:50   ` Christian Marangi
2023-11-21 13:37   ` kernel test robot
2023-11-22 14:48   ` kernel test robot
2023-11-22 15:45   ` kernel test robot
2023-11-23  2:55   ` Andrew Lunn
2023-11-23  2:55     ` Andrew Lunn
2023-11-24 11:46   ` kernel test robot
2023-11-20 13:50 ` [net-next RFC PATCH 14/14] net: phy: qca807x: Add support for configurable LED Christian Marangi
2023-11-20 13:50   ` Christian Marangi
2023-11-20 15:11 ` [net-next RFC PATCH 00/14] net: phy: Support DT PHY package Maxime Chevallier
2023-11-20 15:11   ` Maxime Chevallier

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20231122105243.GB28959@kernel.org \
    --to=horms@kernel.org \
    --cc=SkyLake.Huang@mediatek.com \
    --cc=agross@kernel.org \
    --cc=andersson@kernel.org \
    --cc=andrew@lunn.ch \
    --cc=angelogioacchino.delregno@collabora.com \
    --cc=ansuelsmth@gmail.com \
    --cc=bcm-kernel-feedback-list@broadcom.com \
    --cc=conor+dt@kernel.org \
    --cc=daniel@makrotopia.org \
    --cc=davem@davemloft.net \
    --cc=david.epping@missinglinkelectronics.com \
    --cc=devicetree@vger.kernel.org \
    --cc=dqfext@gmail.com \
    --cc=edumazet@google.com \
    --cc=florian.fainelli@broadcom.com \
    --cc=harini.katakam@amd.com \
    --cc=hkallweit1@gmail.com \
    --cc=konrad.dybcio@linaro.org \
    --cc=krzysztof.kozlowski+dt@linaro.org \
    --cc=kuba@kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mediatek@lists.infradead.org \
    --cc=linux@armlinux.org.uk \
    --cc=matthias.bgg@gmail.com \
    --cc=netdev@vger.kernel.org \
    --cc=olteanv@gmail.com \
    --cc=pabeni@redhat.com \
    --cc=rmk+kernel@armlinux.org.uk \
    --cc=robert.marko@sartura.hr \
    --cc=robh+dt@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.