2021-01-28 00:00:05

by Geert Uytterhoeven

[permalink] [raw]
Subject: [PATCH] [RFC] dt-bindings: power: sysc-remobile: Convert to json-schema

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 <[email protected]>
---
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

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 <[email protected]>
+ - Magnus Damm <[email protected]>
+
+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>;
+ };
+ };
+ };
+ };
--
2.25.1


2021-02-10 08:06:27

by Rob Herring (Arm)

[permalink] [raw]
Subject: Re: [PATCH] [RFC] dt-bindings: power: sysc-remobile: Convert to json-schema

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 <[email protected]>
> ---
> 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

2021-03-09 12:58:54

by Geert Uytterhoeven

[permalink] [raw]
Subject: Re: [PATCH] [RFC] dt-bindings: power: sysc-remobile: Convert to json-schema

Hi Rob,

On Tue, Feb 9, 2021 at 8:20 PM Rob Herring <[email protected]> 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 <[email protected]>
> > ---
> > 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

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds