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
+
+ 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>;
+ };
+ };
+ };
--
2.39.5
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
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
© 2016 - 2025 Red Hat, Inc.