diff mbox series

[RFC] dt-bindings: power: sysc-remobile: Convert to json-schema

Message ID 20210127132840.2019595-1-geert+renesas@glider.be (mailing list archive)
State RFC, archived
Headers show
Series [RFC] dt-bindings: power: sysc-remobile: Convert to json-schema | expand

Commit Message

Geert Uytterhoeven Jan. 27, 2021, 1:28 p.m. UTC
Convert the Renesas R-Mobile System Controller (SYSC) Device Tree
binding documentation to json-schema.

Document missing properties.
Drop consumer example, as it does not belong here.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
Marked RFC, as it does not check deeper levels than the first level of
the "pm-domains" subnode.

I think the reference in

    additionalProperties:
	$ref: "#/patternProperties"

should become "#/patternProperties/0/additionalProperties", but that
gives:

    Unresolvable JSON pointer: 'patternProperties/0/additionalProperties'

https://opis.io/json-schema/1.x/pointers.html taught me about relative
SJON pointers, but "2/additionalProperties" and "2/0" fail with

    Unknown file referenced: [Errno 2] No such file or directory: 'dt-schema/dtschema/schemas/power/2/additionalProperties'
    Unknown file referenced: [Errno 2] No such file or directory: 'dt-schema/dtschema/schemas/power/2/0'

Anyone with a clue?

Thanks!
---
 .../bindings/power/renesas,sysc-rmobile.txt   | 100 ---------------
 .../bindings/power/renesas,sysc-rmobile.yaml  | 117 ++++++++++++++++++
 2 files changed, 117 insertions(+), 100 deletions(-)
 delete mode 100644 Documentation/devicetree/bindings/power/renesas,sysc-rmobile.txt
 create mode 100644 Documentation/devicetree/bindings/power/renesas,sysc-rmobile.yaml

Comments

Rob Herring (Arm) Feb. 9, 2021, 7:20 p.m. UTC | #1
On Wed, Jan 27, 2021 at 02:28:40PM +0100, Geert Uytterhoeven wrote:
> Convert the Renesas R-Mobile System Controller (SYSC) Device Tree
> binding documentation to json-schema.
> 
> Document missing properties.
> Drop consumer example, as it does not belong here.
> 
> Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
> ---
> Marked RFC, as it does not check deeper levels than the first level of
> the "pm-domains" subnode.
> 
> I think the reference in
> 
>     additionalProperties:
> 	$ref: "#/patternProperties"
> 
> should become "#/patternProperties/0/additionalProperties", but that
> gives:
> 
>     Unresolvable JSON pointer: 'patternProperties/0/additionalProperties'

AFAIK, numbers only work on lists (such as 'allOf' values). So I think 
you'd want '#/patternProperties/^pm-domains$/additionalProperties'. 
However, regex's can have illegal characters. I think URI escaping them 
would work, but that gets too readable and unmaintainable for my tastes. 
The other way to do this is put the schema under a '$defs'. But in your 
case, you have just a fixed string, so there's no need for it to be a 
pattern. Just move it to 'properties'.

Otherwise, looks good to me.

Rob
Geert Uytterhoeven March 9, 2021, 12:56 p.m. UTC | #2
Hi Rob,

On Tue, Feb 9, 2021 at 8:20 PM Rob Herring <robh@kernel.org> wrote:
> On Wed, Jan 27, 2021 at 02:28:40PM +0100, Geert Uytterhoeven wrote:
> > Convert the Renesas R-Mobile System Controller (SYSC) Device Tree
> > binding documentation to json-schema.
> >
> > Document missing properties.
> > Drop consumer example, as it does not belong here.
> >
> > Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
> > ---
> > Marked RFC, as it does not check deeper levels than the first level of
> > the "pm-domains" subnode.
> >
> > I think the reference in
> >
> >     additionalProperties:
> >       $ref: "#/patternProperties"
> >
> > should become "#/patternProperties/0/additionalProperties", but that
> > gives:
> >
> >     Unresolvable JSON pointer: 'patternProperties/0/additionalProperties'
>
> AFAIK, numbers only work on lists (such as 'allOf' values). So I think
> you'd want '#/patternProperties/^pm-domains$/additionalProperties'.
> However, regex's can have illegal characters. I think URI escaping them
> would work, but that gets too readable and unmaintainable for my tastes.
> The other way to do this is put the schema under a '$defs'. But in your
> case, you have just a fixed string, so there's no need for it to be a
> pattern. Just move it to 'properties'.

Thank you, I've dropped the patternProperties/regex, and moved the
section to properties.

The result fails with:

    Documentation/devicetree/bindings/power/renesas,sysc-rmobile.example.dt.yaml:
system-controller@e6180000: pm-domains:c5:a4s@10: missing phandle tag
in {'reg': [[10]], '#address-cells': [[1]], '#size-cells': [[0]],
'#power-domain-cells': [[0]], 'a3sp@11': {'reg': [[11]],
'#power-domain-cells': [[0]]}}
    From schema:
Documentation/devicetree/bindings/power/renesas,sysc-rmobile.yaml
    Documentation/devicetree/bindings/power/renesas,sysc-rmobile.example.dt.yaml:
system-controller@e6180000: pm-domains:c5:a4su@20: missing phandle tag
in {'reg': [[20]], '#power-domain-cells': [[0]]}
    From schema:
Documentation/devicetree/bindings/power/renesas,sysc-rmobile.yaml

Looking at Documentation/devicetree/bindings/power/renesas,sysc-rmobile.example.dt.yaml
there's indeed no "phandle: [[0x1]]" generated, while there is in
Documentation/devicetree/bindings/power/renesas,rcar-sysc.example.dt.yaml.

Reading other responses from you, that error means that "phandle-array"
should be used instead of "phandle".  The only question is where?

Thanks again!

Gr{oetje,eeting}s,

                        Geert
diff mbox series

Patch

diff --git a/Documentation/devicetree/bindings/power/renesas,sysc-rmobile.txt b/Documentation/devicetree/bindings/power/renesas,sysc-rmobile.txt
deleted file mode 100644
index 49aba15dff8b7e4d..0000000000000000
--- a/Documentation/devicetree/bindings/power/renesas,sysc-rmobile.txt
+++ /dev/null
@@ -1,100 +0,0 @@ 
-DT bindings for the Renesas R-Mobile System Controller
-
-== System Controller Node ==
-
-The R-Mobile System Controller provides the following functions:
-  - Boot mode management,
-  - Reset generation,
-  - Power management.
-
-Required properties:
-- compatible: Should be "renesas,sysc-<soctype>", "renesas,sysc-rmobile" as
-	      fallback.
-	      Examples with soctypes are:
-		- "renesas,sysc-r8a73a4" (R-Mobile APE6)
-		- "renesas,sysc-r8a7740" (R-Mobile A1)
-		- "renesas,sysc-sh73a0" (SH-Mobile AG5)
-- reg: Two address start and address range blocks for the device:
-         - The first block refers to the normally accessible registers,
-         - the second block refers to the registers protected by the HPB
-	   semaphore.
-
-Optional nodes:
-- pm-domains: This node contains a hierarchy of PM domain nodes, which should
-  match the Power Area Hierarchy in the Power Domain Specifications section of
-  the device's datasheet.
-
-
-== PM Domain Nodes ==
-
-Each of the PM domain nodes represents a PM domain, as documented by the
-generic PM domain bindings in
-Documentation/devicetree/bindings/power/power-domain.yaml.
-
-The nodes should be named by the real power area names, and thus their names
-should be unique.
-
-Required properties:
-  - #power-domain-cells: Must be 0.
-
-Optional properties:
-- reg: If the PM domain is not always-on, this property must contain the bit
-       index number for the corresponding power area in the various Power
-       Control and Status Registers. The parent's node must contain the
-       following two properties:
-	 - #address-cells: Must be 1,
-	 - #size-cells: Must be 0.
-       If the PM domain is always-on, this property must be omitted.
-
-
-Example:
-
-This shows a subset of the r8a7740 PM domain hierarchy, containing the
-C5 "always-on" domain, 2 of its subdomains (A4S and A4SU), and the A3SP domain,
-which is a subdomain of A4S.
-
-	sysc: system-controller@e6180000 {
-		compatible = "renesas,sysc-r8a7740", "renesas,sysc-rmobile";
-		reg = <0xe6180000 0x8000>, <0xe6188000 0x8000>;
-
-		pm-domains {
-			pd_c5: c5 {
-				#address-cells = <1>;
-				#size-cells = <0>;
-				#power-domain-cells = <0>;
-
-				pd_a4s: a4s@10 {
-					reg = <10>;
-					#address-cells = <1>;
-					#size-cells = <0>;
-					#power-domain-cells = <0>;
-
-					pd_a3sp: a3sp@11 {
-						reg = <11>;
-						#power-domain-cells = <0>;
-					};
-				};
-
-				pd_a4su: a4su@20 {
-					reg = <20>;
-					#power-domain-cells = <0>;
-				};
-			};
-		};
-	};
-
-
-== PM Domain Consumers ==
-
-Hardware blocks belonging to a PM domain should contain a "power-domains"
-property that is a phandle pointing to the corresponding PM domain node.
-
-Example:
-
-	tpu: pwm@e6600000 {
-		compatible = "renesas,tpu-r8a7740", "renesas,tpu";
-		reg = <0xe6600000 0x100>;
-		clocks = <&mstp3_clks R8A7740_CLK_TPU0>;
-		power-domains = <&pd_a3sp>;
-		#pwm-cells = <3>;
-	};
diff --git a/Documentation/devicetree/bindings/power/renesas,sysc-rmobile.yaml b/Documentation/devicetree/bindings/power/renesas,sysc-rmobile.yaml
new file mode 100644
index 0000000000000000..2081d8c59b91beee
--- /dev/null
+++ b/Documentation/devicetree/bindings/power/renesas,sysc-rmobile.yaml
@@ -0,0 +1,117 @@ 
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: "http://devicetree.org/schemas/power/renesas,sysc-rmobile.yaml#"
+$schema: "http://devicetree.org/meta-schemas/core.yaml#"
+
+title: Renesas R-Mobile System Controller
+
+maintainers:
+  - Geert Uytterhoeven <geert+renesas@glider.be>
+  - Magnus Damm <magnus.damm@gmail.com>
+
+description: |
+  The R-Mobile System Controller provides the following functions:
+    - Boot mode management,
+    - Reset generation,
+    - Power management.
+
+properties:
+  compatible:
+    items:
+      - enum:
+          - renesas,sysc-r8a73a4    # R-Mobile APE6
+          - renesas,sysc-r8a7740    # R-Mobile A1
+          - renesas,sysc-sh73a0     # SH-Mobile AG5
+      - const: renesas,sysc-rmobile # Generic SH/R-Mobile
+
+  reg:
+    items:
+      - description: Normally accessible register block
+      - description: Register block protected by the HPB semaphore
+
+required:
+  - compatible
+  - reg
+
+patternProperties:
+  "^pm-domains$":
+    type: object
+    description: |
+      This node contains a hierarchy of PM domain nodes, which should match the
+      Power Area Hierarchy in the Power Domain Specifications section of the
+      device's datasheet.
+
+    properties:
+      '#address-cells':
+        const: 1
+
+      '#size-cells':
+        const: 0
+
+    additionalProperties:
+      type: object
+      description:
+        PM domain node representing a PM domain.  This node hould be named by
+        the real power area names, and thus its names should be unique.
+
+      properties:
+        '#address-cells':
+          const: 1
+
+        '#size-cells':
+          const: 0
+
+        reg:
+          maxItems: 1
+          description:
+            If the PM domain is not always-on, this property must contain the
+            bit index number for the corresponding power area in the various
+            Power Control and Status Registers.
+            If the PM domain is always-on, this property must be omitted.
+
+        '#power-domain-cells':
+          const: 0
+
+      required:
+        - '#power-domain-cells'
+
+      additionalProperties:
+        $ref: "#/patternProperties"
+
+additionalProperties: false
+
+examples:
+  - |
+    // This shows a subset of the r8a7740 PM domain hierarchy, containing the
+    // C5 "always-on" domain, 2 of its subdomains (A4S and A4SU), and the A3SP
+    // domain, which is a subdomain of A4S.
+    sysc: system-controller@e6180000 {
+            compatible = "renesas,sysc-r8a7740", "renesas,sysc-rmobile";
+            reg = <0xe6180000 0x8000>, <0xe6188000 0x8000>;
+
+            pm-domains {
+                    pd_c5: c5 {
+                            #address-cells = <1>;
+                            #size-cells = <0>;
+                            #power-domain-cells = <0>;
+
+                            pd_a4s: a4s@10 {
+                                    reg = <10>;
+                                    #address-cells = <1>;
+                                    #size-cells = <0>;
+                                    #power-domain-cells = <0>;
+
+                                    pd_a3sp: a3sp@11 {
+                                            reg = <11>;
+                                            #power-domain-cells = <0>;
+                                    };
+                            };
+
+                            pd_a4su: a4su@20 {
+                                    reg = <20>;
+                                    #power-domain-cells = <0>;
+                            };
+                    };
+            };
+    };