[PATCH 4/4] dt-bindings: net: dsa: mediatek,mt7530: update json-schema

Arınç ÜNAL posted 4 patches 2 years, 1 month ago
There is a newer version of this series
[PATCH 4/4] dt-bindings: net: dsa: mediatek,mt7530: update json-schema
Posted by Arınç ÜNAL 2 years, 1 month ago
Update the json-schema for compatible devices.

- Define acceptable phy-mode values for CPU port of each compatible device.
- Remove requiring the "reg" property since the referred dsa-port.yaml
already does that.
- Require mediatek,mcm for the described MT7621 SoCs as the compatible
string is only used for MT7530 which is a part of the multi-chip module.

Signed-off-by: Arınç ÜNAL <arinc.unal@arinc9.com>
---
 .../bindings/net/dsa/mediatek,mt7530.yaml     | 220 +++++++++++++++---
 1 file changed, 191 insertions(+), 29 deletions(-)

diff --git a/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml b/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
index a88e650e910b..a37a14fba9f6 100644
--- a/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
+++ b/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
@@ -135,35 +135,6 @@ properties:
       the ethsys.
     maxItems: 1
 
-patternProperties:
-  "^(ethernet-)?ports$":
-    type: object
-
-    patternProperties:
-      "^(ethernet-)?port@[0-9]+$":
-        type: object
-        description: Ethernet switch ports
-
-        unevaluatedProperties: false
-
-        properties:
-          reg:
-            description:
-              Port address described must be 5 or 6 for CPU port and from 0
-              to 5 for user ports.
-
-        allOf:
-          - $ref: dsa-port.yaml#
-          - if:
-              properties:
-                label:
-                  items:
-                    - const: cpu
-            then:
-              required:
-                - reg
-                - phy-mode
-
 required:
   - compatible
   - reg
@@ -187,10 +158,201 @@ allOf:
           items:
             - const: mediatek,mt7530
     then:
+      patternProperties:
+        "^(ethernet-)?ports$":
+          type: object
+
+          patternProperties:
+            "^(ethernet-)?port@[0-9]+$":
+              type: object
+              description: Ethernet switch ports
+
+              unevaluatedProperties: false
+
+              properties:
+                reg:
+                  description:
+                    Port address described must be 5 or 6 for CPU port and from
+                    0 to 5 for user ports.
+
+              allOf:
+                - $ref: dsa-port.yaml#
+                - if:
+                    properties:
+                      label:
+                        items:
+                          - const: cpu
+                  then:
+                    allOf:
+                      - if:
+                          properties:
+                            reg:
+                              const: 5
+                        then:
+                          properties:
+                            phy-mode:
+                              enum:
+                                - gmii
+                                - mii
+                                - rgmii
+
+                      - if:
+                          properties:
+                            reg:
+                              const: 6
+                        then:
+                          properties:
+                            phy-mode:
+                              enum:
+                                - rgmii
+                                - trgmii
+
+                    properties:
+                      reg:
+                        enum:
+                          - 5
+                          - 6
+
+                    required:
+                      - phy-mode
+
       required:
         - core-supply
         - io-supply
 
+  - if:
+      properties:
+        compatible:
+          items:
+            - const: mediatek,mt7531
+    then:
+      patternProperties:
+        "^(ethernet-)?ports$":
+          type: object
+
+          patternProperties:
+            "^(ethernet-)?port@[0-9]+$":
+              type: object
+              description: Ethernet switch ports
+
+              unevaluatedProperties: false
+
+              properties:
+                reg:
+                  description:
+                    Port address described must be 5 or 6 for CPU port and from
+                    0 to 5 for user ports.
+
+              allOf:
+                - $ref: dsa-port.yaml#
+                - if:
+                    properties:
+                      label:
+                        items:
+                          - const: cpu
+                  then:
+                    allOf:
+                      - if:
+                          properties:
+                            reg:
+                              const: 5
+                        then:
+                          properties:
+                            phy-mode:
+                              enum:
+                                - 1000base-x
+                                - 2500base-x
+                                - rgmii
+                                - sgmii
+
+                      - if:
+                          properties:
+                            reg:
+                              const: 6
+                        then:
+                          properties:
+                            phy-mode:
+                              enum:
+                                - 1000base-x
+                                - 2500base-x
+                                - sgmii
+
+                    properties:
+                      reg:
+                        enum:
+                          - 5
+                          - 6
+
+                    required:
+                      - phy-mode
+
+  - if:
+      properties:
+        compatible:
+          items:
+            - const: mediatek,mt7621
+    then:
+      patternProperties:
+        "^(ethernet-)?ports$":
+          type: object
+
+          patternProperties:
+            "^(ethernet-)?port@[0-9]+$":
+              type: object
+              description: Ethernet switch ports
+
+              unevaluatedProperties: false
+
+              properties:
+                reg:
+                  description:
+                    Port address described must be 5 or 6 for CPU port and from
+                    0 to 5 for user ports.
+
+              allOf:
+                - $ref: dsa-port.yaml#
+                - if:
+                    properties:
+                      label:
+                        items:
+                          - const: cpu
+                  then:
+                    allOf:
+                      - if:
+                          properties:
+                            reg:
+                              const: 5
+                        then:
+                          properties:
+                            phy-mode:
+                              enum:
+                                - gmii
+                                - mii
+                                - rgmii
+
+                      - if:
+                          properties:
+                            reg:
+                              const: 6
+                        then:
+                          properties:
+                            phy-mode:
+                              enum:
+                                - rgmii
+                                - trgmii
+
+                    properties:
+                      reg:
+                        enum:
+                          - 5
+                          - 6
+
+                    required:
+                      - phy-mode
+
+      required:
+        - mediatek,mcm
+
 unevaluatedProperties: false
 
 examples:
-- 
2.34.1

Re: [PATCH 4/4] dt-bindings: net: dsa: mediatek,mt7530: update json-schema
Posted by Krzysztof Kozlowski 2 years, 1 month ago
On 30/07/2022 16:26, Arınç ÜNAL wrote:
> Update the json-schema for compatible devices.
> 
> - Define acceptable phy-mode values for CPU port of each compatible device.
> - Remove requiring the "reg" property since the referred dsa-port.yaml
> already does that.
> - Require mediatek,mcm for the described MT7621 SoCs as the compatible
> string is only used for MT7530 which is a part of the multi-chip module.

3 separate patches.

> 
> Signed-off-by: Arınç ÜNAL <arinc.unal@arinc9.com>
> ---
>  .../bindings/net/dsa/mediatek,mt7530.yaml     | 220 +++++++++++++++---
>  1 file changed, 191 insertions(+), 29 deletions(-)
> 
> diff --git a/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml b/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
> index a88e650e910b..a37a14fba9f6 100644
> --- a/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
> +++ b/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
> @@ -135,35 +135,6 @@ properties:
>        the ethsys.
>      maxItems: 1
>  
> -patternProperties:
> -  "^(ethernet-)?ports$":
> -    type: object

Actually four patches...

I don't find this change explained in commit msg. What is more, it looks
incorrect. All properties and patternProperties should be explained in
top-level part.

Defining such properties (with big piece of YAML) in each if:then: is no
readable.

> -
> -    patternProperties:


Best regards,
Krzysztof
Re: [PATCH 4/4] dt-bindings: net: dsa: mediatek,mt7530: update json-schema
Posted by Arınç ÜNAL 2 years, 1 month ago
On 2.08.2022 11:46, Krzysztof Kozlowski wrote:
> On 30/07/2022 16:26, Arınç ÜNAL wrote:
>> Update the json-schema for compatible devices.
>>
>> - Define acceptable phy-mode values for CPU port of each compatible device.
>> - Remove requiring the "reg" property since the referred dsa-port.yaml
>> already does that.
>> - Require mediatek,mcm for the described MT7621 SoCs as the compatible
>> string is only used for MT7530 which is a part of the multi-chip module.
> 
> 3 separate patches.

Roger.

> 
>>
>> Signed-off-by: Arınç ÜNAL <arinc.unal@arinc9.com>
>> ---
>>   .../bindings/net/dsa/mediatek,mt7530.yaml     | 220 +++++++++++++++---
>>   1 file changed, 191 insertions(+), 29 deletions(-)
>>
>> diff --git a/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml b/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
>> index a88e650e910b..a37a14fba9f6 100644
>> --- a/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
>> +++ b/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml
>> @@ -135,35 +135,6 @@ properties:
>>         the ethsys.
>>       maxItems: 1
>>   
>> -patternProperties:
>> -  "^(ethernet-)?ports$":
>> -    type: object
> 
> Actually four patches...
> 
> I don't find this change explained in commit msg. What is more, it looks
> incorrect. All properties and patternProperties should be explained in
> top-level part.
> 
> Defining such properties (with big piece of YAML) in each if:then: is no
> readable.

I can't figure out another way. I need to require certain properties for 
a compatible string AND certain enum/const for certain properties which 
are inside patternProperties for "^(ethernet-)?port@[0-9]+$" by reading 
the compatible string.

If I put allOf:if:then under patternProperties, I can't do the latter.

Other than readability to human eyes, binding check works as intended, 
in case there's no other way to do it.

Arınç
Re: [PATCH 4/4] dt-bindings: net: dsa: mediatek,mt7530: update json-schema
Posted by Krzysztof Kozlowski 2 years, 1 month ago
On 12/08/2022 01:09, Arınç ÜNAL wrote:
>>> -patternProperties:
>>> -  "^(ethernet-)?ports$":
>>> -    type: object
>>
>> Actually four patches...
>>
>> I don't find this change explained in commit msg. What is more, it looks
>> incorrect. All properties and patternProperties should be explained in
>> top-level part.
>>
>> Defining such properties (with big piece of YAML) in each if:then: is no
>> readable.
> 
> I can't figure out another way. I need to require certain properties for 
> a compatible string AND certain enum/const for certain properties which 
> are inside patternProperties for "^(ethernet-)?port@[0-9]+$" by reading 
> the compatible string.

requiring properties is not equal to defining them and nothing stops you
from defining all properties top-level and requiring them in
allOf:if:then:patternProperties.


> If I put allOf:if:then under patternProperties, I can't do the latter.

You can.

> 
> Other than readability to human eyes, binding check works as intended, 
> in case there's no other way to do it.

I don't see the problem in doing it and readability is one of main
factors of code admission to Linux kernel.

Best regards,
Krzysztof
Re: [PATCH 4/4] dt-bindings: net: dsa: mediatek,mt7530: update json-schema
Posted by Krzysztof Kozlowski 2 years, 1 month ago
On 12/08/2022 09:57, Krzysztof Kozlowski wrote:
> On 12/08/2022 01:09, Arınç ÜNAL wrote:
>>>> -patternProperties:
>>>> -  "^(ethernet-)?ports$":
>>>> -    type: object
>>>
>>> Actually four patches...
>>>
>>> I don't find this change explained in commit msg. What is more, it looks
>>> incorrect. All properties and patternProperties should be explained in
>>> top-level part.
>>>
>>> Defining such properties (with big piece of YAML) in each if:then: is no
>>> readable.
>>
>> I can't figure out another way. I need to require certain properties for 
>> a compatible string AND certain enum/const for certain properties which 
>> are inside patternProperties for "^(ethernet-)?port@[0-9]+$" by reading 
>> the compatible string.
> 
> requiring properties is not equal to defining them and nothing stops you
> from defining all properties top-level and requiring them in
> allOf:if:then:patternProperties.
> 
> 
>> If I put allOf:if:then under patternProperties, I can't do the latter.
> 
> You can.
> 
>>
>> Other than readability to human eyes, binding check works as intended, 
>> in case there's no other way to do it.
> 
> I don't see the problem in doing it and readability is one of main
> factors of code admission to Linux kernel.

One more thought - if your schema around allOf:if:then grows too much,
it is actually a sign that it might benefit from splitting. Either into
two separate schemas or into common+two separate.

Best regards,
Krzysztof
Re: [PATCH 4/4] dt-bindings: net: dsa: mediatek,mt7530: update json-schema
Posted by Arınç ÜNAL 2 years, 1 month ago
On 12.08.2022 10:01, Krzysztof Kozlowski wrote:
> On 12/08/2022 09:57, Krzysztof Kozlowski wrote:
>> On 12/08/2022 01:09, Arınç ÜNAL wrote:
>>>>> -patternProperties:
>>>>> -  "^(ethernet-)?ports$":
>>>>> -    type: object
>>>>
>>>> Actually four patches...
>>>>
>>>> I don't find this change explained in commit msg. What is more, it looks
>>>> incorrect. All properties and patternProperties should be explained in
>>>> top-level part.
>>>>
>>>> Defining such properties (with big piece of YAML) in each if:then: is no
>>>> readable.
>>>
>>> I can't figure out another way. I need to require certain properties for
>>> a compatible string AND certain enum/const for certain properties which
>>> are inside patternProperties for "^(ethernet-)?port@[0-9]+$" by reading
>>> the compatible string.
>>
>> requiring properties is not equal to defining them and nothing stops you
>> from defining all properties top-level and requiring them in
>> allOf:if:then:patternProperties.
>>
>>
>>> If I put allOf:if:then under patternProperties, I can't do the latter.
>>
>> You can.

Am I supposed to do something like this:

patternProperties:
   "^(ethernet-)?ports$":
     type: object

     patternProperties:
       "^(ethernet-)?port@[0-9]+$":
         type: object
         description: Ethernet switch ports

         unevaluatedProperties: false

         properties:
           reg:
             description:
               Port address described must be 5 or 6 for CPU port and
               from 0 to 5 for user ports.

         allOf:
           - $ref: dsa-port.yaml#
           - if:
               properties:
                 label:
                   items:
                     - const: cpu
             then:
               allOf:
                 - if:
                     properties:
                       compatible:
                         items:
                           - const: mediatek,mt7530
                           - const: mediatek,mt7621
                   then:
                     allOf:
                       - if:
                           properties:
                             reg:
                               const: 5
                         then:
                           properties:
                             phy-mode:
                               enum:
                                 - gmii
                                 - mii
                                 - rgmii

                       - if:
                           properties:
                             reg:
                               const: 6
                         then:
                           properties:
                             phy-mode:
                               enum:
                                 - rgmii
                                 - trgmii

                 - if:
                     properties:
                       compatible:
                         items:
                           - const: mediatek,mt7531
                   then:
                     allOf:
                       - if:
                           properties:
                             reg:
                               const: 5
                         then:
                           properties:
                             phy-mode:
                               enum:
                                 - 1000base-x
                                 - 2500base-x
                                 - rgmii
                                 - sgmii

                       - if:
                           properties:
                             reg:
                               const: 6
                         then:
                           properties:
                             phy-mode:
                               enum:
                                 - 1000base-x
                                 - 2500base-x
                                 - sgmii

               properties:
                 reg:
                   enum:
                     - 5
                     - 6

               required:
                 - phy-mode

>>
>>>
>>> Other than readability to human eyes, binding check works as intended,
>>> in case there's no other way to do it.
>>
>> I don't see the problem in doing it and readability is one of main
>> factors of code admission to Linux kernel.
> 
> One more thought - if your schema around allOf:if:then grows too much,
> it is actually a sign that it might benefit from splitting. Either into
> two separate schemas or into common+two separate.
> 
> Best regards,
> Krzysztof

Arınç