Message ID | 20250414140128.390400-2-lukma@denx.de (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | net: mtip: Add support for MTIP imx287 L2 switch driver | expand |
On Mon, Apr 14, 2025 at 04:01:23PM +0200, Lukasz Majewski wrote: > This patch provides description of the MTIP L2 switch available in some > NXP's SOCs - e.g. imx287. > > Signed-off-by: Lukasz Majewski <lukma@denx.de> > --- > Changes for v2: > - Rename the file to match exactly the compatible > (nxp,imx287-mtip-switch) > > Changes for v3: > - Remove '-' from const:'nxp,imx287-mtip-switch' > - Use '^port@[12]+$' for port patternProperties > - Drop status = "okay"; > - Provide proper indentation for 'example' binding (replace 8 > spaces with 4 spaces) > - Remove smsc,disable-energy-detect; property > - Remove interrupt-parent and interrupts properties as not required > - Remove #address-cells and #size-cells from required properties check > - remove description from reg: > - Add $ref: ethernet-switch.yaml# > > Changes for v4: > - Use $ref: ethernet-switch.yaml#/$defs/ethernet-ports and remove already > referenced properties > - Rename file to nxp,imx28-mtip-switch.yaml > > Changes for v5: > - Provide proper description for 'ethernet-port' node > --- > .../bindings/net/nxp,imx28-mtip-switch.yaml | 141 ++++++++++++++++++ > 1 file changed, 141 insertions(+) > create mode 100644 Documentation/devicetree/bindings/net/nxp,imx28-mtip-switch.yaml > > diff --git a/Documentation/devicetree/bindings/net/nxp,imx28-mtip-switch.yaml b/Documentation/devicetree/bindings/net/nxp,imx28-mtip-switch.yaml > new file mode 100644 > index 000000000000..6f2b5a277ac2 > --- /dev/null > +++ b/Documentation/devicetree/bindings/net/nxp,imx28-mtip-switch.yaml > @@ -0,0 +1,141 @@ > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/net/nxp,imx28-mtip-switch.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: NXP SoC Ethernet Switch Controller (L2 MoreThanIP switch) > + > +maintainers: > + - Lukasz Majewski <lukma@denx.de> > + > +description: > + The 2-port switch ethernet subsystem provides ethernet packet (L2) > + communication and can be configured as an ethernet switch. It provides the > + reduced media independent interface (RMII), the management data input > + output (MDIO) for physical layer device (PHY) management. > + > +$ref: ethernet-switch.yaml#/$defs/ethernet-ports > + > +properties: > + compatible: > + const: nxp,imx28-mtip-switch > + > + reg: > + maxItems: 1 > + > + phy-supply: > + description: > + Regulator that powers Ethernet PHYs. > + > + clocks: > + items: > + - description: Register accessing clock > + - description: Bus access clock > + - description: Output clock for external device - e.g. PHY source clock > + - description: IEEE1588 timer clock > + > + clock-names: > + items: > + - const: ipg > + - const: ahb > + - const: enet_out > + - const: ptp > + > + interrupts: > + items: > + - description: Switch interrupt > + - description: ENET0 interrupt > + - description: ENET1 interrupt > + > + pinctrl-names: true > + > + ethernet-ports: > + type: object > + additionalProperties: true > + properties: > + ethernet-port: > + type: object > + unevaluatedProperties: false This is going to fail if you have any property other than 'reg'. But then it will never be applied because you never have a node called 'ethernet-port' since you have more than 1 child node. You need this under 'patternProperties' and 'additionalProperties: true' instead. And please test some of the requirements here. Like a reg value of 3 or remove 'phy-mode'. > + > + properties: > + reg: > + items: > + - enum: [1, 2] > + description: MTIP L2 switch port number > + > + required: > + - reg > + - label > + - phy-mode > + - phy-handle
Hi Rob, > On Mon, Apr 14, 2025 at 04:01:23PM +0200, Lukasz Majewski wrote: > > This patch provides description of the MTIP L2 switch available in > > some NXP's SOCs - e.g. imx287. > > > > Signed-off-by: Lukasz Majewski <lukma@denx.de> > > --- > > Changes for v2: > > - Rename the file to match exactly the compatible > > (nxp,imx287-mtip-switch) > > > > Changes for v3: > > - Remove '-' from const:'nxp,imx287-mtip-switch' > > - Use '^port@[12]+$' for port patternProperties > > - Drop status = "okay"; > > - Provide proper indentation for 'example' binding (replace 8 > > spaces with 4 spaces) > > - Remove smsc,disable-energy-detect; property > > - Remove interrupt-parent and interrupts properties as not required > > - Remove #address-cells and #size-cells from required properties > > check > > - remove description from reg: > > - Add $ref: ethernet-switch.yaml# > > > > Changes for v4: > > - Use $ref: ethernet-switch.yaml#/$defs/ethernet-ports and remove > > already referenced properties > > - Rename file to nxp,imx28-mtip-switch.yaml > > > > Changes for v5: > > - Provide proper description for 'ethernet-port' node > > --- > > .../bindings/net/nxp,imx28-mtip-switch.yaml | 141 > > ++++++++++++++++++ 1 file changed, 141 insertions(+) > > create mode 100644 > > Documentation/devicetree/bindings/net/nxp,imx28-mtip-switch.yaml > > > > diff --git > > a/Documentation/devicetree/bindings/net/nxp,imx28-mtip-switch.yaml > > b/Documentation/devicetree/bindings/net/nxp,imx28-mtip-switch.yaml > > new file mode 100644 index 000000000000..6f2b5a277ac2 --- /dev/null > > +++ > > b/Documentation/devicetree/bindings/net/nxp,imx28-mtip-switch.yaml > > @@ -0,0 +1,141 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR > > BSD-2-Clause) +%YAML 1.2 > > +--- > > +$id: http://devicetree.org/schemas/net/nxp,imx28-mtip-switch.yaml# > > +$schema: http://devicetree.org/meta-schemas/core.yaml# > > + > > +title: NXP SoC Ethernet Switch Controller (L2 MoreThanIP switch) > > + > > +maintainers: > > + - Lukasz Majewski <lukma@denx.de> > > + > > +description: > > + The 2-port switch ethernet subsystem provides ethernet packet > > (L2) > > + communication and can be configured as an ethernet switch. It > > provides the > > + reduced media independent interface (RMII), the management data > > input > > + output (MDIO) for physical layer device (PHY) management. > > + > > +$ref: ethernet-switch.yaml#/$defs/ethernet-ports > > + > > +properties: > > + compatible: > > + const: nxp,imx28-mtip-switch > > + > > + reg: > > + maxItems: 1 > > + > > + phy-supply: > > + description: > > + Regulator that powers Ethernet PHYs. > > + > > + clocks: > > + items: > > + - description: Register accessing clock > > + - description: Bus access clock > > + - description: Output clock for external device - e.g. PHY > > source clock > > + - description: IEEE1588 timer clock > > + > > + clock-names: > > + items: > > + - const: ipg > > + - const: ahb > > + - const: enet_out > > + - const: ptp > > + > > + interrupts: > > + items: > > + - description: Switch interrupt > > + - description: ENET0 interrupt > > + - description: ENET1 interrupt > > + > > + pinctrl-names: true > > + > > + ethernet-ports: > > + type: object > > + additionalProperties: true > > + properties: > > + ethernet-port: > > + type: object > > + unevaluatedProperties: false > > This is going to fail if you have any property other than 'reg'. The DT schema check shall fail when reg is not equal to 1 or 2, as this switch has only two ports. > But > then it will never be applied because you never have a node called > 'ethernet-port' since you have more than 1 child node. > You need this > under 'patternProperties' and 'additionalProperties: true' instead. > And please test some of the requirements here. Like a reg value of 3 > or remove 'phy-mode'. In linux-next we now also have realtek,rtl9301-switch.yaml which uses just: properties: ethernet-ports: type: object but when in "examples" I do remove for example "phy-handle" the command: make dt_binding_check DT_SCHEMA_FILES=realtek,rtl9301-switch.yaml is executed without errors. IMHO the problem is with proper usage of $ref: ethernet-switch.yaml#/$defs/ethernet-ports which shall in my case be extended to have: $ref: ethernet-switch.yaml#/$defs/ethernet-ports/patternProperties In the case of MTIP - the following SCHEMA description shall be used: ethernet-ports: type: object $ref: ethernet-switch.yaml#/$defs/ethernet-ports/patternProperties additionalProperties: true patternProperties: '^ethernet-port@[12]$': type: object additionalProperties: true properties: reg: items: - enum: [1, 2] description: MTIP L2 switch port number required: - reg - label - phy-mode - phy-handle And then, when I remove from 'example:' the 'label': make dt_binding_check DT_SCHEMA_FILES=nxp,imx28-mtip-switch.yaml /Documentation/devicetree/bindings/net/nxp,imx28-mtip-switch.example.dtb: switch@800f0000: ethernet-ports:ethernet-port@2: 'label' is a required property from schema $id: http://devicetree.org/schemas/net/nxp,imx28-mtip-switch.yaml# /Documentation/devicetree/bindings/net/nxp,imx28-mtip-switch.example.dtb: switch@800f0000: Unevaluated properties are not allowed ('ethernet-ports' was unexpected) from schema $id: http://devicetree.org/schemas/net/nxp,imx28-mtip-switch.yaml# or when reg = <3>; Documentation/devicetree/bindings/net/nxp,imx28-mtip-switch.example.dtb: switch@800f0000: ethernet-ports:ethernet-port@2:reg:0:0: 3 is not one of [1, 2] When I do use the untouched example: node - it compiles without errors. I do guess that this is the expected behaviour... :-) > > > + > > + properties: > > + reg: > > + items: > > + - enum: [1, 2] > > + description: MTIP L2 switch port number > > + > > + required: > > + - reg > > + - label > > + - phy-mode > > + - phy-handle Best regards, Lukasz Majewski -- DENX Software Engineering GmbH, Managing Director: Erika Unter HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de
Hi Lukasz, Am 14.04.25 um 16:01 schrieb Lukasz Majewski: > This patch provides description of the MTIP L2 switch available in some > NXP's SOCs - e.g. imx287. > > Signed-off-by: Lukasz Majewski <lukma@denx.de> > --- > Changes for v2: > - Rename the file to match exactly the compatible > (nxp,imx287-mtip-switch) > > Changes for v3: > - Remove '-' from const:'nxp,imx287-mtip-switch' > - Use '^port@[12]+$' for port patternProperties > - Drop status = "okay"; > - Provide proper indentation for 'example' binding (replace 8 > spaces with 4 spaces) > - Remove smsc,disable-energy-detect; property > - Remove interrupt-parent and interrupts properties as not required > - Remove #address-cells and #size-cells from required properties check > - remove description from reg: > - Add $ref: ethernet-switch.yaml# > > Changes for v4: > - Use $ref: ethernet-switch.yaml#/$defs/ethernet-ports and remove already > referenced properties > - Rename file to nxp,imx28-mtip-switch.yaml > > Changes for v5: > - Provide proper description for 'ethernet-port' node > --- > .../bindings/net/nxp,imx28-mtip-switch.yaml | 141 ++++++++++++++++++ > 1 file changed, 141 insertions(+) > create mode 100644 Documentation/devicetree/bindings/net/nxp,imx28-mtip-switch.yaml > > diff --git a/Documentation/devicetree/bindings/net/nxp,imx28-mtip-switch.yaml b/Documentation/devicetree/bindings/net/nxp,imx28-mtip-switch.yaml > new file mode 100644 > index 000000000000..6f2b5a277ac2 > --- /dev/null > +++ b/Documentation/devicetree/bindings/net/nxp,imx28-mtip-switch.yaml > @@ -0,0 +1,141 @@ > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/net/nxp,imx28-mtip-switch.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: NXP SoC Ethernet Switch Controller (L2 MoreThanIP switch) > + > +maintainers: > + - Lukasz Majewski <lukma@denx.de> > + > +description: > + The 2-port switch ethernet subsystem provides ethernet packet (L2) > + communication and can be configured as an ethernet switch. It provides the > + reduced media independent interface (RMII), the management data input > + output (MDIO) for physical layer device (PHY) management. > + > +$ref: ethernet-switch.yaml#/$defs/ethernet-ports > + > +properties: > + compatible: > + const: nxp,imx28-mtip-switch > + > + reg: > + maxItems: 1 > + > + phy-supply: > + description: > + Regulator that powers Ethernet PHYs. > + > + clocks: > + items: > + - description: Register accessing clock > + - description: Bus access clock > + - description: Output clock for external device - e.g. PHY source clock > + - description: IEEE1588 timer clock > + > + clock-names: > + items: > + - const: ipg > + - const: ahb > + - const: enet_out > + - const: ptp > + > + interrupts: > + items: > + - description: Switch interrupt > + - description: ENET0 interrupt > + - description: ENET1 interrupt sorry for the late suggestion, but can we have additional interrupt-names here, please?
Hi Stefan, > Hi Lukasz, > > Am 14.04.25 um 16:01 schrieb Lukasz Majewski: > > This patch provides description of the MTIP L2 switch available in > > some NXP's SOCs - e.g. imx287. > > > > Signed-off-by: Lukasz Majewski <lukma@denx.de> > > --- > > Changes for v2: > > - Rename the file to match exactly the compatible > > (nxp,imx287-mtip-switch) > > > > Changes for v3: > > - Remove '-' from const:'nxp,imx287-mtip-switch' > > - Use '^port@[12]+$' for port patternProperties > > - Drop status = "okay"; > > - Provide proper indentation for 'example' binding (replace 8 > > spaces with 4 spaces) > > - Remove smsc,disable-energy-detect; property > > - Remove interrupt-parent and interrupts properties as not required > > - Remove #address-cells and #size-cells from required properties > > check > > - remove description from reg: > > - Add $ref: ethernet-switch.yaml# > > > > Changes for v4: > > - Use $ref: ethernet-switch.yaml#/$defs/ethernet-ports and remove > > already referenced properties > > - Rename file to nxp,imx28-mtip-switch.yaml > > > > Changes for v5: > > - Provide proper description for 'ethernet-port' node > > --- > > .../bindings/net/nxp,imx28-mtip-switch.yaml | 141 > > ++++++++++++++++++ 1 file changed, 141 insertions(+) > > create mode 100644 > > Documentation/devicetree/bindings/net/nxp,imx28-mtip-switch.yaml > > > > diff --git > > a/Documentation/devicetree/bindings/net/nxp,imx28-mtip-switch.yaml > > b/Documentation/devicetree/bindings/net/nxp,imx28-mtip-switch.yaml > > new file mode 100644 index 000000000000..6f2b5a277ac2 --- /dev/null > > +++ > > b/Documentation/devicetree/bindings/net/nxp,imx28-mtip-switch.yaml > > @@ -0,0 +1,141 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR > > BSD-2-Clause) +%YAML 1.2 > > +--- > > +$id: http://devicetree.org/schemas/net/nxp,imx28-mtip-switch.yaml# > > +$schema: http://devicetree.org/meta-schemas/core.yaml# > > + > > +title: NXP SoC Ethernet Switch Controller (L2 MoreThanIP switch) > > + > > +maintainers: > > + - Lukasz Majewski <lukma@denx.de> > > + > > +description: > > + The 2-port switch ethernet subsystem provides ethernet packet > > (L2) > > + communication and can be configured as an ethernet switch. It > > provides the > > + reduced media independent interface (RMII), the management data > > input > > + output (MDIO) for physical layer device (PHY) management. > > + > > +$ref: ethernet-switch.yaml#/$defs/ethernet-ports > > + > > +properties: > > + compatible: > > + const: nxp,imx28-mtip-switch > > + > > + reg: > > + maxItems: 1 > > + > > + phy-supply: > > + description: > > + Regulator that powers Ethernet PHYs. > > + > > + clocks: > > + items: > > + - description: Register accessing clock > > + - description: Bus access clock > > + - description: Output clock for external device - e.g. PHY > > source clock > > + - description: IEEE1588 timer clock > > + > > + clock-names: > > + items: > > + - const: ipg > > + - const: ahb > > + - const: enet_out > > + - const: ptp > > + > > + interrupts: > > + items: > > + - description: Switch interrupt > > + - description: ENET0 interrupt > > + - description: ENET1 interrupt > sorry for the late suggestion, but can we have additional > interrupt-names here, please? I've extended the proper *.yaml file and modified the driver to use platform_get_irq_byname(). Best regards, Lukasz Majewski -- DENX Software Engineering GmbH, Managing Director: Erika Unter HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de
diff --git a/Documentation/devicetree/bindings/net/nxp,imx28-mtip-switch.yaml b/Documentation/devicetree/bindings/net/nxp,imx28-mtip-switch.yaml new file mode 100644 index 000000000000..6f2b5a277ac2 --- /dev/null +++ b/Documentation/devicetree/bindings/net/nxp,imx28-mtip-switch.yaml @@ -0,0 +1,141 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/net/nxp,imx28-mtip-switch.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: NXP SoC Ethernet Switch Controller (L2 MoreThanIP switch) + +maintainers: + - Lukasz Majewski <lukma@denx.de> + +description: + The 2-port switch ethernet subsystem provides ethernet packet (L2) + communication and can be configured as an ethernet switch. It provides the + reduced media independent interface (RMII), the management data input + output (MDIO) for physical layer device (PHY) management. + +$ref: ethernet-switch.yaml#/$defs/ethernet-ports + +properties: + compatible: + const: nxp,imx28-mtip-switch + + reg: + maxItems: 1 + + phy-supply: + description: + Regulator that powers Ethernet PHYs. + + clocks: + items: + - description: Register accessing clock + - description: Bus access clock + - description: Output clock for external device - e.g. PHY source clock + - description: IEEE1588 timer clock + + clock-names: + items: + - const: ipg + - const: ahb + - const: enet_out + - const: ptp + + interrupts: + items: + - description: Switch interrupt + - description: ENET0 interrupt + - description: ENET1 interrupt + + pinctrl-names: true + + ethernet-ports: + type: object + additionalProperties: true + properties: + ethernet-port: + type: object + unevaluatedProperties: false + + properties: + reg: + items: + - enum: [1, 2] + description: MTIP L2 switch port number + + required: + - reg + - label + - phy-mode + - phy-handle + + mdio: + type: object + $ref: mdio.yaml# + unevaluatedProperties: false + description: + Specifies the mdio bus in the switch, used as a container for phy nodes. + +required: + - compatible + - reg + - clocks + - clock-names + - interrupts + - mdio + - ethernet-ports + +unevaluatedProperties: false + +examples: + - | + #include<dt-bindings/interrupt-controller/irq.h> + switch@800f0000 { + compatible = "nxp,imx28-mtip-switch"; + reg = <0x800f0000 0x20000>; + pinctrl-names = "default"; + pinctrl-0 = <&mac0_pins_a>, <&mac1_pins_a>; + phy-supply = <®_fec_3v3>; + interrupts = <100>, <101>, <102>; + clocks = <&clks 57>, <&clks 57>, <&clks 64>, <&clks 35>; + clock-names = "ipg", "ahb", "enet_out", "ptp"; + + ethernet-ports { + #address-cells = <1>; + #size-cells = <0>; + + mtip_port1: ethernet-port@1 { + reg = <1>; + label = "lan0"; + local-mac-address = [ 00 00 00 00 00 00 ]; + phy-mode = "rmii"; + phy-handle = <ðphy0>; + }; + + mtip_port2: ethernet-port@2 { + reg = <2>; + label = "lan1"; + local-mac-address = [ 00 00 00 00 00 00 ]; + phy-mode = "rmii"; + phy-handle = <ðphy1>; + }; + }; + + mdio_sw: mdio { + #address-cells = <1>; + #size-cells = <0>; + + reset-gpios = <&gpio2 13 0>; + reset-delay-us = <25000>; + reset-post-delay-us = <10000>; + + ethphy0: ethernet-phy@0 { + reg = <0>; + }; + + ethphy1: ethernet-phy@1 { + reg = <1>; + }; + }; + };
This patch provides description of the MTIP L2 switch available in some NXP's SOCs - e.g. imx287. Signed-off-by: Lukasz Majewski <lukma@denx.de> --- Changes for v2: - Rename the file to match exactly the compatible (nxp,imx287-mtip-switch) Changes for v3: - Remove '-' from const:'nxp,imx287-mtip-switch' - Use '^port@[12]+$' for port patternProperties - Drop status = "okay"; - Provide proper indentation for 'example' binding (replace 8 spaces with 4 spaces) - Remove smsc,disable-energy-detect; property - Remove interrupt-parent and interrupts properties as not required - Remove #address-cells and #size-cells from required properties check - remove description from reg: - Add $ref: ethernet-switch.yaml# Changes for v4: - Use $ref: ethernet-switch.yaml#/$defs/ethernet-ports and remove already referenced properties - Rename file to nxp,imx28-mtip-switch.yaml Changes for v5: - Provide proper description for 'ethernet-port' node --- .../bindings/net/nxp,imx28-mtip-switch.yaml | 141 ++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 Documentation/devicetree/bindings/net/nxp,imx28-mtip-switch.yaml