On Mon, Oct 10, 2022 at 08:48:56PM +0300, Vladimir Oltean wrote: > On Mon, Oct 10, 2022 at 09:37:23AM -0400, Krzysztof Kozlowski wrote: > > What stops you from doing that? What do you need from me? > > To end the discussion on a constructive note, I think if I were Colin, > I would do the following, in the following order, according to what was > expressed as a constraint: > ... > 8. Introduce the "mscc,vsc7512-switch" compatible string as part of > mscc,vsc7514-switch.yaml, but this will have "$ref: dsa.yaml#" (this > will have to be referenced by full path because they are in different > folders) instead of "ethernet-switch.yaml". Doing this will include > the common bindings for a switch, plus the DSA specifics. Resurrecting this conversation for a quick question / feedback, now that steps 1-7 are essentially done with everyone's help. I don't want to send out a full RFC / Patch, since I can't currently test on hardware this week. But I'd really like feedback on the documentation change that is coming up. And I also don't want to necessarily do a separate RFC for just this patch. What happens here is interrupts and interrupt-names work as expected. They're required for the 7514, and optional for the 7512. Fantastic. I'm not sure if the "$ref: ethernet-switch.yaml" and "$ref: /schemas/net/dsa/dsa.yaml#" have an effect, since removing that line outright doesn't seem to have an effect on dt_bindings_check. The "fdma" doesn't make sense for the 7512, and seems to be handled correctly by way of maxItems for the two scenarios. The big miss in this patch is ethernet-switch-port vs dsa-port in the two scenarios. It isn't working as I'd hoped, where the 7514 pulls in ethernet-switch-port.yaml and the 7512 pulls in dsa-port.yaml. To squash errors about the incorrect "ethernet" property I switched this line: - $ref: ethernet-switch-port.yaml# + $ref: /schemas/net/dsa/dsa-port.yaml# ... knowing full well that the correct solution should be along the lines of "remove this, and only reference them in the conditional". That doesn't seem to work though... Is what I'm trying to do possible? I utilized Documentation/devicetree/bindings/net/dsa/*.yaml and Documentation/devicetree/bindings/net/*.yaml and found examples to get to my current state. diff --git a/Documentation/devicetree/bindings/net/mscc,vsc7514-switch.yaml b/Documentation/devicetree/bindings/net/mscc,vsc7514-switch.yaml index 5ffe831e59e4..f012c64a0da3 100644 --- a/Documentation/devicetree/bindings/net/mscc,vsc7514-switch.yaml +++ b/Documentation/devicetree/bindings/net/mscc,vsc7514-switch.yaml @@ -18,13 +18,50 @@ description: | packets using CPU. Additionally, PTP is supported as well as FDMA for faster packet extraction/injection. -$ref: ethernet-switch.yaml# +allOf: + - if: + properties: + compatible: + const: mscc,vsc7514-switch + then: + $ref: ethernet-switch.yaml# + required: + - interrupts + - interrupt-names + properties: + reg: + minItems: 21 + reg-names: + minItems: 21 + ethernet-ports: + patternProperties: + "^port@[0-9a-f]+$": + $ref: ethernet-switch-port.yaml# + + - if: + properties: + compatible: + const: mscc,vsc7512-switch + then: + $ref: /schemas/net/dsa/dsa.yaml# + properties: + reg: + maxItems: 20 + reg-names: + maxItems: 20 + ethernet-ports: + patternProperties: + "^port@[0-9a-f]+$": + $ref: /schemas/net/dsa/dsa-port.yaml# properties: compatible: - const: mscc,vsc7514-switch + enum: + - mscc,vsc7512-switch + - mscc,vsc7514-switch reg: + minItems: 20 items: - description: system target - description: rewriter target @@ -49,6 +86,7 @@ properties: - description: fdma target reg-names: + minItems: 20 items: - const: sys - const: rew @@ -100,7 +138,7 @@ properties: patternProperties: "^port@[0-9a-f]+$": - $ref: ethernet-switch-port.yaml# + $ref: /schemas/net/dsa/dsa-port.yaml# unevaluatedProperties: false @@ -108,13 +146,12 @@ required: - compatible - reg - reg-names - - interrupts - - interrupt-names - ethernet-ports additionalProperties: false examples: + # VSC7514 (Switchdev) - | switch@1010000 { compatible = "mscc,vsc7514-switch"; @@ -162,5 +199,51 @@ examples: }; }; }; + # VSC7512 (DSA) + - | + ethernet-switch@1{ + compatible = "mscc,vsc7512-switch"; + reg = <0x71010000 0x10000>, + <0x71030000 0x10000>, + <0x71080000 0x100>, + <0x710e0000 0x10000>, + <0x711e0000 0x100>, + <0x711f0000 0x100>, + <0x71200000 0x100>, + <0x71210000 0x100>, + <0x71220000 0x100>, + <0x71230000 0x100>, + <0x71240000 0x100>, + <0x71250000 0x100>, + <0x71260000 0x100>, + <0x71270000 0x100>, + <0x71280000 0x100>, + <0x71800000 0x80000>, + <0x71880000 0x10000>, + <0x71040000 0x10000>, + <0x71050000 0x10000>, + <0x71060000 0x10000>; + reg-names = "sys", "rew", "qs", "ptp", "port0", "port1", + "port2", "port3", "port4", "port5", "port6", + "port7", "port8", "port9", "port10", "qsys", + "ana", "s0", "s1", "s2"; + + ethernet-ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + ethernet = <&mac_sw>; + phy-handle = <&phy0>; + phy-mode = "internal"; + }; + port@1 { + reg = <1>; + phy-handle = <&phy1>; + phy-mode = "internal"; + }; + }; + };