linux-arm-msm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Christian Marangi <ansuelsmth@gmail.com>
To: Andrew Lunn <andrew@lunn.ch>
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>,
	Heiner Kallweit <hkallweit1@gmail.com>,
	Russell King <linux@armlinux.org.uk>,
	Matthias Brugger <matthias.bgg@gmail.com>,
	AngeloGioacchino Del Regno
	<angelogioacchino.delregno@collabora.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 PATCH RFC v3 2/8] net: phy: add initial support for PHY package in DT
Date: Tue, 28 Nov 2023 13:09:23 +0100	[thread overview]
Message-ID: <6565d875.050a0220.d709d.658b@mx.google.com> (raw)
In-Reply-To: <b28b5d10-08cd-4e30-9909-f37834d80c81@lunn.ch>

On Tue, Nov 28, 2023 at 01:39:02AM +0100, Andrew Lunn wrote:
> > +static int of_phy_package(struct phy_device *phydev)
> > +{
> > +	struct device_node *node = phydev->mdio.dev.of_node;
> > +	struct device_node *package_node;
> > +	u32 base_addr;
> > +	int ret;
> > +
> > +	if (!node)
> > +		return 0;
> > +
> > +	package_node = of_get_parent(node);
> > +	if (!package_node)
> > +		return 0;
> > +
> > +	if (!of_device_is_compatible(package_node, "ethernet-phy-package"))
> > +		return 0;
> > +
> > +	if (of_property_read_u32(package_node, "reg", &base_addr))
> > +		return -EINVAL;
> > +
> > +	ret = devm_phy_package_join(&phydev->mdio.dev, phydev,
> > +				    base_addr, 0);
> 
> No don't do this. It is just going to lead to errors. The PHY driver
> knows how many PHYs are in the package. So it can figure out what the
> base address is and create the package. It can add each PHY as they
> probe. That cannot go wrong.
>

No it can't and we experiment this with a funny implementation on the
QSDK. Maybe I'm confused?

Example on QSDK they were all based on a value first_phy_addr. This was
filled with the first phy addr found (for the package).

All OEM followed a template with declaring all sort of bloat and they
probably have no idea what they are actually putting in DT. We reverse
all the properties and we gave a meaning to all the values...

We quikly notice that the parsing was very fragile and on some strange
device (an example a Xiaomi 36000) the first PHY for the package was
actually not attached to anything. Resulting in all this logic of
"first_phy_addr" failing as by removing the first PHY, the value was set
to a wrong addr resulting in all sort of problems.

This changed a lot (the original series used a more robust way with
phandle, but it was asked to use base_addr and use offset in the PHY
addr, less robust still OK)

If we revert to PHY driver making the PHY package then we lose all kind
of ""automation"" of having a correct base addr. In PHY driver we would
have to manually parse with parent (as we do here) and check the value?

Why not do the thing directly on PHY core?

By making the PHY driver creating the package, we are back on all kind
of bloat in the PHY driver doing the same thing (parsing package nodes,
probe_once check, config_once check) instead of handling them directly
in PHY core.

Also just to point out, the way the current PHY driver derive the base
addr is problematic. All of them use special regs to find the base one
but I can totally see a PHY driver in the future assuming the first PHY
being the first in the package to be probed, set the base addr on the
first PHY and also assuming that it's always define in DT.

If we really don't want the OF parsing in PHY core and autojoin them,
is at least OK to introduce an helper to get the base addr from a PHY
package node structure? (to at least try to minimaze the bloat that PHY
driver will have?)

Also with the OF support dropped, I guess also the added API in this
series has to be dropped. (as they would be called after the first PHY
probe and that is problematic if for some reason only one PHY of the
package is declared in DT) (an alternative might be moving the
probe_once after the PHY is probed as we expect the phy_package_join
call done in the PHY probe call)

> If you create the package based on DT you have to validate that the DT
> is correct. You need the same information, the base address, how many
> packages are in the PHY, etc. So DT gains your nothing except more
> potential to get it wrong.
> 

For the sake of package join, only the reg has to be validated and the
validation is just if addrs makes sense. Everything else can be done by
PHY package probe once.

> Please use DT just for properties for the package, nothing else.
> 

-- 
	Ansuel

  reply	other threads:[~2023-11-28 12:09 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-11-26  1:53 [net-next PATCH RFC v3 0/8] net: phy: Support DT PHY package Christian Marangi
2023-11-26  1:53 ` [net-next PATCH RFC v3 1/8] dt-bindings: net: document ethernet PHY package nodes Christian Marangi
2023-11-27 22:16   ` Rob Herring
2023-11-28  0:09     ` Andrew Lunn
2024-01-07 18:00   ` Sergey Ryazanov
2024-01-07 18:30     ` Christian Marangi
2024-01-07 18:44       ` Andrew Lunn
2024-01-07 21:57         ` Sergey Ryazanov
2024-01-07 21:49       ` Sergey Ryazanov
2024-01-07 21:45         ` Christian Marangi
2024-01-17  0:36         ` Christian Marangi
2024-01-17 19:39           ` Sergey Ryazanov
2024-01-17 20:03             ` Christian Marangi
2024-01-17 20:05             ` Andrew Lunn
2024-01-07 18:31     ` Andrew Lunn
2024-01-08 11:13       ` Jie Luo
2024-01-08 13:19         ` Andrew Lunn
2024-01-09 11:44           ` Jie Luo
2024-01-09 13:48             ` Andrew Lunn
2024-01-10  3:13               ` Jie Luo
2023-11-26  1:53 ` [net-next PATCH RFC v3 2/8] net: phy: add initial support for PHY package in DT Christian Marangi
2023-11-28  0:39   ` Andrew Lunn
2023-11-28 12:09     ` Christian Marangi [this message]
2023-11-26  1:53 ` [net-next PATCH RFC v3 3/8] net: phy: add support for shared priv data size " Christian Marangi
2023-11-26  1:53 ` [net-next PATCH RFC v3 4/8] net: phy: add support for driver specific PHY package probe/config Christian Marangi
2023-11-26  1:53 ` [net-next PATCH RFC v3 5/8] dt-bindings: net: add QCA807x PHY defines Christian Marangi
2023-11-27 22:36   ` Rob Herring
2023-11-26  1:53 ` [net-next PATCH RFC v3 6/8] dt-bindings: net: Document Qcom QCA807x PHY package Christian Marangi
2023-11-27 22:35   ` Rob Herring
2023-11-28  0:30   ` Andrew Lunn
2023-11-26  1:53 ` [net-next PATCH RFC v3 7/8] net: phy: add Qualcom QCA807x driver Christian Marangi
2023-11-26  1:53 ` [net-next PATCH RFC v3 8/8] net: phy: qca807x: Add support for configurable LED Christian Marangi
2023-11-28  0:20 ` [net-next PATCH RFC v3 0/8] net: phy: Support DT PHY package Andrew Lunn

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=6565d875.050a0220.d709d.658b@mx.google.com \
    --to=ansuelsmth@gmail.com \
    --cc=agross@kernel.org \
    --cc=andersson@kernel.org \
    --cc=andrew@lunn.ch \
    --cc=angelogioacchino.delregno@collabora.com \
    --cc=conor+dt@kernel.org \
    --cc=davem@davemloft.net \
    --cc=devicetree@vger.kernel.org \
    --cc=edumazet@google.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=pabeni@redhat.com \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).