Subject: Re: [PATCH v5 net-next 1/2] dt-bindings: net: airoha: Add EN7581 ethernet controller

From: Lorenzo Bianconi <[email-masked]>
Date: Mon, 8 Jul 2024 23:10:59 +0200

> On Mon, Jul 8, 2024 at 11:03 AM Lorenzo Bianconi <[email-masked]> wrote:
> >
> > > On Thu, Jul 04, 2024 at 10:08:10AM +0200, Lorenzo Bianconi wrote:
> > > > Introduce device-tree binding documentation for Airoha EN7581 ethernet
> > > > mac controller.
> > > >
> > > > Signed-off-by: Lorenzo Bianconi <[email-masked]>
> > > > ---
> > > >  .../bindings/net/airoha,en7581-eth.yaml       | 146 ++++++++++++++++++
> > > >  1 file changed, 146 insertions(+)
> > > >  create mode 100644 Documentation/devicetree/bindings/net/airoha,en7581-eth.yaml
> > > >
> > > > diff --git a/Documentation/devicetree/bindings/net/airoha,en7581-eth.yaml b/Documentation/devicetree/bindings/net/airoha,en7581-eth.yaml
> > > > new file mode 100644
> > > > index 000000000000..f4b1f8afddd0
> > > > --- /dev/null
> > > > +++ b/Documentation/devicetree/bindings/net/airoha,en7581-eth.yaml
> > > > @@ -0,0 +1,146 @@
> > > > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> > > > +%YAML 1.2
> > > > +---
> > > > +$id: http://devicetree.org/schemas/net/airoha,en7581-eth.yaml#
> > > > +$schema: http://devicetree.org/meta-schemas/core.yaml#
> > > > +
> > > > +title: Airoha EN7581 Frame Engine Ethernet controller
> > > > +
> > > > +allOf:
> > > > +  - $ref: ethernet-controller.yaml#
> > >
> > > Again, to rephrase, what are you using from this binding? It does not
> > > make sense for the parent and child both to use it.
> >
> > Below I reported the ethernet dts node I am using (I have not posted the dts
> > changes yet):
> 
> What happens when you remove this $ref? Nothing, because you use 0
> properties from it. If none of the properties apply, then don't
> reference it. It is that simple.

if I get rid of "$ref: ethernet-controller.yaml#" here I get the following error using
en7581-evb.dts (not posted upstream yet):

$make CHECK_DTBS=y DT_SCHEMA_FILES=airoha airoha/en7581-evb.dtb
  UPD     include/config/kernel.release
  DTC_CHK arch/arm64/boot/dts/airoha/en7581-evb.dtb
  /home/lorenzo/workspace/linux-mediatek/arch/arm64/boot/dts/airoha/en7581-evb.dtb: ethernet@1fb50000: mac@1: Unevaluated properties are not allowed ('fixed-link', 'phy-mode' were unexpected)
  from schema $id: http://devicetree.org/schemas/net/airoha,en7581-eth.yaml#

> 
> >
> > eth0: ethernet@1fb50000 {
> >         compatible = "airoha,en7581-eth";
> >         reg = <0 0x1fb50000 0 0x2600>,
> >               <0 0x1fb54000 0 0x2000>,
> >               <0 0x1fb56000 0 0x2000>;
> >         reg-names = "fe", "qdma0", "qdma1";
> >
> >         resets = <&scuclk EN7581_FE_RST>,
> >                  <&scuclk EN7581_FE_PDMA_RST>,
> >                  <&scuclk EN7581_FE_QDMA_RST>,
> >                  <&scuclk EN7581_XSI_MAC_RST>,
> >                  <&scuclk EN7581_DUAL_HSI0_MAC_RST>,
> >                  <&scuclk EN7581_DUAL_HSI1_MAC_RST>,
> >                  <&scuclk EN7581_HSI_MAC_RST>,
> >                  <&scuclk EN7581_XFP_MAC_RST>;
> >         reset-names = "fe", "pdma", "qdma", "xsi-mac",
> >                       "hsi0-mac", "hsi1-mac", "hsi-mac",
> >                       "xfp-mac";
> >
> >         interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>,
> >                      <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>,
> >                      <GIC_SPI 56 IRQ_TYPE_LEVEL_HIGH>,
> >                      <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>,
> >                      <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>,
> >                      <GIC_SPI 58 IRQ_TYPE_LEVEL_HIGH>,
> >                      <GIC_SPI 59 IRQ_TYPE_LEVEL_HIGH>,
> >                      <GIC_SPI 60 IRQ_TYPE_LEVEL_HIGH>,
> >                      <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>,
> >                      <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>;
> >
> >         status = "disabled";
> >
> >         #address-cells = <1>;
> >         #size-cells = <0>;
> >
> >         gdm1: mac@1 {
> >                 compatible = "airoha,eth-mac";
> >                 reg = <1>;
> >                 phy-mode = "internal";
> >                 status = "disabled";
> >
> >                 fixed-link {
> >                         speed = <1000>;
> >                         full-duplex;
> >                         pause;
> >                 };
> >         };
> > };
> >
> > I am using phy related binding for gdm1:mac@1 node.
> 
> Right, so you should reference ethernet-controller.yaml for the mac
> node because you use properties from the schema.

ack. So, IIUC what you mean here, I need to get rid of "$ref: ethernet-controller.yaml#"
in the parent node and just use in the mac node. Correct?

> 
> > gdm1 is the GMAC port used
> > as cpu port by the mt7530 dsa switch
> 
> That has nothing to do with *this* binding...
> 
> >
> > switch: switch@1fb58000 {
> >         compatible = "airoha,en7581-switch";
> >         reg = <0 0x1fb58000 0 0x8000>;
> >         resets = <&scuclk EN7581_GSW_RST>;
> >
> >         interrupt-controller;
> >         #interrupt-cells = <1>;
> >         interrupt-parent = <&gic>;
> >         interrupts = <GIC_SPI 209 IRQ_TYPE_LEVEL_HIGH>;
> >
> >         status = "disabled";
> >
> >         #address-cells = <1>;
> >         #size-cells = <1>;
> >
> >         ports {
> >                 #address-cells = <1>;
> >                 #size-cells = <0>;
> >
> >                 gsw_port1: port@1 {
> >                         reg = <1>;
> >                         label = "lan1";
> >                         phy-mode = "internal";
> >                         phy-handle = <&gsw_phy1>;
> >                 };
> >
> >                 gsw_port2: port@2 {
> >                         reg = <2>;
> >                         label = "lan2";
> >                         phy-mode = "internal";
> >                         phy-handle = <&gsw_phy2>;
> >                 };
> >
> >                 gsw_port3: port@3 {
> >                         reg = <3>;
> >                         label = "lan3";
> >                         phy-mode = "internal";
> >                         phy-handle = <&gsw_phy3>;
> >                 };
> >
> >                 gsw_port4: port@4 {
> >                         reg = <4>;
> >                         label = "lan4";
> >                         phy-mode = "internal";
> >                         phy-handle = <&gsw_phy4>;
> >                 };
> >
> >                 port@6 {
> >                         reg = <6>;
> >                         label = "cpu";
> >                         ethernet = <&gdm1>;
> >                         phy-mode = "internal";
> >
> >                         fixed-link {
> >                                 speed = <1000>;
> >                                 full-duplex;
> >                                 pause;
> >                         };
> >                 };
> >         };
> >
> >         mdio {
> >                 #address-cells = <1>;
> >                 #size-cells = <0>;
> >
> >                 gsw_phy1: ethernet-phy@1 {
> >                         compatible = "ethernet-phy-ieee802.3-c22";
> >                         reg = <9>;
> >                         phy-mode = "internal";
> >                 };
> >
> >                 gsw_phy2: ethernet-phy@2 {
> >                         compatible = "ethernet-phy-ieee802.3-c22";
> >                         reg = <10>;
> >                         phy-mode = "internal";
> >                 };
> >
> >                 gsw_phy3: ethernet-phy@3 {
> >                         compatible = "ethernet-phy-ieee802.3-c22";
> >                         reg = <11>;
> >                         phy-mode = "internal";
> >                 };
> >
> >                 gsw_phy4: ethernet-phy@4 {
> >                         compatible = "ethernet-phy-ieee802.3-c22";
> >                         reg = <12>;
> >                         phy-mode = "internal";
> >                 };
> >         };
> > };
> 
> None of this is relevant.
> 
> > > > +patternProperties:
> > > > +  "^mac@[1-4]$":
> > >
> > > 'ethernet' is the defined node name for users of
> > > ethernet-controller.yaml.
> >
> > Looking at the dts above, ethernet is already used by the parent node.
> 
> So? Not really any reason a node named foo can't have a child named foo, too.

ack, fine. I will fix it in the next revision.

> 
> An 'ethernet' node should implement an ethernet interface. It is the
> child nodes that implement the ethernet interface(s). Whether you use
> 'ethernet' on the parent or not, I don't care too much.

ack, I will use "$ref: ethernet-controller.yaml#" just for the child in this case.

Regards,
Lorenzo

> 
> > This approach has been already used here [0],[1],[2]. Is it fine to reuse it?
> 
> That one appears to be wrong too with the parent referencing
> ethernet-controller.yaml.
> 
> Rob
> 
> > Regards,
> > Lorenzo
> >
> > [0] https://github.com/torvalds/linux/blob/master/arch/arm64/boot/dts/mediatek/mt7622.dtsi#L964
> > [1] https://github.com/torvalds/linux/blob/master/arch/arm64/boot/dts/mediatek/mt7622-bananapi-bpi-r64.dts#L136
> > [2] https://github.com/torvalds/linux/blob/master/Documentation/devicetree/bindings/net/mediatek%2Cnet.yaml#L370