mbox series

[net-next,v7,0/7] Create a binding for the Marvell MV88E6xxx DSA switches

Message ID 20231024-marvell-88e6152-wan-led-v7-0-2869347697d1@linaro.org
Headers show
Series Create a binding for the Marvell MV88E6xxx DSA switches | expand

Message

Linus Walleij Oct. 24, 2023, 1:20 p.m. UTC
The Marvell switches are lacking DT bindings.

I need proper schema checking to add LED support to the
Marvell switch. Just how it is, it can't go on like this.

Some Device Tree fixes are included in the series, these
remove the major and most annoying warnings fallout noise:
some warnings remain, and these are of more serious nature,
such as missing phy-mode. They can be applied individually,
or to the networking tree with the rest of the patches.

Thanks to Andrew Lunn, Vladimir Oltean and Russell King
for excellent review and feedback!

Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
---
Changes in v7:
- Fix the elaborate spacing to satisfy yamllint in the
  ports/ethernet-ports requirement.
- Link to v6: https://lore.kernel.org/r/20231024-marvell-88e6152-wan-led-v6-0-993ab0949344@linaro.org

Changes in v6:
- Fix ports/ethernet-ports requirement with proper indenting
  (hopefully).
- Link to v5: https://lore.kernel.org/r/20231023-marvell-88e6152-wan-led-v5-0-0e82952015a7@linaro.org

Changes in v5:
- Consistently rename switch@n to ethernet-switch@n in all cleanup patches
- Consistently rename ports to ethernet-ports in all cleanup patches
- Consistently rename all port@n to ethernet-port@n in all cleanup patches
- Consistently rename all phy@n to ethernet-phy@n in all cleanup patches
- Restore the nodename on the Turris MOX which has a U-Boot binary using the
  nodename as ABI, put in a blurb warning about this so no-one else tries
  to change it in the future.
- Drop dsa.yaml direct references where we reference dsa.yaml#/$defs/ethernet-ports
- Replace the conjured MV88E6xxx example by a better one based on imx6qdl
  plus strictly named nodes and added reset-gpios for a more complete example,
  and another example using the interrupt controller based on
  armada-381-netgear-gs110emx.dts
- Bump lineage to 2008 as Vladimir says the code was developed starting 2008.
- Link to v4: https://lore.kernel.org/r/20231018-marvell-88e6152-wan-led-v4-0-3ee0c67383be@linaro.org

Changes in v4:
- Rebase the series on top of Rob's series
  "dt-bindings: net: Child node schema cleanups" (or the hex numbered
  ports will not work)
- Fix up a whitespacing error corrupting v3...
- Add a new patch making the generic DSA binding require ports or
  ethernet-ports in the switch node.
- Drop any corrections of port@a in the patches.
- Drop oneOf in the compatible enum for mv88e6xxx
- Use ethernet-switch, ethernet-ports and ethernet-phy in the examples
- Transclude the dsa.yaml#/$defs/ethernet-ports define for ports
- Move the DTS and binding fixes first, before the actual bindings,
  so they apply without (too many) warnings as fallout.
- Drop stray colon in text.
- Drop example port in the mveusb binding.
- Link to v3: https://lore.kernel.org/r/20231016-marvell-88e6152-wan-led-v3-0-38cd449dfb15@linaro.org

Changes in v3:
- Fix up a related mvusb example in a different binding that
  the scripts were complaining about.
- Fix up the wording on internal vs external MDIO buses in the
  mv88e6xxx binding document.
- Remove pointless label and put the right rev-mii into the
  MV88E6060 schema.
- Link to v2: https://lore.kernel.org/r/20231014-marvell-88e6152-wan-led-v2-0-7fca08b68849@linaro.org

Changes in v2:
- Break out a separate Marvell MV88E6060 binding file. I stand corrected.
- Drop the idea to rely on nodename mdio-external for the external
  MDIO bus, keep the compatible, drop patch for the driver.
- Fix more Marvell DT mistakes.
- Fix NXP DT mistakes in a separate patch.
- Fix Marvell ARM64 mistakes in a separate patch.
- Link to v1: https://lore.kernel.org/r/20231013-marvell-88e6152-wan-led-v1-0-0712ba99857c@linaro.org

---
Linus Walleij (7):
      dt-bindings: net: dsa: Require ports or ethernet-ports
      dt-bindings: net: mvusb: Fix up DSA example
      ARM: dts: marvell: Fix some common switch mistakes
      ARM: dts: nxp: Fix some common switch mistakes
      ARM64: dts: marvell: Fix some common switch mistakes
      dt-bindings: marvell: Rewrite MV88E6xxx in schema
      dt-bindings: marvell: Add Marvell MV88E6060 DSA schema

 Documentation/devicetree/bindings/net/dsa/dsa.yaml |   6 +
 .../bindings/net/dsa/marvell,mv88e6060.yaml        |  88 ++++++
 .../bindings/net/dsa/marvell,mv88e6xxx.yaml        | 330 +++++++++++++++++++++
 .../devicetree/bindings/net/dsa/marvell.txt        | 109 -------
 .../devicetree/bindings/net/marvell,mvusb.yaml     |   7 +-
 MAINTAINERS                                        |   3 +-
 arch/arm/boot/dts/marvell/armada-370-rd.dts        |  24 +-
 .../dts/marvell/armada-381-netgear-gs110emx.dts    |  44 ++-
 .../dts/marvell/armada-385-clearfog-gtr-l8.dts     |  38 +--
 .../dts/marvell/armada-385-clearfog-gtr-s4.dts     |  22 +-
 arch/arm/boot/dts/marvell/armada-385-linksys.dtsi  |  18 +-
 .../boot/dts/marvell/armada-385-turris-omnia.dts   |  20 +-
 arch/arm/boot/dts/marvell/armada-388-clearfog.dts  |  20 +-
 .../boot/dts/marvell/armada-xp-linksys-mamba.dts   |  18 +-
 arch/arm/boot/dts/nxp/vf/vf610-zii-cfu1.dts        |  14 +-
 arch/arm/boot/dts/nxp/vf/vf610-zii-scu4-aib.dts    |  70 ++---
 arch/arm/boot/dts/nxp/vf/vf610-zii-spb4.dts        |  18 +-
 arch/arm/boot/dts/nxp/vf/vf610-zii-ssmb-dtu.dts    |  20 +-
 arch/arm/boot/dts/nxp/vf/vf610-zii-ssmb-spu3.dts   |  18 +-
 .../dts/marvell/armada-3720-espressobin-ultra.dts  |  14 +-
 .../boot/dts/marvell/armada-3720-espressobin.dtsi  |  20 +-
 .../boot/dts/marvell/armada-3720-gl-mv1000.dts     |  20 +-
 .../boot/dts/marvell/armada-3720-turris-mox.dts    | 189 ++++++------
 .../boot/dts/marvell/armada-7040-mochabin.dts      |  24 +-
 .../dts/marvell/armada-8040-clearfog-gt-8k.dts     |  22 +-
 arch/arm64/boot/dts/marvell/cn9130-crb.dtsi        |  42 ++-
 26 files changed, 761 insertions(+), 457 deletions(-)
---
base-commit: 1c9be5fea84e409542a186893d219bf7cff22f5a
change-id: 20231008-marvell-88e6152-wan-led-88c43b7fd2fd

Best regards,

Comments

Florian Fainelli Oct. 24, 2023, 4:35 p.m. UTC | #1
On 10/24/23 06:20, Linus Walleij wrote:
> Fix some errors in the Marvell MV88E6xxx switch descriptions:
> - The top node had no address size or cells.
> - switch0@0 is not OK, should be ethernet-switch@0.
> - The ports node should be named ethernet-ports
> - The ethernet-ports node should have port@0 etc children, no
>    plural "ports" in the children.
> - Ports should be named ethernet-port@0 etc
> - PHYs should be named ethernet-phy@0 etc
> 
> This serves as an example of fixes needed for introducing a
> schema for the bindings, but the patch can simply be applied.
> 
> Reviewed-by: Andrew Lunn <andrew@lunn.ch>
> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>

Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
Florian Fainelli Oct. 24, 2023, 4:36 p.m. UTC | #2
On 10/24/23 06:20, Linus Walleij wrote:
> Fix some errors in the Marvell MV88E6xxx switch descriptions:
> - switch0@0 is not OK, should be ethernet-switch@0
> - ports should be ethernet-ports
> - port should be ethernet-port
> - phy should be ethernet-phy
> 
> Reviewed-by: Andrew Lunn <andrew@lunn.ch>
> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>

Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
Florian Fainelli Oct. 24, 2023, 4:37 p.m. UTC | #3
On 10/24/23 06:20, Linus Walleij wrote:
> Fix some errors in the Marvell MV88E6xxx switch descriptions:
> - The top node had no address size or cells.
> - switch0@0 is not OK, should be ethernet-switch@0.
> - ports should be ethernet-ports
> - port@0 should be ethernet-port@0
> - PHYs should be named ethernet-phy@
> 
> Reviewed-by: Andrew Lunn <andrew@lunn.ch>
> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>

Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
Vladimir Oltean Oct. 24, 2023, 6:28 p.m. UTC | #4
Linus,

On Tue, Oct 24, 2023 at 03:20:31PM +0200, Linus Walleij wrote:
> Fix some errors in the Marvell MV88E6xxx switch descriptions:
> - The top node had no address size or cells.
> - switch0@0 is not OK, should be ethernet-switch@0.
> - ports should be ethernet-ports
> - port@0 should be ethernet-port@0
> - PHYs should be named ethernet-phy@
> 
> Reviewed-by: Andrew Lunn <andrew@lunn.ch>
> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
> ---
>  .../dts/marvell/armada-3720-espressobin-ultra.dts  |  14 +-
>  .../boot/dts/marvell/armada-3720-espressobin.dtsi  |  20 +--
>  .../boot/dts/marvell/armada-3720-gl-mv1000.dts     |  20 +--
>  .../boot/dts/marvell/armada-3720-turris-mox.dts    | 189 +++++++++++----------
>  .../boot/dts/marvell/armada-7040-mochabin.dts      |  24 ++-
>  .../dts/marvell/armada-8040-clearfog-gt-8k.dts     |  22 +--
>  arch/arm64/boot/dts/marvell/cn9130-crb.dtsi        |  42 +++--
>  7 files changed, 164 insertions(+), 167 deletions(-)
> 
> diff --git a/arch/arm64/boot/dts/marvell/armada-3720-espressobin-ultra.dts b/arch/arm64/boot/dts/marvell/armada-3720-espressobin-ultra.dts
> index f9abef8dcc94..870bb380a40a 100644
> --- a/arch/arm64/boot/dts/marvell/armada-3720-espressobin-ultra.dts
> +++ b/arch/arm64/boot/dts/marvell/armada-3720-espressobin-ultra.dts
> @@ -126,32 +126,32 @@ &switch0 {
>  
>  	reset-gpios = <&gpiosb 23 GPIO_ACTIVE_LOW>;
>  
> -	ports {
> -		switch0port1: port@1 {
> +	ethernet-ports {
> +		switch0port1: ethernet-port@1 {
>  			reg = <1>;
>  			label = "lan0";
>  			phy-handle = <&switch0phy0>;
>  		};
>  
> -		switch0port2: port@2 {
> +		switch0port2: ethernet-port@2 {
>  			reg = <2>;
>  			label = "lan1";
>  			phy-handle = <&switch0phy1>;
>  		};
>  
> -		switch0port3: port@3 {
> +		switch0port3: ethernet-port@3 {
>  			reg = <3>;
>  			label = "lan2";
>  			phy-handle = <&switch0phy2>;
>  		};
>  
> -		switch0port4: port@4 {
> +		switch0port4: ethernet-port@4 {
>  			reg = <4>;
>  			label = "lan3";
>  			phy-handle = <&switch0phy3>;
>  		};
>  
> -		switch0port5: port@5 {
> +		switch0port5: ethernet-port@5 {
>  			reg = <5>;
>  			label = "wan";
>  			phy-handle = <&extphy>;
> @@ -160,7 +160,7 @@ switch0port5: port@5 {
>  	};
>  
>  	mdio {
> -		switch0phy3: switch0phy3@14 {
> +		switch0phy3: ethernet-phy@14 {
>  			reg = <0x14>;
>  		};
>  	};
> diff --git a/arch/arm64/boot/dts/marvell/armada-3720-espressobin.dtsi b/arch/arm64/boot/dts/marvell/armada-3720-espressobin.dtsi
> index 5fc613d24151..86ec0df1c676 100644
> --- a/arch/arm64/boot/dts/marvell/armada-3720-espressobin.dtsi
> +++ b/arch/arm64/boot/dts/marvell/armada-3720-espressobin.dtsi
> @@ -145,19 +145,17 @@ &usb2 {
>  };
>  
>  &mdio {
> -	switch0: switch0@1 {
> +	switch0: ethernet-switch@1 {
>  		compatible = "marvell,mv88e6085";
> -		#address-cells = <1>;
> -		#size-cells = <0>;
>  		reg = <1>;
>  
>  		dsa,member = <0 0>;
>  
> -		ports {
> +		ethernet-ports {
>  			#address-cells = <1>;
>  			#size-cells = <0>;
>  
> -			switch0port0: port@0 {
> +			switch0port0: ethernet-port@0 {
>  				reg = <0>;
>  				label = "cpu";
>  				ethernet = <&eth0>;
> @@ -168,19 +166,19 @@ fixed-link {
>  				};
>  			};
>  
> -			switch0port1: port@1 {
> +			switch0port1: ethernet-port@1 {
>  				reg = <1>;
>  				label = "wan";
>  				phy-handle = <&switch0phy0>;
>  			};
>  
> -			switch0port2: port@2 {
> +			switch0port2: ethernet-port@2 {
>  				reg = <2>;
>  				label = "lan0";
>  				phy-handle = <&switch0phy1>;
>  			};
>  
> -			switch0port3: port@3 {
> +			switch0port3: ethernet-port@3 {
>  				reg = <3>;
>  				label = "lan1";
>  				phy-handle = <&switch0phy2>;
> @@ -192,13 +190,13 @@ mdio {
>  			#address-cells = <1>;
>  			#size-cells = <0>;
>  
> -			switch0phy0: switch0phy0@11 {
> +			switch0phy0: ethernet-phy@11 {
>  				reg = <0x11>;
>  			};
> -			switch0phy1: switch0phy1@12 {
> +			switch0phy1: ethernet-phy@12 {
>  				reg = <0x12>;
>  			};
> -			switch0phy2: switch0phy2@13 {
> +			switch0phy2: ethernet-phy@13 {
>  				reg = <0x13>;
>  			};
>  		};

I looked at U-Boot's ft_board_setup() from board/Marvell/mvebu_armada-37xx/board.c
and it doesn't appear to do anything with the switch. But after the MOX precedent
(which is _still_ problematic, more below), I still think we are way too
trigger-happy with this, and it would be good to ask someone who has the
Espressobin to test.

Pali, you are the last committer on the Linux DTS, could you please boot-test
this change, or at least confirm that as far as you know, there are no bootloader
dependencies on the precise node name for the switch and its child nodes?

> diff --git a/arch/arm64/boot/dts/marvell/armada-3720-gl-mv1000.dts b/arch/arm64/boot/dts/marvell/armada-3720-gl-mv1000.dts
> index b1b45b4fa9d4..63fbc8352161 100644
> --- a/arch/arm64/boot/dts/marvell/armada-3720-gl-mv1000.dts
> +++ b/arch/arm64/boot/dts/marvell/armada-3720-gl-mv1000.dts
> @@ -152,31 +152,29 @@ &uart0 {
>  };
>  
>  &mdio {
> -	switch0: switch0@1 {
> +	switch0: ethernet-switch@1 {
>  		compatible = "marvell,mv88e6085";
> -		#address-cells = <1>;
> -		#size-cells = <0>;
>  		reg = <1>;
>  
>  		dsa,member = <0 0>;
>  
> -		ports: ports {
> +		ports: ethernet-ports {
>  			#address-cells = <1>;
>  			#size-cells = <0>;
>  
> -			port@0 {
> +			ethernet-port@0 {
>  				reg = <0>;
>  				label = "cpu";
>  				ethernet = <&eth0>;
>  			};
>  
> -			port@1 {
> +			ethernet-port@1 {
>  				reg = <1>;
>  				label = "wan";
>  				phy-handle = <&switch0phy0>;
>  			};
>  
> -			port@2 {
> +			ethernet-port@2 {
>  				reg = <2>;
>  				label = "lan0";
>  				phy-handle = <&switch0phy1>;
> @@ -185,7 +183,7 @@ port@2 {
>  				nvmem-cell-names = "mac-address";
>  			};
>  
> -			port@3 {
> +			ethernet-port@3 {
>  				reg = <3>;
>  				label = "lan1";
>  				phy-handle = <&switch0phy2>;
> @@ -199,13 +197,13 @@ mdio {
>  			#address-cells = <1>;
>  			#size-cells = <0>;
>  
> -			switch0phy0: switch0phy0@11 {
> +			switch0phy0: ethernet-phy@11 {
>  				reg = <0x11>;
>  			};
> -			switch0phy1: switch0phy1@12 {
> +			switch0phy1: ethernet-phy@12 {
>  				reg = <0x12>;
>  			};
> -			switch0phy2: switch0phy2@13 {
> +			switch0phy2: ethernet-phy@13 {
>  				reg = <0x13>;
>  			};
>  		};

Enrico, I see the GL-MV1000 device tree submission is relatively new.
Could you please ACK this change as well?

> diff --git a/arch/arm64/boot/dts/marvell/armada-3720-turris-mox.dts b/arch/arm64/boot/dts/marvell/armada-3720-turris-mox.dts
> index 9eab2bb22134..cdf1b8bdb230 100644
> --- a/arch/arm64/boot/dts/marvell/armada-3720-turris-mox.dts
> +++ b/arch/arm64/boot/dts/marvell/armada-3720-turris-mox.dts
> @@ -304,7 +304,12 @@ phy1: ethernet-phy@1 {
>  		reg = <1>;
>  	};
>  
> -	/* switch nodes are enabled by U-Boot if modules are present */
> +	/*
> +	 * NOTE: switch nodes are enabled by U-Boot if modules are present
> +	 * DO NOT change this node name (switch0@10) even if it is not following
> +	 * conventions! Deployed U-Boot binaries are explicitly looking for
> +	 * this node in order to augment the device tree!
> +	 */

Not "this node", but all switch nodes!

>  	switch0@10 {
>  		compatible = "marvell,mv88e6190";
>  		reg = <0x10>;
> @@ -317,92 +322,92 @@ mdio {
>  			#address-cells = <1>;
>  			#size-cells = <0>;
>  
> -			switch0phy1: switch0phy1@1 {
> +			switch0phy1: ethernet-phy@1 {
>  				reg = <0x1>;
>  			};
>  
> -			switch0phy2: switch0phy2@2 {
> +			switch0phy2: ethernet-phy@2 {
>  				reg = <0x2>;
>  			};
>  
> -			switch0phy3: switch0phy3@3 {
> +			switch0phy3: ethernet-phy@3 {
>  				reg = <0x3>;
>  			};
>  
> -			switch0phy4: switch0phy4@4 {
> +			switch0phy4: ethernet-phy@4 {
>  				reg = <0x4>;
>  			};
>  
> -			switch0phy5: switch0phy5@5 {
> +			switch0phy5: ethernet-phy@5 {
>  				reg = <0x5>;
>  			};
>  
> -			switch0phy6: switch0phy6@6 {
> +			switch0phy6: ethernet-phy@6 {
>  				reg = <0x6>;
>  			};
>  
> -			switch0phy7: switch0phy7@7 {
> +			switch0phy7: ethernet-phy@7 {
>  				reg = <0x7>;
>  			};
>  
> -			switch0phy8: switch0phy8@8 {
> +			switch0phy8: ethernet-phy@8 {
>  				reg = <0x8>;
>  			};
>  		};
>  
> -		ports {
> +		ethernet-ports {

U-Boot code does this, so you can't rename "ports":

	/*
	 * now if there are more switches or a SFP module coming after,
	 * enable corresponding ports
	 */
	if (id < peridot + topaz - 1) {
		res = fdt_status_okay_by_pathf(blob,
					       "%s/switch%i@%x/ports/port@a",
					       mdio_path, id, addr);
	} else if (id == peridot - 1 && !topaz && sfp) {
		res = fdt_status_okay_by_pathf(blob,
					       "%s/switch%i@%x/ports/port-sfp@a",
					       mdio_path, id, addr);
	} else {
		res = 0;
	}

>  			#address-cells = <1>;
>  			#size-cells = <0>;
>  
> -			port@1 {
> +			ethernet-port@1 {

or "port@.*", or "port-sfp@a", for the same reason. Here and everywhere
in this device tree. Basically only the ethernet-phy rename seems safe.

>  				reg = <0x1>;
>  				label = "lan1";
>  				phy-handle = <&switch0phy1>;
>  			};
>  
> -			port@2 {
> +			ethernet-port@2 {
>  				reg = <0x2>;
>  				label = "lan2";
>  				phy-handle = <&switch0phy2>;
>  			};
>  
> -			port@3 {
> +			ethernet-port@3 {
>  				reg = <0x3>;
>  				label = "lan3";
>  				phy-handle = <&switch0phy3>;
>  			};
>  
> -			port@4 {
> +			ethernet-port@4 {
>  				reg = <0x4>;
>  				label = "lan4";
>  				phy-handle = <&switch0phy4>;
>  			};
>  
> -			port@5 {
> +			ethernet-port@5 {
>  				reg = <0x5>;
>  				label = "lan5";
>  				phy-handle = <&switch0phy5>;
>  			};
>  
> -			port@6 {
> +			ethernet-port@6 {
>  				reg = <0x6>;
>  				label = "lan6";
>  				phy-handle = <&switch0phy6>;
>  			};
>  
> -			port@7 {
> +			ethernet-port@7 {
>  				reg = <0x7>;
>  				label = "lan7";
>  				phy-handle = <&switch0phy7>;
>  			};
>  
> -			port@8 {
> +			ethernet-port@8 {
>  				reg = <0x8>;
>  				label = "lan8";
>  				phy-handle = <&switch0phy8>;
>  			};
>  
> -			port@9 {
> +			ethernet-port@9 {
>  				reg = <0x9>;
>  				label = "cpu";
>  				ethernet = <&eth1>;
> @@ -410,7 +415,7 @@ port@9 {
>  				managed = "in-band-status";
>  			};
>  
> -			switch0port10: port@a {
> +			switch0port10: ethernet-port@a {
>  				reg = <0xa>;
>  				label = "dsa";
>  				phy-mode = "2500base-x";
> @@ -430,7 +435,7 @@ port-sfp@a {
>  		};
>  	};
>  
> -	switch0@2 {
> +	ethernet-switch@2 {

It's funny that you add a comment TO NOT rename switch nodes, then you
proceed to do just that.

Having that said, we need to suppress these warnings for the Marvell
schema only:

arch/arm64/boot/dts/marvell/armada-3720-turris-mox.dtb: switch0@10: $nodename:0: 'switch0@10' does not match '^(ethernet-)?switch(@.*)?$'
        from schema $id: http://devicetree.org/schemas/net/dsa/marvell,mv88e6xxx.yaml#
arch/arm64/boot/dts/marvell/armada-3720-turris-mox.dtb: ethernet-switch@12: ethernet-ports: 'port-sfp@a' does not match any of the regexes: '^(ethernet-)?port@[0-9]+$', 'pinctrl-[0-9]+'
        from schema $id: http://devicetree.org/schemas/net/dsa/marvell,mv88e6xxx.yaml#

because someone _will_ fix them and break the boot in the process.

Rob, Krzysztof, Conor, do you have any suggestion on how to achieve that?

>  		compatible = "marvell,mv88e6085";
>  		reg = <0x2>;
>  		dsa,member = <0 0>;
> diff --git a/arch/arm64/boot/dts/marvell/armada-7040-mochabin.dts b/arch/arm64/boot/dts/marvell/armada-7040-mochabin.dts
> index 48202810bf78..40b7ee7ead72 100644
> --- a/arch/arm64/boot/dts/marvell/armada-7040-mochabin.dts
> +++ b/arch/arm64/boot/dts/marvell/armada-7040-mochabin.dts
> @@ -301,10 +301,8 @@ eth2phy: ethernet-phy@1 {
>  	};
>  
>  	/* 88E6141 Topaz switch */
> -	switch: switch@3 {
> +	switch: ethernet-switch@3 {
>  		compatible = "marvell,mv88e6085";
> -		#address-cells = <1>;
> -		#size-cells = <0>;
>  		reg = <3>;
>  
>  		pinctrl-names = "default";
> @@ -314,35 +312,35 @@ switch: switch@3 {
>  		interrupt-parent = <&cp0_gpio1>;
>  		interrupts = <1 IRQ_TYPE_LEVEL_LOW>;
>  
> -		ports {
> +		ethernet-ports {
>  			#address-cells = <1>;
>  			#size-cells = <0>;
>  
> -			swport1: port@1 {
> +			swport1: ethernet-port@1 {
>  				reg = <1>;
>  				label = "lan0";
>  				phy-handle = <&swphy1>;
>  			};
>  
> -			swport2: port@2 {
> +			swport2: ethernet-port@2 {
>  				reg = <2>;
>  				label = "lan1";
>  				phy-handle = <&swphy2>;
>  			};
>  
> -			swport3: port@3 {
> +			swport3: ethernet-port@3 {
>  				reg = <3>;
>  				label = "lan2";
>  				phy-handle = <&swphy3>;
>  			};
>  
> -			swport4: port@4 {
> +			swport4: ethernet-port@4 {
>  				reg = <4>;
>  				label = "lan3";
>  				phy-handle = <&swphy4>;
>  			};
>  
> -			port@5 {
> +			ethernet-port@5 {
>  				reg = <5>;
>  				label = "cpu";
>  				ethernet = <&cp0_eth1>;
> @@ -355,19 +353,19 @@ mdio {
>  			#address-cells = <1>;
>  			#size-cells = <0>;
>  
> -			swphy1: swphy1@17 {
> +			swphy1: ethernet-phy@17 {
>  				reg = <17>;
>  			};
>  
> -			swphy2: swphy2@18 {
> +			swphy2: ethernet-phy@18 {
>  				reg = <18>;
>  			};
>  
> -			swphy3: swphy3@19 {
> +			swphy3: ethernet-phy@19 {
>  				reg = <19>;
>  			};
>  
> -			swphy4: swphy4@20 {
> +			swphy4: ethernet-phy@20 {
>  				reg = <20>;
>  			};
>  		};

Robert, would you mind ACKing the MOCHAbin change?

> diff --git a/arch/arm64/boot/dts/marvell/armada-8040-clearfog-gt-8k.dts b/arch/arm64/boot/dts/marvell/armada-8040-clearfog-gt-8k.dts
> index 4125202028c8..67892f0d2863 100644
> --- a/arch/arm64/boot/dts/marvell/armada-8040-clearfog-gt-8k.dts
> +++ b/arch/arm64/boot/dts/marvell/armada-8040-clearfog-gt-8k.dts
> @@ -497,42 +497,42 @@ ge_phy: ethernet-phy@0 {
>  		reset-deassert-us = <10000>;
>  	};
>  
> -	switch0: switch0@4 {
> +	switch0: ethernet-switch@4 {
>  		compatible = "marvell,mv88e6085";
>  		reg = <4>;
>  		pinctrl-names = "default";
>  		pinctrl-0 = <&cp1_switch_reset_pins>;
>  		reset-gpios = <&cp1_gpio1 24 GPIO_ACTIVE_LOW>;
>  
> -		ports {
> +		ethernet-ports {
>  			#address-cells = <1>;
>  			#size-cells = <0>;
>  
> -			port@1 {
> +			ethernet-port@1 {
>  				reg = <1>;
>  				label = "lan2";
>  				phy-handle = <&switch0phy0>;
>  			};
>  
> -			port@2 {
> +			ethernet-port@2 {
>  				reg = <2>;
>  				label = "lan1";
>  				phy-handle = <&switch0phy1>;
>  			};
>  
> -			port@3 {
> +			ethernet-port@3 {
>  				reg = <3>;
>  				label = "lan4";
>  				phy-handle = <&switch0phy2>;
>  			};
>  
> -			port@4 {
> +			ethernet-port@4 {
>  				reg = <4>;
>  				label = "lan3";
>  				phy-handle = <&switch0phy3>;
>  			};
>  
> -			port@5 {
> +			ethernet-port@5 {
>  				reg = <5>;
>  				label = "cpu";
>  				ethernet = <&cp1_eth2>;
> @@ -545,19 +545,19 @@ mdio {
>  			#address-cells = <1>;
>  			#size-cells = <0>;
>  
> -			switch0phy0: switch0phy0@11 {
> +			switch0phy0: ethernet-phy@11 {
>  				reg = <0x11>;
>  			};
>  
> -			switch0phy1: switch0phy1@12 {
> +			switch0phy1: ethernet-phy@12 {
>  				reg = <0x12>;
>  			};
>  
> -			switch0phy2: switch0phy2@13 {
> +			switch0phy2: ethernet-phy@13 {
>  				reg = <0x13>;
>  			};
>  
> -			switch0phy3: switch0phy3@14 {
> +			switch0phy3: ethernet-phy@14 {
>  				reg = <0x14>;
>  			};
>  		};

Russell, could you please do the same for this device tree?

> diff --git a/arch/arm64/boot/dts/marvell/cn9130-crb.dtsi b/arch/arm64/boot/dts/marvell/cn9130-crb.dtsi
> index 32cfb3e2efc3..7538ed56053b 100644
> --- a/arch/arm64/boot/dts/marvell/cn9130-crb.dtsi
> +++ b/arch/arm64/boot/dts/marvell/cn9130-crb.dtsi
> @@ -207,11 +207,9 @@ phy0: ethernet-phy@0 {
>  		reg = <0>;
>  	};
>  
> -	switch6: switch0@6 {
> +	switch6: ethernet-switch@6 {
>  		/* Actual device is MV88E6393X */
>  		compatible = "marvell,mv88e6190";
> -		#address-cells = <1>;
> -		#size-cells = <0>;
>  		reg = <6>;
>  		interrupt-parent = <&cp0_gpio1>;
>  		interrupts = <28 IRQ_TYPE_LEVEL_LOW>;
> @@ -220,59 +218,59 @@ switch6: switch0@6 {
>  
>  		dsa,member = <0 0>;
>  
> -		ports {
> +		ethernet-ports {
>  			#address-cells = <1>;
>  			#size-cells = <0>;
>  
> -			port@1 {
> +			ethernet-port@1 {
>  				reg = <1>;
>  				label = "p1";
>  				phy-handle = <&switch0phy1>;
>  			};
>  
> -			port@2 {
> +			ethernet-port@2 {
>  				reg = <2>;
>  				label = "p2";
>  				phy-handle = <&switch0phy2>;
>  			};
>  
> -			port@3 {
> +			ethernet-port@3 {
>  				reg = <3>;
>  				label = "p3";
>  				phy-handle = <&switch0phy3>;
>  			};
>  
> -			port@4 {
> +			ethernet-port@4 {
>  				reg = <4>;
>  				label = "p4";
>  				phy-handle = <&switch0phy4>;
>  			};
>  
> -			port@5 {
> +			ethernet-port@5 {
>  				reg = <5>;
>  				label = "p5";
>  				phy-handle = <&switch0phy5>;
>  			};
>  
> -			port@6 {
> +			ethernet-port@6 {
>  				reg = <6>;
>  				label = "p6";
>  				phy-handle = <&switch0phy6>;
>  			};
>  
> -			port@7 {
> +			ethernet-port@7 {
>  				reg = <7>;
>  				label = "p7";
>  				phy-handle = <&switch0phy7>;
>  			};
>  
> -			port@8 {
> +			ethernet-port@8 {
>  				reg = <8>;
>  				label = "p8";
>  				phy-handle = <&switch0phy8>;
>  			};
>  
> -			port@9 {
> +			ethernet-port@9 {
>  				reg = <9>;
>  				label = "p9";
>  				phy-mode = "10gbase-r";
> @@ -280,7 +278,7 @@ port@9 {
>  				managed = "in-band-status";
>  			};
>  
> -			port@a {
> +			ethernet-port@a {
>  				reg = <10>;
>  				ethernet = <&cp0_eth0>;
>  				phy-mode = "10gbase-r";
> @@ -293,35 +291,35 @@ mdio {
>  			#address-cells = <1>;
>  			#size-cells = <0>;
>  
> -			switch0phy1: switch0phy1@1 {
> +			switch0phy1: ethernet-phy@1 {
>  				reg = <0x1>;
>  			};
>  
> -			switch0phy2: switch0phy2@2 {
> +			switch0phy2: ethernet-phy@2 {
>  				reg = <0x2>;
>  			};
>  
> -			switch0phy3: switch0phy3@3 {
> +			switch0phy3: ethernet-phy@3 {
>  				reg = <0x3>;
>  			};
>  
> -			switch0phy4: switch0phy4@4 {
> +			switch0phy4: ethernet-phy@4 {
>  				reg = <0x4>;
>  			};
>  
> -			switch0phy5: switch0phy5@5 {
> +			switch0phy5: ethernet-phy@5 {
>  				reg = <0x5>;
>  			};
>  
> -			switch0phy6: switch0phy6@6 {
> +			switch0phy6: ethernet-phy@6 {
>  				reg = <0x6>;
>  			};
>  
> -			switch0phy7: switch0phy7@7 {
> +			switch0phy7: ethernet-phy@7 {
>  				reg = <0x7>;
>  			};
>  
> -			switch0phy8: switch0phy8@8 {
> +			switch0phy8: ethernet-phy@8 {
>  				reg = <0x8>;
>  			};
>  		};

Chris, does this look okay?
Russell King (Oracle) Oct. 24, 2023, 7:03 p.m. UTC | #5
On Tue, Oct 24, 2023 at 09:28:42PM +0300, Vladimir Oltean wrote:
> U-Boot code does this, so you can't rename "ports":
> 
> 	/*
> 	 * now if there are more switches or a SFP module coming after,
> 	 * enable corresponding ports
> 	 */
> 	if (id < peridot + topaz - 1) {
> 		res = fdt_status_okay_by_pathf(blob,
> 					       "%s/switch%i@%x/ports/port@a",
> 					       mdio_path, id, addr);
> 	} else if (id == peridot - 1 && !topaz && sfp) {
> 		res = fdt_status_okay_by_pathf(blob,
> 					       "%s/switch%i@%x/ports/port-sfp@a",
> 					       mdio_path, id, addr);
> 	} else {
> 		res = 0;
> 	}

So that's now two platforms that do this. I think at this stage, we
have to regard these node paths as an ABI that we just can't change
without causing some breakage.

If we can't fix up all platforms, doesn't that make the YAML
conversion harder?

You've asked me to test the Clearfog GT-8k change - which is something
that won't happen for a while as I don't have the hardware to hand at
my current location, nor remotely.

What I can do is poke about in the u-boot sources I have for that
board and see# whether it's doing anything with those node paths. Off
the top of my# head, given what the board is, I think it's highly
unlikely though,# but I will check - possibly tomorrow.
Vladimir Oltean Oct. 24, 2023, 7:51 p.m. UTC | #6
On Tue, Oct 24, 2023 at 08:03:47PM +0100, Russell King (Oracle) wrote:
> On Tue, Oct 24, 2023 at 09:28:42PM +0300, Vladimir Oltean wrote:
> > U-Boot code does this, so you can't rename "ports":
> > 
> > 	/*
> > 	 * now if there are more switches or a SFP module coming after,
> > 	 * enable corresponding ports
> > 	 */
> > 	if (id < peridot + topaz - 1) {
> > 		res = fdt_status_okay_by_pathf(blob,
> > 					       "%s/switch%i@%x/ports/port@a",
> > 					       mdio_path, id, addr);
> > 	} else if (id == peridot - 1 && !topaz && sfp) {
> > 		res = fdt_status_okay_by_pathf(blob,
> > 					       "%s/switch%i@%x/ports/port-sfp@a",
> > 					       mdio_path, id, addr);
> > 	} else {
> > 		res = 0;
> > 	}
> 
> So that's now two platforms that do this. I think at this stage, we
> have to regard these node paths as an ABI that we just can't change
> without causing some breakage.

No, it's still the same as the one I pointed out on v4:
https://patchwork.kernel.org/project/netdevbpf/patch/20231018-marvell-88e6152-wan-led-v4-5-3ee0c67383be@linaro.org/

aka the Turris MOX. But it looks like my previous comment wasn't quite
clear, thus Linus' conversion still cleans up too much in this device
tree.

> If we can't fix up all platforms, doesn't that make the YAML
> conversion harder?

Well, I do see this as a valid concern that could potentially bite back,
yes. I did express that the schema should not emit warnings for
$nodename, but TBH I don't know how that constraint could be eliminated:
https://patchwork.kernel.org/project/netdevbpf/patch/20231018-marvell-88e6152-wan-led-v4-6-3ee0c67383be@linaro.org/

> You've asked me to test the Clearfog GT-8k change - which is something
> that won't happen for a while as I don't have the hardware to hand at
> my current location, nor remotely.
> 
> What I can do is poke about in the u-boot sources I have for that
> board and see# whether it's doing anything with those node paths. Off
> the top of my# head, given what the board is, I think it's highly
> unlikely though,# but I will check - possibly tomorrow.

Ok, if U-Boot is the only bootloader, I also looked through the upstream
board source files and only noticed any fixups for MOX. I don't know
what these boards ship with, and how far that is from mainline U-Boot.
Chris Packham Oct. 24, 2023, 8:10 p.m. UTC | #7
Hi All,

On 25/10/23 07:28, Vladimir Oltean wrote:
> Linus,
>
> On Tue, Oct 24, 2023 at 03:20:31PM +0200, Linus Walleij wrote:
>> Fix some errors in the Marvell MV88E6xxx switch descriptions:
>> - The top node had no address size or cells.
>> - switch0@0 is not OK, should be ethernet-switch@0.
>> - ports should be ethernet-ports
>> - port@0 should be ethernet-port@0
>> - PHYs should be named ethernet-phy@
>>
>> Reviewed-by: Andrew Lunn <andrew@lunn.ch>
>> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
<snip>
>> ---
>> diff --git a/arch/arm64/boot/dts/marvell/cn9130-crb.dtsi b/arch/arm64/boot/dts/marvell/cn9130-crb.dtsi
>> index 32cfb3e2efc3..7538ed56053b 100644
>> --- a/arch/arm64/boot/dts/marvell/cn9130-crb.dtsi
>> +++ b/arch/arm64/boot/dts/marvell/cn9130-crb.dtsi
>> @@ -207,11 +207,9 @@ phy0: ethernet-phy@0 {
>>   		reg = <0>;
>>   	};
>>   
>> -	switch6: switch0@6 {
>> +	switch6: ethernet-switch@6 {
>>   		/* Actual device is MV88E6393X */
>>   		compatible = "marvell,mv88e6190";
>> -		#address-cells = <1>;
>> -		#size-cells = <0>;
>>   		reg = <6>;
>>   		interrupt-parent = <&cp0_gpio1>;
>>   		interrupts = <28 IRQ_TYPE_LEVEL_LOW>;
>> @@ -220,59 +218,59 @@ switch6: switch0@6 {
>>   
>>   		dsa,member = <0 0>;
>>   
>> -		ports {
>> +		ethernet-ports {
>>   			#address-cells = <1>;
>>   			#size-cells = <0>;
>>   
>> -			port@1 {
>> +			ethernet-port@1 {
>>   				reg = <1>;
>>   				label = "p1";
>>   				phy-handle = <&switch0phy1>;
>>   			};
>>   
>> -			port@2 {
>> +			ethernet-port@2 {
>>   				reg = <2>;
>>   				label = "p2";
>>   				phy-handle = <&switch0phy2>;
>>   			};
>>   
>> -			port@3 {
>> +			ethernet-port@3 {
>>   				reg = <3>;
>>   				label = "p3";
>>   				phy-handle = <&switch0phy3>;
>>   			};
>>   
>> -			port@4 {
>> +			ethernet-port@4 {
>>   				reg = <4>;
>>   				label = "p4";
>>   				phy-handle = <&switch0phy4>;
>>   			};
>>   
>> -			port@5 {
>> +			ethernet-port@5 {
>>   				reg = <5>;
>>   				label = "p5";
>>   				phy-handle = <&switch0phy5>;
>>   			};
>>   
>> -			port@6 {
>> +			ethernet-port@6 {
>>   				reg = <6>;
>>   				label = "p6";
>>   				phy-handle = <&switch0phy6>;
>>   			};
>>   
>> -			port@7 {
>> +			ethernet-port@7 {
>>   				reg = <7>;
>>   				label = "p7";
>>   				phy-handle = <&switch0phy7>;
>>   			};
>>   
>> -			port@8 {
>> +			ethernet-port@8 {
>>   				reg = <8>;
>>   				label = "p8";
>>   				phy-handle = <&switch0phy8>;
>>   			};
>>   
>> -			port@9 {
>> +			ethernet-port@9 {
>>   				reg = <9>;
>>   				label = "p9";
>>   				phy-mode = "10gbase-r";
>> @@ -280,7 +278,7 @@ port@9 {
>>   				managed = "in-band-status";
>>   			};
>>   
>> -			port@a {
>> +			ethernet-port@a {
>>   				reg = <10>;
>>   				ethernet = <&cp0_eth0>;
>>   				phy-mode = "10gbase-r";
>> @@ -293,35 +291,35 @@ mdio {
>>   			#address-cells = <1>;
>>   			#size-cells = <0>;
>>   
>> -			switch0phy1: switch0phy1@1 {
>> +			switch0phy1: ethernet-phy@1 {
>>   				reg = <0x1>;
>>   			};
>>   
>> -			switch0phy2: switch0phy2@2 {
>> +			switch0phy2: ethernet-phy@2 {
>>   				reg = <0x2>;
>>   			};
>>   
>> -			switch0phy3: switch0phy3@3 {
>> +			switch0phy3: ethernet-phy@3 {
>>   				reg = <0x3>;
>>   			};
>>   
>> -			switch0phy4: switch0phy4@4 {
>> +			switch0phy4: ethernet-phy@4 {
>>   				reg = <0x4>;
>>   			};
>>   
>> -			switch0phy5: switch0phy5@5 {
>> +			switch0phy5: ethernet-phy@5 {
>>   				reg = <0x5>;
>>   			};
>>   
>> -			switch0phy6: switch0phy6@6 {
>> +			switch0phy6: ethernet-phy@6 {
>>   				reg = <0x6>;
>>   			};
>>   
>> -			switch0phy7: switch0phy7@7 {
>> +			switch0phy7: ethernet-phy@7 {
>>   				reg = <0x7>;
>>   			};
>>   
>> -			switch0phy8: switch0phy8@8 {
>> +			switch0phy8: ethernet-phy@8 {
>>   				reg = <0x8>;
>>   			};
>>   		};
> Chris, does this look okay?

There's nothing in the u-boot code for the CN9130-CRB that cares about 
the switch so I don't think there's any issue ABI wise. We are working 
on our own CN9130 based router with a L2 switch but it's at a point we 
can follow whatever upstream decide is the final schema.

In terms of my personal preference the schema quoted up thread has the 
pattern  '^(ethernet-)?switch(@.*)?$' (i.e. the 'ethernet-' part is 
optional) so I'd personally prefer switch0@6 -> switch@6 but that's only 
a slight preference because I deal with Ethernet switches day in day out.
Vladimir Oltean Oct. 24, 2023, 8:20 p.m. UTC | #8
Hello Chris,

On Tue, Oct 24, 2023 at 08:10:14PM +0000, Chris Packham wrote:
> > Chris, does this look okay?
> 
> There's nothing in the u-boot code for the CN9130-CRB that cares about 
> the switch so I don't think there's any issue ABI wise. We are working 
> on our own CN9130 based router with a L2 switch but it's at a point we 
> can follow whatever upstream decide is the final schema.

Thank you for taking the time to confirm.

> In terms of my personal preference the schema quoted up thread has the 
> pattern  '^(ethernet-)?switch(@.*)?$' (i.e. the 'ethernet-' part is 
> optional) so I'd personally prefer switch0@6 -> switch@6 but that's only 
> a slight preference because I deal with Ethernet switches day in day out.

The movement originally came from "ports" to "ethernet-ports" at Rob's
suggestion, because of the name clash with the ports from graph.yaml.
Then we also did "switch" -> "ethernet-switch" because you'll also find
"pcie-switch" in mainline device trees.
patchwork-bot+netdevbpf@kernel.org Oct. 25, 2023, 9:30 a.m. UTC | #9
Hello:

This series was applied to netdev/net-next.git (main)
by David S. Miller <davem@davemloft.net>:

On Tue, 24 Oct 2023 15:20:26 +0200 you wrote:
> The Marvell switches are lacking DT bindings.
> 
> I need proper schema checking to add LED support to the
> Marvell switch. Just how it is, it can't go on like this.
> 
> Some Device Tree fixes are included in the series, these
> remove the major and most annoying warnings fallout noise:
> some warnings remain, and these are of more serious nature,
> such as missing phy-mode. They can be applied individually,
> or to the networking tree with the rest of the patches.
> 
> [...]

Here is the summary with links:
  - [net-next,v7,1/7] dt-bindings: net: dsa: Require ports or ethernet-ports
    https://git.kernel.org/netdev/net-next/c/b5ef61718ad7
  - [net-next,v7,2/7] dt-bindings: net: mvusb: Fix up DSA example
    https://git.kernel.org/netdev/net-next/c/ddae07ce9bb3
  - [net-next,v7,3/7] ARM: dts: marvell: Fix some common switch mistakes
    https://git.kernel.org/netdev/net-next/c/2b83557a588f
  - [net-next,v7,4/7] ARM: dts: nxp: Fix some common switch mistakes
    https://git.kernel.org/netdev/net-next/c/bfedd8423643
  - [net-next,v7,5/7] ARM64: dts: marvell: Fix some common switch mistakes
    https://git.kernel.org/netdev/net-next/c/605a5f5d406d
  - [net-next,v7,6/7] dt-bindings: marvell: Rewrite MV88E6xxx in schema
    https://git.kernel.org/netdev/net-next/c/0f35369b4efe
  - [net-next,v7,7/7] dt-bindings: marvell: Add Marvell MV88E6060 DSA schema
    https://git.kernel.org/netdev/net-next/c/53313ed25ba8

You are awesome, thank you!
Vladimir Oltean Oct. 25, 2023, 9:36 a.m. UTC | #10
Hi Dave,

On Wed, Oct 25, 2023 at 09:30:27AM +0000, patchwork-bot+netdevbpf@kernel.org wrote:
> Hello:
> 
> This series was applied to netdev/net-next.git (main)
> by David S. Miller <davem@davemloft.net>:
> 
> On Tue, 24 Oct 2023 15:20:26 +0200 you wrote:
> > The Marvell switches are lacking DT bindings.
> > 
> > I need proper schema checking to add LED support to the
> > Marvell switch. Just how it is, it can't go on like this.
> > 
> > Some Device Tree fixes are included in the series, these
> > remove the major and most annoying warnings fallout noise:
> > some warnings remain, and these are of more serious nature,
> > such as missing phy-mode. They can be applied individually,
> > or to the networking tree with the rest of the patches.
> > 
> > [...]

Can you please revert this series? It breaks the boot on the Turris MOX
board.
Jakub Kicinski Oct. 25, 2023, 2:29 p.m. UTC | #11
On Wed, 25 Oct 2023 12:36:32 +0300 Vladimir Oltean wrote:
> Can you please revert this series? It breaks the boot on the Turris MOX
> board.

Done!
Linus Walleij Oct. 25, 2023, 7:48 p.m. UTC | #12
Hi Vladimir,

thanks for paging in the right maintainers to look at the respective boards,
much appreciated!

On Tue, Oct 24, 2023 at 8:28 PM Vladimir Oltean <olteanv@gmail.com> wrote:

> I looked at U-Boot's ft_board_setup() from board/Marvell/mvebu_armada-37xx/board.c
> and it doesn't appear to do anything with the switch. But after the MOX precedent
> (which is _still_ problematic, more below), I still think we are way too
> trigger-happy with this, and it would be good to ask someone who has the
> Espressobin to test.

Yeah that would be great.

> > -     /* switch nodes are enabled by U-Boot if modules are present */
> > +     /*
> > +      * NOTE: switch nodes are enabled by U-Boot if modules are present
> > +      * DO NOT change this node name (switch0@10) even if it is not following
> > +      * conventions! Deployed U-Boot binaries are explicitly looking for
> > +      * this node in order to augment the device tree!
> > +      */
>
> Not "this node", but all switch nodes!
(...)
> It's funny that you add a comment TO NOT rename switch nodes, then you
> proceed to do just that.

Yeah it's a stupid mistake on my behalf. :( too sleepy or something.

I fixed it up, and put a small comment above each of them not
to change the node name.

> > -             ports {
> > +             ethernet-ports {
>
> U-Boot code does this, so you can't rename "ports":
>
>         /*
>          * now if there are more switches or a SFP module coming after,
>          * enable corresponding ports
>          */
>         if (id < peridot + topaz - 1) {
>                 res = fdt_status_okay_by_pathf(blob,
>                                                "%s/switch%i@%x/ports/port@a",
>                                                mdio_path, id, addr);
>         } else if (id == peridot - 1 && !topaz && sfp) {
>                 res = fdt_status_okay_by_pathf(blob,
>                                                "%s/switch%i@%x/ports/port-sfp@a",
>                                                mdio_path, id, addr);
>         } else {
>                 res = 0;
>         }
>
> >                       #address-cells = <1>;
> >                       #size-cells = <0>;
> >
> > -                     port@1 {
> > +                     ethernet-port@1 {
>
> or "port@.*", or "port-sfp@a", for the same reason. Here and everywhere
> in this device tree. Basically only the ethernet-phy rename seems safe.

Fair, reverted it all.

> Having that said, we need to suppress these warnings for the Marvell
> schema only:
>
> arch/arm64/boot/dts/marvell/armada-3720-turris-mox.dtb: switch0@10: $nodename:0: 'switch0@10' does not match '^(ethernet-)?switch(@.*)?$'
>         from schema $id: http://devicetree.org/schemas/net/dsa/marvell,mv88e6xxx.yaml#
> arch/arm64/boot/dts/marvell/armada-3720-turris-mox.dtb: ethernet-switch@12: ethernet-ports: 'port-sfp@a' does not match any of the regexes: '^(ethernet-)?port@[0-9]+$', 'pinctrl-[0-9]+'
>         from schema $id: http://devicetree.org/schemas/net/dsa/marvell,mv88e6xxx.yaml#
>
> because someone _will_ fix them and break the boot in the process.

Really? I think you will stop them from doing that every single time ;)

Jokes aside, we certainly need a way to suppress this warning.

> Rob, Krzysztof, Conor, do you have any suggestion on how to achieve that?

What we can do easily is to override the $nodename requirement for
a certain compatible with one of those - if: constructions, but that would
unfortunately make us be lax on every other board as well.

What we want to achieve is:

1. Match on the top level compatible (under '/') with contains: const:
cznic,turris-mox

2. Then relax requirements on the switch nodes if that is true.

I assume I would have to go into
Documentation/devicetree/bindings/arm/marvell/armada-7k-8k.yaml
and put hard requirement on node names from there. I'm not sure
this would work or that it's even possible, or desireable.

But...

We  *COULD* add a second over-specified compatible to the switch
node. Such as:

      switch0@10 {
                compatible = "marvell,turris-mox-mv88e6190-switch",
"marvell,mv88e6190";

(and the same for the 6085 version)

And use that to relax the requirement for that variant with an - if:
statemement.

This should work fine since U-Boot is only looking for nodenames, not
compatible strings. I think I will try this approach.

Yours,
Linus Walleij
Linus Walleij Oct. 25, 2023, 7:52 p.m. UTC | #13
On Tue, Oct 24, 2023 at 9:03 PM Russell King (Oracle)
<linux@armlinux.org.uk> wrote:

> If we can't fix up all platforms, doesn't that make the YAML
> conversion harder?

It does. I'm scouting some possible routes. I'm leaning toward
introducing extra compatibles to use as markers for special node
name rules.

> You've asked me to test the Clearfog GT-8k change - which is something
> that won't happen for a while as I don't have the hardware to hand at
> my current location, nor remotely.

No hurry. These bindings have been sitting unconverted for some time
and all driving it now is my need for formalization and that can wait.

> What I can do is poke about in the u-boot sources I have for that
> board and see# whether it's doing anything with those node paths. Off
> the top of my# head, given what the board is, I think it's highly
> unlikely though,# but I will check - possibly tomorrow.

Thanks Russell, much appreciated!

Yours,
Linus Walleij
Linus Walleij Oct. 25, 2023, 8:56 p.m. UTC | #14
On Wed, Oct 25, 2023 at 9:48 PM Linus Walleij <linus.walleij@linaro.org> wrote:

> We  *COULD* add a second over-specified compatible to the switch
> node. Such as:
>
>       switch0@10 {
>                 compatible = "marvell,turris-mox-mv88e6190-switch",
> "marvell,mv88e6190";
>
> (and the same for the 6085 version)
>
> And use that to relax the requirement for that variant with an - if:
> statemement.
>
> This should work fine since U-Boot is only looking for nodenames, not
> compatible strings. I think I will try this approach.

This works. Compatibles added like such to the turris-mox nodes:

        switch0@10 {
-               compatible = "marvell,mv88e6190";
+               compatible = "marvell,turris-mox-mv88e6190",
"marvell,mv88e6190";

The mv88e6xxx schema will look like so:

 properties:
   compatible:
+    oneOf:
+      - enum:
+          - marvell,mv88e6085
+          - marvell,mv88e6190
+          - marvell,mv88e6250
(...)
+      - items:
+          - const: marvell,turris-mox-mv88e6085
+          - const: marvell,mv88e6085
+      - items:
+          - const: marvell,turris-mox-mv88e6190
+          - const: marvell,mv88e6190

Then ethernet-switch.yaml gets this:

-properties:
-  $nodename:
-    pattern: "^(ethernet-)?switch(@.*)?$"
+allOf:
+  # This condition is here to satisfy the case where certain device
+  # nodes have to preserve non-standard names because of
+  # backward-compatibility with boot loaders inspecting certain
+  # node names.
+  - if:
+      properties:
+        compatible:
+          contains:
+            enum:
+              - marvell,turris-mox-mv88e6085
+              - marvell,turris-mox-mv88e6190
+    then:
+      properties:
+        $nodename:
+          pattern: "switch[0-3]@[0-3]+$"
+    else:
+      properties:
+        $nodename:
+          pattern: "^(ethernet-)?switch(@.*)?$"

This latter thing is maybe not so nice for everyone to process.

The alternative is however to copy all of dsa.yaml, dsa-port.yaml and
ethernet-port.yaml (maybe more) into the Marvell binding. Which I can do,
of course. (qca8k is already deviant).

Unless there is a better way.

Yours,
Linus Walleij
Andrew Lunn Oct. 25, 2023, 9:21 p.m. UTC | #15
> The mv88e6xxx schema will look like so:
> 
>  properties:
>    compatible:
> +    oneOf:
> +      - enum:
> +          - marvell,mv88e6085
> +          - marvell,mv88e6190
> +          - marvell,mv88e6250
> (...)
> +      - items:
> +          - const: marvell,turris-mox-mv88e6085
> +          - const: marvell,mv88e6085
> +      - items:
> +          - const: marvell,turris-mox-mv88e6190
> +          - const: marvell,mv88e6190

Lets see what the DT Maintainers think of this. But if we do go this
way, i would like to see a comment here with an explanation. What we
don't want is developers thinking they should add new compatibles for
whatever board they are adding.

	 Andrew