diff mbox series

[net-next,v4] dt-bindings: dsa: Add lan9303 yaml

Message ID 20221003164624.4823-1-jerry.ray@microchip.com
State New
Headers show
Series [net-next,v4] dt-bindings: dsa: Add lan9303 yaml | expand

Commit Message

Jerry Ray Oct. 3, 2022, 4:46 p.m. UTC
Adding the dt binding yaml for the lan9303 3-port ethernet switch.
The microchip lan9354 3-port ethernet switch will also use the
same binding.

Signed-off-by: Jerry Ray <jerry.ray@microchip.com>
---
v3->v4:
 - Addressed v3 community feedback
v2->v3:
 - removed cpu labels
 - now patching against latest net-next
v1->v2:
 - fixed dt_binding_check warning
 - added max-speed setting on the switches 10/100 ports.
---
 .../devicetree/bindings/net/dsa/lan9303.txt   | 100 -------------
 .../bindings/net/dsa/microchip,lan9303.yaml   | 134 ++++++++++++++++++
 MAINTAINERS                                   |   8 ++
 3 files changed, 142 insertions(+), 100 deletions(-)
 delete mode 100644 Documentation/devicetree/bindings/net/dsa/lan9303.txt
 create mode 100644 Documentation/devicetree/bindings/net/dsa/microchip,lan9303.yaml

Comments

Vladimir Oltean Oct. 8, 2022, 10:56 p.m. UTC | #1
On Mon, Oct 03, 2022 at 11:46:24AM -0500, Jerry Ray wrote:
> ---
> v3->v4:
>  - Addressed v3 community feedback

More specifically?

> +examples:
> +  - |
> +    #include <dt-bindings/gpio/gpio.h>
> +
> +    // Ethernet switch connected via mdio to the host
> +    ethernet {
> +        #address-cells = <1>;
> +        #size-cells = <0>;
> +        phy-handle = <&lan9303switch>;
> +        phy-mode = "rmii";
> +        fixed-link {
> +            speed = <100>;
> +            full-duplex;
> +        };

I see the phy-handle to the switch is inherited from the .txt dt-binding,
but I don't understand it. The switch is an mdio_device, not a phy_device,
so what will this do?

Also, any reasonable host driver will error out if it finds a phy-handle
and a fixed-link in its OF node. So one of phy-handle or fixed-link must
be dropped, they are bogus.

Even better, just stick to the mdio node as root and drop the DSA master
OF node, like other DSA dt-binding examples do. You can have dangling
phandles, so "ethernet = <&ethernet>" below is not an issue.

> +        mdio {
> +            #address-cells = <1>;
> +            #size-cells = <0>;
> +            lan9303switch: switch@0 {
> +                compatible = "smsc,lan9303-mdio";
> +                reg = <0>;
> +                dsa,member = <0 0>;

Redundant, please remove.

> +                ethernet-ports {
> +                    #address-cells = <1>;
> +                    #size-cells = <0>;
> +                        port@0 {
> +                            reg = <0>;
> +                            phy-mode = "rmii";

FWIW, RMII has a MAC mode and a PHY mode. Two RMII interfaces connected
in MAC mode to one another don't work. You'll have problems if you also
have an RMII PHY connected to one of the xMII ports, and you describe
phy-mode = "rmii" for both. There exists a "rev-rmii" phy-mode to denote
an RMII interface working in PHY mode. Wonder if you should be using
that here.

> +                            ethernet = <&ethernet>;
> +                            fixed-link {
> +                                speed = <100>;
> +                                full-duplex;
> +                            };
> +                        };
> +                        port@1 {
> +                            reg = <1>;
> +                            max-speed = <100>;
> +                            label = "lan1";
> +                        };
> +                        port@2 {
> +                            reg = <2>;
> +                            max-speed = <100>;
> +                            label = "lan2";
> +                        };
> +                    };
> +                };
> +            };
> +        };
> +
> +  - |
> +    #include <dt-bindings/gpio/gpio.h>
> +
> +    // Ethernet switch connected via i2c to the host
> +    ethernet {
> +        #address-cells = <1>;
> +        #size-cells = <0>;
> +        phy-mode = "rmii";
> +            speed = <100>;
> +        fixed-link {
> +            full-duplex;
> +        };
> +    };

No need for this node.

> +
> +    i2c {
> +        #address-cells = <1>;
> +        #size-cells = <0>;
> +        lan9303: switch@1a {
> +            compatible = "smsc,lan9303-i2c";
> +            reg = <0x1a>;
> +            ethernet-ports {
> +                #address-cells = <1>;
> +                #size-cells = <0>;
> +                port@0 {
> +                    reg = <0>;
> +                    phy-mode = "rmii";
> +                    ethernet = <&ethernet>;
> +                    fixed-link {
> +                        speed = <100>;
> +                        full-duplex;
> +                    };
> +                };
> +                port@1 {
> +                    reg = <1>;
> +                    max-speed = <100>;
> +                    label = "lan1";
> +                };
> +                port@2 {
> +                    reg = <2>;
> +                    max-speed = <100>;
> +                    label = "lan2";
> +                };
> +            };
> +        };
> +    };
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 5d58b55c5ae5..89055ff2838a 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -13386,6 +13386,14 @@ L:	netdev@vger.kernel.org
>  S:	Maintained
>  F:	drivers/net/ethernet/microchip/lan743x_*
>  
> +MICROCHIP LAN9303/LAN9354 ETHERNET SWITCH DRIVER
> +M:	Jerry Ray <jerry.ray@microchip.com>
> +M:	UNGLinuxDriver@microchip.com
> +L:	netdev@vger.kernel.org
> +S:	Maintained
> +F:	Documentation/devicetree/bindings/net/dsa/microchip,lan9303.yaml
> +F:	drivers/net/dsa/lan9303*
> +

Separate patch please? Changes to the MAINTAINERS file get applied to
the "net" tree.

>  MICROCHIP LAN966X ETHERNET DRIVER
>  M:	Horatiu Vultur <horatiu.vultur@microchip.com>
>  M:	UNGLinuxDriver@microchip.com
> -- 
> 2.25.1
>
Krzysztof Kozlowski Oct. 9, 2022, 3:20 p.m. UTC | #2
On 09/10/2022 00:56, Vladimir Oltean wrote:
>>  
>> +MICROCHIP LAN9303/LAN9354 ETHERNET SWITCH DRIVER
>> +M:	Jerry Ray <jerry.ray@microchip.com>
>> +M:	UNGLinuxDriver@microchip.com
>> +L:	netdev@vger.kernel.org
>> +S:	Maintained
>> +F:	Documentation/devicetree/bindings/net/dsa/microchip,lan9303.yaml
>> +F:	drivers/net/dsa/lan9303*
>> +
> 
> Separate patch please? Changes to the MAINTAINERS file get applied to
> the "net" tree.

This will also go via net tree, so there is no real need to split it.

Best regards,
Krzysztof
Vladimir Oltean Oct. 9, 2022, 10:22 p.m. UTC | #3
On Sun, Oct 09, 2022 at 05:20:03PM +0200, Krzysztof Kozlowski wrote:
> On 09/10/2022 00:56, Vladimir Oltean wrote:
> >>  
> >> +MICROCHIP LAN9303/LAN9354 ETHERNET SWITCH DRIVER
> >> +M:	Jerry Ray <jerry.ray@microchip.com>
> >> +M:	UNGLinuxDriver@microchip.com
> >> +L:	netdev@vger.kernel.org
> >> +S:	Maintained
> >> +F:	Documentation/devicetree/bindings/net/dsa/microchip,lan9303.yaml
> >> +F:	drivers/net/dsa/lan9303*
> >> +
> > 
> > Separate patch please? Changes to the MAINTAINERS file get applied to
> > the "net" tree.
> 
> This will also go via net tree, so there is no real need to split it.

I meant exactly what I wrote, "net" tree as in the networking tree where
fixes to the current master branch are sent:
https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git, or in
other words, not net-next.git where new features are sent:
https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git
Jerry Ray Oct. 17, 2022, 6:51 p.m. UTC | #4
>> On 09/10/2022 18:22, Vladimir Oltean wrote:
>> > On Sun, Oct 09, 2022 at 05:20:03PM +0200, Krzysztof Kozlowski wrote:
>> >> On 09/10/2022 00:56, Vladimir Oltean wrote:
>> >>>>
>> >>>> +MICROCHIP LAN9303/LAN9354 ETHERNET SWITCH DRIVER
>> >>>> +M:      Jerry Ray <jerry.ray@microchip.com>
>> >>>> +M:      UNGLinuxDriver@microchip.com
>> >>>> +L:      netdev@vger.kernel.org
>> >>>> +S:      Maintained
>> >>>> +F:      Documentation/devicetree/bindings/net/dsa/microchip,lan9303.yaml
>> >>>> +F:      drivers/net/dsa/lan9303*
>> >>>> +
>> >>>
>> >>> Separate patch please? Changes to the MAINTAINERS file get applied to
>> >>> the "net" tree.
>> >>
>> >> This will also go via net tree, so there is no real need to split it.
>> >
>> > I meant exactly what I wrote, "net" tree as in the networking tree where
>> > fixes to the current master branch are sent:
>> > https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git, or in
>> > other words, not net-next.git where new features are sent:
>> > https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git
>>
>> Ah, but how it can go to fixes? It has invalid path (in the context of
>> net-fixes) and it is not related to anything in the current cycle.
>
>Personally I'd split the patch into 2 pieces, the MAINTAINERS entry for
>the drivers/net/dsa/lan9303* portion, plus the current .txt schema,
>which goes to "net" right away, wait until the net tree gets merged back
>into net-next (happens when submissions for net-next reopen), then add
>the dt-bindings and rename the .txt schema from MAINTAINERS to .yaml.
>

If this patch should be flagged [net] rather than [net-next], please tell
me.  I'm looking to add content to the driver going forward and assumed
net-next.  Splitting the patch into 2 steps didn't make a lot of sense to
me.  Splitting the patch into 2 patches targeting 2 different repos makes
even less sense.  I assume the net MAINTAINERS list to be updated from
net-next contributions on the next cycle.

As I'm now outright deleting the lan9303.txt file, I'm getting the test bot
error about also needing to change the rst file that references lan9303.txt.
I'll do so in the next revision.  The alternative is to drop the yaml, simply
add to the old txt file, and be done with it.   Your call.

Regards,
Jerry.
Vladimir Oltean Oct. 17, 2022, 7:13 p.m. UTC | #5
On Mon, Oct 17, 2022 at 06:51:57PM +0000, Jerry.Ray@microchip.com wrote:
> >> On 09/10/2022 18:22, Vladimir Oltean wrote:
> >> > On Sun, Oct 09, 2022 at 05:20:03PM +0200, Krzysztof Kozlowski wrote:
> >> >> On 09/10/2022 00:56, Vladimir Oltean wrote:
> >> >>>>
> >> >>>> +MICROCHIP LAN9303/LAN9354 ETHERNET SWITCH DRIVER
> >> >>>> +M:      Jerry Ray <jerry.ray@microchip.com>
> >> >>>> +M:      UNGLinuxDriver@microchip.com
> >> >>>> +L:      netdev@vger.kernel.org
> >> >>>> +S:      Maintained
> >> >>>> +F:      Documentation/devicetree/bindings/net/dsa/microchip,lan9303.yaml
> >> >>>> +F:      drivers/net/dsa/lan9303*
> >> >>>> +
> >> >>>
> >> >>> Separate patch please? Changes to the MAINTAINERS file get applied to
> >> >>> the "net" tree.
> >> >>
> >> >> This will also go via net tree, so there is no real need to split it.
> >> >
> >> > I meant exactly what I wrote, "net" tree as in the networking tree where
> >> > fixes to the current master branch are sent:
> >> > https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git, or in
> >> > other words, not net-next.git where new features are sent:
> >> > https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git
> >>
> >> Ah, but how it can go to fixes? It has invalid path (in the context of
> >> net-fixes) and it is not related to anything in the current cycle.
> >
> >Personally I'd split the patch into 2 pieces, the MAINTAINERS entry for
> >the drivers/net/dsa/lan9303* portion, plus the current .txt schema,
> >which goes to "net" right away, wait until the net tree gets merged back
> >into net-next (happens when submissions for net-next reopen), then add
> >the dt-bindings and rename the .txt schema from MAINTAINERS to .yaml.
> >
> 
> If this patch should be flagged [net] rather than [net-next], please tell
> me.  I'm looking to add content to the driver going forward and assumed
> net-next.  Splitting the patch into 2 steps didn't make a lot of sense to
> me.  Splitting the patch into 2 patches targeting 2 different repos makes
> even less sense.  I assume the net MAINTAINERS list to be updated from
> net-next contributions on the next cycle.
> 
> As I'm now outright deleting the lan9303.txt file, I'm getting the test bot
> error about also needing to change the rst file that references lan9303.txt.
> I'll do so in the next revision.  The alternative is to drop the yaml, simply
> add to the old txt file, and be done with it.   Your call.
> 
> Regards,
> Jerry.

Ah, this is not a "my call" thing.

The portion I highlighted of the change you're making includes your name
into the output of $(./scripts/get_maintainer.pl drivers/net/dsa/lan9303-core.c).
In other words, you're voluntarily subscribing to the responsibility of
being a maintainer for the driver, getting emails from other developers,
reviewing patches. Furthermore, you also maintain the code in the stable
trees, hence your name also gets propagated there so people who use
those kernels can report problems to you.

The MAINTAINERS entry for lan9303 needs to go to the "net" tree, from
where it can be backported. This covers the driver + schema files as
they currently are. The change of the .txt to the .yaml schema then
comes on top of that (and on "net-next").
Jakub Kicinski Oct. 17, 2022, 7:19 p.m. UTC | #6
On Mon, 17 Oct 2022 22:13:11 +0300 Vladimir Oltean wrote:
> The portion I highlighted of the change you're making includes your name
> into the output of $(./scripts/get_maintainer.pl drivers/net/dsa/lan9303-core.c).
> In other words, you're voluntarily subscribing to the responsibility of
> being a maintainer for the driver, getting emails from other developers,
> reviewing patches. Furthermore, you also maintain the code in the stable
> trees, hence your name also gets propagated there so people who use
> those kernels can report problems to you.
> 
> The MAINTAINERS entry for lan9303 needs to go to the "net" tree, from
> where it can be backported. This covers the driver + schema files as
> they currently are. The change of the .txt to the .yaml schema then
> comes on top of that (and on "net-next").

And FWIW net gets merged into net-next every Thu so (compared to how
long this patch had been in review) it won't be a large delay to wait
for the MAINTAINERS patch to propagate.
Jerry Ray Oct. 17, 2022, 8 p.m. UTC | #7
>> ---
>> v3->v4:
>>  - Addressed v3 community feedback
>
>More specifically?
>

- Old lan9303.txt file is totally removed rather than containing text that
  redirects the user to the microchip,lan9303.yaml source file.
- Drop "Tree Bindings" from title
- Drop quotes from dsa.yaml reference line.
- Modified the compatible second enum to include a second string.
(( I now realize this is not what was being asked for and have made
  it a single enum with 4 items, removing the oneOf. ))
- Drop "gpio specifier for a" in reset-gpois description
- added a default: property to the reset-duration item and set it to 200.
- Drop "0" from the ethernet name.  Split the MDIO and I2C examples into
  two so that the number is no longer needed.
- Placed the reg property to be directly following the compatible string
  in the mdio node.

>> +examples:
>> +  - |
>> +    #include <dt-bindings/gpio/gpio.h>
>> +
>> +    // Ethernet switch connected via mdio to the host
>> +    ethernet {
>> +        #address-cells = <1>;
>> +        #size-cells = <0>;
>> +        phy-handle = <&lan9303switch>;
>> +        phy-mode = "rmii";
>> +        fixed-link {
>> +            speed = <100>;
>> +            full-duplex;
>> +        };
>
>I see the phy-handle to the switch is inherited from the .txt dt-binding,
>but I don't understand it. The switch is an mdio_device, not a phy_device,
>so what will this do?
>
>Also, any reasonable host driver will error out if it finds a phy-handle
>and a fixed-link in its OF node. So one of phy-handle or fixed-link must
>be dropped, they are bogus.
>
>Even better, just stick to the mdio node as root and drop the DSA master
>OF node, like other DSA dt-binding examples do. You can have dangling
>phandles, so "ethernet = <&ethernet>" below is not an issue.
>

I can remove the phy-handle, but I'm trying to establish the link between
this ethernet port and port0 (the CPU port) of the lan9303.  The lan9303
acts as the phy for this ethernet port and I want to force the speed and
duplex of the link to be 100 / full-duplex.

>> +        mdio {
>> +            #address-cells = <1>;
>> +            #size-cells = <0>;
>> +            lan9303switch: switch@0 {
>> +                compatible = "smsc,lan9303-mdio";
>> +                reg = <0>;
>> +                dsa,member = <0 0>;
>
>Redundant, please remove.
>

Okay.  I can remove the "dsa,member = <0,0>;" line.

>> +                ethernet-ports {
>> +                    #address-cells = <1>;
>> +                    #size-cells = <0>;
>> +                        port@0 {
>> +                            reg = <0>;
>> +                            phy-mode = "rmii";
>
>FWIW, RMII has a MAC mode and a PHY mode. Two RMII interfaces connected
>in MAC mode to one another don't work. You'll have problems if you also
>have an RMII PHY connected to one of the xMII ports, and you describe
>phy-mode = "rmii" for both. There exists a "rev-rmii" phy-mode to denote
>an RMII interface working in PHY mode. Wonder if you should be using
>that here.
>

"rev-rmii" does make more sense.  And yes, in this configuration the rmii
port of the lan9303 is acting as the PHY end.

>> +                            ethernet = <&ethernet>;
>> +                            fixed-link {
>> +                                speed = <100>;
>> +                                full-duplex;
>> +                            };
>> +                        };
>> +                        port@1 {
>> +                            reg = <1>;
>> +                            max-speed = <100>;
>> +                            label = "lan1";
>> +                        };
>> +                        port@2 {
>> +                            reg = <2>;
>> +                            max-speed = <100>;
>> +                            label = "lan2";
>> +                        };
>> +                    };
>> +                };
>> +            };
>> +        };
>> +
>> +  - |
>> +    #include <dt-bindings/gpio/gpio.h>
>> +
>> +    // Ethernet switch connected via i2c to the host
>> +    ethernet {
>> +        #address-cells = <1>;
>> +        #size-cells = <0>;
>> +        phy-mode = "rmii";
>> +            speed = <100>;
>> +        fixed-link {
>> +            full-duplex;
>> +        };
>> +    };
>
>No need for this node.
>

Without this, what does the port0 entry below have to point to?
How do you establish the device tree linkage between the ethenet
MAC and the rev-rmii PHY it connects to?

>> +
>> +    i2c {
>> +        #address-cells = <1>;
>> +        #size-cells = <0>;
>> +        lan9303: switch@1a {
>> +            compatible = "smsc,lan9303-i2c";
>> +            reg = <0x1a>;
>> +            ethernet-ports {
>> +                #address-cells = <1>;
>> +                #size-cells = <0>;
>> +                port@0 {
>> +                    reg = <0>;
>> +                    phy-mode = "rmii";
>> +                    ethernet = <&ethernet>;
>> +                    fixed-link {
>> +                        speed = <100>;
>> +                        full-duplex;
>> +                    };
>> +                };
>> +                port@1 {
>> +                    reg = <1>;
>> +                    max-speed = <100>;
>> +                    label = "lan1";
>> +                };
>> +                port@2 {
>> +                    reg = <2>;
>> +                    max-speed = <100>;
>> +                    label = "lan2";
>> +                };
>> +            };
>> +        };
>> +    };
>> diff --git a/MAINTAINERS b/MAINTAINERS
>> index 5d58b55c5ae5..89055ff2838a 100644
>> --- a/MAINTAINERS
>> +++ b/MAINTAINERS
>> @@ -13386,6 +13386,14 @@ L:   netdev@vger.kernel.org
>>  S:   Maintained
>>  F:   drivers/net/ethernet/microchip/lan743x_*
>>
>> +MICROCHIP LAN9303/LAN9354 ETHERNET SWITCH DRIVER
>> +M:   Jerry Ray <jerry.ray@microchip.com>
>> +M:   UNGLinuxDriver@microchip.com
>> +L:   netdev@vger.kernel.org
>> +S:   Maintained
>> +F:   Documentation/devicetree/bindings/net/dsa/microchip,lan9303.yaml
>> +F:   drivers/net/dsa/lan9303*
>> +
>
>Separate patch please? Changes to the MAINTAINERS file get applied to
>the "net" tree.
>
>>  MICROCHIP LAN966X ETHERNET DRIVER
>>  M:   Horatiu Vultur <horatiu.vultur@microchip.com>
>>  M:   UNGLinuxDriver@microchip.com
>> --
>> 2.25.1
>>
>

Regards,
Jerry.
Vladimir Oltean Oct. 17, 2022, 9:02 p.m. UTC | #8
On Mon, Oct 17, 2022 at 08:00:13PM +0000, Jerry.Ray@microchip.com wrote:
> >> ---
> >> v3->v4:
> >>  - Addressed v3 community feedback
> >
> >More specifically?
> >
> 
> - Old lan9303.txt file is totally removed rather than containing text that
>   redirects the user to the microchip,lan9303.yaml source file.
> - Drop "Tree Bindings" from title
> - Drop quotes from dsa.yaml reference line.
> - Modified the compatible second enum to include a second string.
> (( I now realize this is not what was being asked for and have made
>   it a single enum with 4 items, removing the oneOf. ))
> - Drop "gpio specifier for a" in reset-gpois description
> - added a default: property to the reset-duration item and set it to 200.
> - Drop "0" from the ethernet name.  Split the MDIO and I2C examples into
>   two so that the number is no longer needed.
> - Placed the reg property to be directly following the compatible string
>   in the mdio node.

Please carry the change log for v3->v4 also for future versions.

> >> +examples:
> >> +  - |
> >> +    #include <dt-bindings/gpio/gpio.h>
> >> +
> >> +    // Ethernet switch connected via mdio to the host
> >> +    ethernet {
> >> +        #address-cells = <1>;
> >> +        #size-cells = <0>;
> >> +        phy-handle = <&lan9303switch>;
> >> +        phy-mode = "rmii";
> >> +        fixed-link {
> >> +            speed = <100>;
> >> +            full-duplex;
> >> +        };
> >
> >I see the phy-handle to the switch is inherited from the .txt dt-binding,
> >but I don't understand it. The switch is an mdio_device, not a phy_device,
> >so what will this do?
> >
> >Also, any reasonable host driver will error out if it finds a phy-handle
> >and a fixed-link in its OF node. So one of phy-handle or fixed-link must
> >be dropped, they are bogus.
> >
> >Even better, just stick to the mdio node as root and drop the DSA master
> >OF node, like other DSA dt-binding examples do. You can have dangling
> >phandles, so "ethernet = <&ethernet>" below is not an issue.
> >
> 
> I can remove the phy-handle, but I'm trying to establish the link between
> this ethernet port and port0 (the CPU port) of the lan9303.  The lan9303
> acts as the phy for this ethernet port and I want to force the speed and
> duplex of the link to be 100 / full-duplex.

If the lan9303 acts as the PHY, then what do you need to force the speed
and duplex for? PHYs have a standard MDIO register set which gives you
that information.

I can understand a switch acting as a PHY towards Linux if you want to
hide the fact that it's a switch, and pretend it's just a regular port
going to the outside world (and maybe the switch is self-managed via a
microcontroller or something). But what purpose does this serve when
Linux is already in control of both ends of the link?

And furthermore, why would the MDIO-managed switch have a phy-handle
towards it, but the I2C managed switch not? If the host Ethernet
controller can tolerate not knowing the link state and being forced to a
given speed/duplex when the switch is I2C controlled, why can it not
also tolerate being forced when the switch has registers accessed in MDIO mode?

Lastly, when you have a phy-handle towards the switch, there will run 2
driver instances in parallel which will access the same hardware. What
PHY driver will phylib use for the RevMII/RevRMII emulated register map
of the CPU port? Will the registers accessed by the PHY driver collide
in any way with the registers accessed by the DSA driver? What if paged
MDIO access is used; how is synchronization between the 2 drivers handled?

> >> +    #include <dt-bindings/gpio/gpio.h>
> >> +
> >> +    // Ethernet switch connected via i2c to the host
> >> +    ethernet {
> >> +        #address-cells = <1>;
> >> +        #size-cells = <0>;
> >> +        phy-mode = "rmii";
> >> +            speed = <100>;
> >> +        fixed-link {
> >> +            full-duplex;
> >> +        };
> >> +    };
> >
> >No need for this node.
> >
> 
> Without this, what does the port0 entry below have to point to?
> How do you establish the device tree linkage between the ethenet
> MAC and the rev-rmii PHY it connects to?

To repeat myself, the ethernet = <&ethernet> phandle in port@0 can be
broken (not point to anything) in the dt-schema examples. Same as for
interrupt-parent, gpios, clocks, etc etc. Check out any .example.dts
generated by "make dt_binding_check", it has this at the top:

/plugin/; // silence any missing phandle references
Krzysztof Kozlowski Oct. 18, 2022, 10:34 p.m. UTC | #9
On 17/10/2022 14:33, Jerry.Ray@microchip.com wrote:
>>> +
>>> +  reg:
>>> +    maxItems: 1
>>> +
>>> +  reset-gpios:
>>> +    description: Optional reset line
>>> +    maxItems: 1
>>> +
>>> +  reset-duration:
>>> +    description: Reset duration in milliseconds
>>> +    default: 200
>>
>> This is a friendly reminder during the review process.
>>
>> It seems my previous comments were not fully addressed. Maybe my
>> feedback got lost between the quotes, maybe you just forgot to apply it.
>> Please go back to the previous discussion and either implement all
>> requested changes or keep discussing them.
>>
>> Thank you.
>>
> 
> I am documenting "what is" rather than what I think it should be. I
> would prefer there be a "-ms" suffix on the name, but that was not
> what was in the pre-existing code.
> 
> I added the "default: 200" line and can add a "maxItems: 1", but begin
> getting errors when I attempt to further define this field as a
> uint32 type or anything like that.

There are no errors after adding proper type. However I cannot help you
for some unspecified code with unspecified warnings.

> 
> And no, I'm not getting any warnings or errors from the dt_bindings_check.

Best regards,
Krzysztof
diff mbox series

Patch

diff --git a/Documentation/devicetree/bindings/net/dsa/lan9303.txt b/Documentation/devicetree/bindings/net/dsa/lan9303.txt
deleted file mode 100644
index 46a732087f5c..000000000000
--- a/Documentation/devicetree/bindings/net/dsa/lan9303.txt
+++ /dev/null
@@ -1,100 +0,0 @@ 
-SMSC/MicroChip LAN9303 three port ethernet switch
--------------------------------------------------
-
-Required properties:
-
-- compatible: should be
-  - "smsc,lan9303-i2c" for I2C managed mode
-    or
-  - "smsc,lan9303-mdio" for mdio managed mode
-
-Optional properties:
-
-- reset-gpios: GPIO to be used to reset the whole device
-- reset-duration: reset duration in milliseconds, defaults to 200 ms
-
-Subnodes:
-
-The integrated switch subnode should be specified according to the binding
-described in dsa/dsa.txt. The CPU port of this switch is always port 0.
-
-Note: always use 'reg = <0/1/2>;' for the three DSA ports, even if the device is
-configured to use 1/2/3 instead. This hardware configuration will be
-auto-detected and mapped accordingly.
-
-Example:
-
-I2C managed mode:
-
-	master: masterdevice@X {
-
-		fixed-link { /* RMII fixed link to LAN9303 */
-			speed = <100>;
-			full-duplex;
-		};
-	};
-
-	switch: switch@a {
-		compatible = "smsc,lan9303-i2c";
-		reg = <0xa>;
-		reset-gpios = <&gpio7 6 GPIO_ACTIVE_LOW>;
-		reset-duration = <200>;
-
-		ports {
-			#address-cells = <1>;
-			#size-cells = <0>;
-
-			port@0 { /* RMII fixed link to master */
-				reg = <0>;
-				ethernet = <&master>;
-			};
-
-			port@1 { /* external port 1 */
-				reg = <1>;
-				label = "lan1";
-			};
-
-			port@2 { /* external port 2 */
-				reg = <2>;
-				label = "lan2";
-			};
-		};
-	};
-
-MDIO managed mode:
-
-	master: masterdevice@X {
-		phy-handle = <&switch>;
-
-		mdio {
-			#address-cells = <1>;
-			#size-cells = <0>;
-
-			switch: switch-phy@0 {
-				compatible = "smsc,lan9303-mdio";
-				reg = <0>;
-				reset-gpios = <&gpio7 6 GPIO_ACTIVE_LOW>;
-				reset-duration = <100>;
-
-				ports {
-					#address-cells = <1>;
-					#size-cells = <0>;
-
-					port@0 {
-						reg = <0>;
-						ethernet = <&master>;
-					};
-
-					port@1 { /* external port 1 */
-						reg = <1>;
-						label = "lan1";
-					};
-
-					port@2 { /* external port 2 */
-						reg = <2>;
-						label = "lan2";
-					};
-				};
-			};
-		};
-	};
diff --git a/Documentation/devicetree/bindings/net/dsa/microchip,lan9303.yaml b/Documentation/devicetree/bindings/net/dsa/microchip,lan9303.yaml
new file mode 100644
index 000000000000..ca6cbe83ba75
--- /dev/null
+++ b/Documentation/devicetree/bindings/net/dsa/microchip,lan9303.yaml
@@ -0,0 +1,134 @@ 
+# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/net/dsa/microchip,lan9303.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: LAN9303 Ethernet Switch Series
+
+allOf:
+  - $ref: dsa.yaml#
+
+maintainers:
+  - UNGLinuxDriver@microchip.com
+
+properties:
+  compatible:
+    oneOf:
+      - enum:
+          - smsc,lan9303-mdio
+          - microchip,lan9354-mdio
+      - enum:
+          - smsc,lan9303-i2c
+          - microchip,lan9354-i2c
+
+  reg:
+    maxItems: 1
+
+  reset-gpios:
+    description: Optional reset line
+    maxItems: 1
+
+  reset-duration:
+    description: Reset duration in milliseconds
+    default: 200
+
+required:
+  - compatible
+  - reg
+
+unevaluatedProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/gpio/gpio.h>
+
+    // Ethernet switch connected via mdio to the host
+    ethernet {
+        #address-cells = <1>;
+        #size-cells = <0>;
+        phy-handle = <&lan9303switch>;
+        phy-mode = "rmii";
+        fixed-link {
+            speed = <100>;
+            full-duplex;
+        };
+        mdio {
+            #address-cells = <1>;
+            #size-cells = <0>;
+            lan9303switch: switch@0 {
+                compatible = "smsc,lan9303-mdio";
+                reg = <0>;
+                dsa,member = <0 0>;
+                ethernet-ports {
+                    #address-cells = <1>;
+                    #size-cells = <0>;
+                        port@0 {
+                            reg = <0>;
+                            phy-mode = "rmii";
+                            ethernet = <&ethernet>;
+                            fixed-link {
+                                speed = <100>;
+                                full-duplex;
+                            };
+                        };
+                        port@1 {
+                            reg = <1>;
+                            max-speed = <100>;
+                            label = "lan1";
+                        };
+                        port@2 {
+                            reg = <2>;
+                            max-speed = <100>;
+                            label = "lan2";
+                        };
+                    };
+                };
+            };
+        };
+
+  - |
+    #include <dt-bindings/gpio/gpio.h>
+
+    // Ethernet switch connected via i2c to the host
+    ethernet {
+        #address-cells = <1>;
+        #size-cells = <0>;
+        phy-mode = "rmii";
+        fixed-link {
+            speed = <100>;
+            full-duplex;
+        };
+    };
+
+    i2c {
+        #address-cells = <1>;
+        #size-cells = <0>;
+        lan9303: switch@1a {
+            compatible = "smsc,lan9303-i2c";
+            reg = <0x1a>;
+            ethernet-ports {
+                #address-cells = <1>;
+                #size-cells = <0>;
+                port@0 {
+                    reg = <0>;
+                    phy-mode = "rmii";
+                    ethernet = <&ethernet>;
+                    fixed-link {
+                        speed = <100>;
+                        full-duplex;
+                    };
+                };
+                port@1 {
+                    reg = <1>;
+                    max-speed = <100>;
+                    label = "lan1";
+                };
+                port@2 {
+                    reg = <2>;
+                    max-speed = <100>;
+                    label = "lan2";
+                };
+            };
+        };
+    };
diff --git a/MAINTAINERS b/MAINTAINERS
index 5d58b55c5ae5..89055ff2838a 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -13386,6 +13386,14 @@  L:	netdev@vger.kernel.org
 S:	Maintained
 F:	drivers/net/ethernet/microchip/lan743x_*
 
+MICROCHIP LAN9303/LAN9354 ETHERNET SWITCH DRIVER
+M:	Jerry Ray <jerry.ray@microchip.com>
+M:	UNGLinuxDriver@microchip.com
+L:	netdev@vger.kernel.org
+S:	Maintained
+F:	Documentation/devicetree/bindings/net/dsa/microchip,lan9303.yaml
+F:	drivers/net/dsa/lan9303*
+
 MICROCHIP LAN966X ETHERNET DRIVER
 M:	Horatiu Vultur <horatiu.vultur@microchip.com>
 M:	UNGLinuxDriver@microchip.com