From: Vladimir Oltean <olteanv@gmail.com>
To: "Linus Walleij" <linus.walleij@linaro.org>,
"Arınç ÜNAL" <arinc.unal@arinc9.com>,
"Marek Behún" <kabel@kernel.org>
Cc: Andrew Lunn <andrew@lunn.ch>,
Gregory Clement <gregory.clement@bootlin.com>,
Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>,
Rob Herring <robh+dt@kernel.org>,
Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
Conor Dooley <conor+dt@kernel.org>,
Russell King <linux@armlinux.org.uk>,
Florian Fainelli <f.fainelli@gmail.com>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Christian Marangi <ansuelsmth@gmail.com>,
linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org, netdev@vger.kernel.org
Subject: Re: [PATCH net-next v4 6/7] dt-bindings: marvell: Rewrite MV88E6xxx in schema
Date: Thu, 19 Oct 2023 18:35:52 +0300 [thread overview]
Message-ID: <20231019153552.nndysafvblrkl2zn@skbuf> (raw)
In-Reply-To: <20231018-marvell-88e6152-wan-led-v4-6-3ee0c67383be@linaro.org> <20231018-marvell-88e6152-wan-led-v4-6-3ee0c67383be@linaro.org>
On Wed, Oct 18, 2023 at 11:03:45AM +0200, Linus Walleij wrote:
> +examples:
> + - |
> + #include <dt-bindings/gpio/gpio.h>
> + #include <dt-bindings/interrupt-controller/irq.h>
> + mdio {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + switch0: ethernet-switch@0 {
> + compatible = "marvell,mv88e6085";
> + reg = <0>;
> + reset-gpios = <&gpio5 1 GPIO_ACTIVE_LOW>;
> + interrupts-extended = <&gpio0 27 IRQ_TYPE_LEVEL_LOW>;
> + interrupt-controller;
> + #interrupt-cells = <2>;
> +
> + ethernet-ports {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + port@0 {
> + reg = <0>;
> + label = "lan1";
> + };
> + port@1 {
> + reg = <1>;
> + label = "lan2";
> + };
> + port@2 {
> + reg = <2>;
> + label = "lan3";
> + };
> + port@3 {
> + reg = <3>;
> + label = "lan4";
> + };
> + port@4 {
> + reg = <4>;
> + label = "wan";
> + };
> +
> + port@5 {
> + reg = <5>;
> + phy-mode = "sgmii";
> + ethernet = <ð2>;
> +
> + fixed-link {
> + speed = <1000>;
> + full-duplex;
> + };
> + };
> + };
> +
> + mdio {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + switch0phy0: ethernet-phy@0 {
> + reg = <0>;
> + interrupts-extended = <&switch0 0 IRQ_TYPE_LEVEL_HIGH>;
> + };
> + };
> + };
> + };
> +
> + - |
> + #include <dt-bindings/gpio/gpio.h>
> + #include <dt-bindings/interrupt-controller/irq.h>
> + mdio {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + switch1: ethernet-switch@0 {
> + compatible = "marvell,mv88e6190";
> + reg = <0>;
> + reset-gpios = <&gpio5 1 GPIO_ACTIVE_LOW>;
> + interrupts-extended = <&gpio0 27 IRQ_TYPE_LEVEL_LOW>;
> + interrupt-controller;
> + #interrupt-cells = <2>;
> +
> + ethernet-ports {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + port@0 {
> + reg = <0>;
> + label = "lan1";
> + };
> + port@1 {
> + reg = <1>;
> + label = "lan2";
> + };
> + port@2 {
> + reg = <2>;
> + label = "lan3";
> + };
> + port@3 {
> + reg = <3>;
> + label = "lan4";
> + };
> + };
> +
> + mdio {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + switch1phy0: ethernet-phy@0 {
> + reg = <0>;
> + interrupts-extended = <&switch1 0 IRQ_TYPE_LEVEL_HIGH>;
> + };
> + };
> +
> + mdio-external {
> + compatible = "marvell,mv88e6xxx-mdio-external";
> + #address-cells = <1>;
> + #size-cells = <0>;
> + switch1phy9: ethernet-phy@9 {
> + reg = <9>;
> + };
> + };
> + };
> + };
Yikes, both these examples are actually broken, for a reason that was
extensively discussed with Arınç in the past, and that he tried to
automatically detect through dt-schema but was ultimately told it's too
complicated.
https://patchwork.kernel.org/project/netdevbpf/cover/20230916110902.234273-1-arinc.unal@arinc9.com/
Long story short: the "mdio" node is also the ds->slave_mii_bus (soon to
be ds->user_mii_bus after Florian's inclusivity changes). Having a
slave_mii_bus makes DSA know what to do with port nodes like this, which
don't have an explicit phy-handle:
port@3 {
reg = <3>;
label = "lan4";
};
but actually, call phy_connect() on the ds->slave_mii_bus at address 3
(the port "reg").
The issue is that phy_connect() won't work if ds->slave_mii_bus has an
OF presence, and ethernet-phy@3 isn't defined under it (which it isn't,
you only put ethernet-phy@9). The super detailed reason is that the
OF-based __of_mdiobus_register() does this:
/* Mask out all PHYs from auto probing. Instead the PHYs listed in
* the device tree are populated after the bus has been registered */
mdio->phy_mask = ~0;
So either:
- you delete the "mdio" node and the ethernet-phys under it, or
- you add all ethernet-phys under the mdio node, and put phy-handles
from ports to each of them, and phy-modes of "internal"
What you have now is exactly what won't work, i.e. an OF-based
slave_mii_bus with a non-OF-based phy_connect().
I don't want to see DT examples that are structurally broken, sorry,
because then we wonder why users are confused.
Personally, I would opt for adding the more modern explicit phy-handle
and phy-mode everywhere. Those also work with the U-Boot DM_DSA driver.
Just because we tolerate the bindings defined in the dark ages of DT
doesn't mean we should make an example out of them.
Also, you seem to have duplicated some work also done by Arınç but not
finalized (the mv88e6xxx schema conversion, on which you were also
copied). Let me add Marek here too, to make sure he's aware of 2
previous attempts and doesn't start working on a 3rd one :)
One other thing I see as a deal breaker for this schema conversion is
that $nodename for Marvell needs to allow basically anything (invalidating
the constraint from ethernet-switch.yaml), because we can't change node
names in the case of some boards, otherwise we risk breaking them
(see MOX). If the schema starts emitting warnings for those node names,
then it's inevitable that some pixie in the future will eventually break
them by "fixing" the node name.
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2023-10-19 15:36 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-18 9:03 [PATCH net-next v4 0/7] Create a binding for the Marvell MV88E6xxx DSA switches Linus Walleij
2023-10-18 9:03 ` [PATCH net-next v4 1/7] dt-bindings: net: dsa: Require ports or ethernet-ports Linus Walleij
2023-10-18 10:32 ` Rob Herring
2023-10-18 11:11 ` Linus Walleij
2023-10-19 10:58 ` Russell King (Oracle)
2023-10-19 11:58 ` Conor Dooley
2023-10-19 12:27 ` Russell King (Oracle)
2023-10-19 12:46 ` Conor Dooley
2023-10-19 13:41 ` Rob Herring
2023-10-20 11:10 ` Krzysztof Kozlowski
2023-10-20 11:41 ` Linus Walleij
2023-10-20 12:16 ` Krzysztof Kozlowski
2023-10-20 12:27 ` Vladimir Oltean
2023-10-20 12:56 ` Linus Walleij
2023-10-19 12:03 ` Conor Dooley
2023-10-19 12:28 ` Russell King (Oracle)
2023-10-19 12:33 ` Conor Dooley
2023-10-18 9:03 ` [PATCH net-next v4 2/7] dt-bindings: net: mvusb: Fix up DSA example Linus Walleij
2023-10-18 10:32 ` Rob Herring
2023-10-18 11:37 ` Linus Walleij
2023-10-19 13:45 ` Rob Herring
2023-10-19 14:26 ` Vladimir Oltean
2023-10-19 20:23 ` Rob Herring
2023-10-18 13:39 ` Andrew Lunn
2023-10-19 14:28 ` Vladimir Oltean
2023-10-18 9:03 ` [PATCH net-next v4 3/7] ARM: dts: marvell: Fix some common switch mistakes Linus Walleij
2023-10-18 13:41 ` Andrew Lunn
2023-10-19 11:04 ` Russell King (Oracle)
2023-10-19 14:29 ` Vladimir Oltean
2023-10-18 9:03 ` [PATCH net-next v4 4/7] ARM: dts: nxp: " Linus Walleij
2023-10-18 13:42 ` Andrew Lunn
2023-10-19 14:33 ` Vladimir Oltean
2023-10-18 9:03 ` [PATCH net-next v4 5/7] ARM64: dts: marvell: " Linus Walleij
2023-10-18 13:43 ` Andrew Lunn
2023-10-19 14:40 ` Vladimir Oltean
2023-10-19 14:49 ` Vladimir Oltean
2023-10-19 15:26 ` Marek Behún
2023-10-19 16:22 ` Vladimir Oltean
2023-10-20 12:59 ` Linus Walleij
2023-10-25 1:11 ` Vladimir Oltean
2023-10-18 9:03 ` [PATCH net-next v4 6/7] dt-bindings: marvell: Rewrite MV88E6xxx in schema Linus Walleij
2023-10-18 10:32 ` Rob Herring
2023-10-18 11:39 ` Linus Walleij
2023-10-19 13:49 ` Rob Herring
2023-10-19 20:02 ` Rob Herring
2023-10-18 13:48 ` Andrew Lunn
2023-10-19 13:51 ` Rob Herring
2023-10-19 15:35 ` Vladimir Oltean [this message]
2023-10-20 9:13 ` Arınç ÜNAL
2023-10-20 12:47 ` Linus Walleij
2023-10-20 15:12 ` Vladimir Oltean
2023-10-20 16:07 ` Andrew Lunn
2023-10-18 9:03 ` [PATCH net-next v4 7/7] dt-bindings: marvell: Add Marvell MV88E6060 DSA schema Linus Walleij
2023-10-18 13:49 ` Andrew Lunn
2023-10-19 16:11 ` Vladimir Oltean
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=20231019153552.nndysafvblrkl2zn@skbuf \
--to=olteanv@gmail.com \
--cc=andrew@lunn.ch \
--cc=ansuelsmth@gmail.com \
--cc=arinc.unal@arinc9.com \
--cc=conor+dt@kernel.org \
--cc=davem@davemloft.net \
--cc=devicetree@vger.kernel.org \
--cc=edumazet@google.com \
--cc=f.fainelli@gmail.com \
--cc=gregory.clement@bootlin.com \
--cc=kabel@kernel.org \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=kuba@kernel.org \
--cc=linus.walleij@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=robh+dt@kernel.org \
--cc=sebastian.hesselbarth@gmail.com \
/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