diff mbox series

[v3] dt-bindings: power: rockchip: Convert to json-schema

Message ID 20200921092951.945382-1-enric.balletbo@collabora.com (mailing list archive)
State New, archived
Headers show
Series [v3] dt-bindings: power: rockchip: Convert to json-schema | expand

Commit Message

Enric Balletbo i Serra Sept. 21, 2020, 9:29 a.m. UTC
Convert the soc/rockchip/power_domain.txt binding document to json-schema
and move to the power bindings directory.

Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
---

Changes in v3:
- Fixed tab errors found by bot

Changes in v2:
- Fixed a warning that says that 'syscon' should not be used alone.
- Use patternProperties to define a new level for power-domains.
- Add const values for power-domain-cells, address-cells, etc.

 .../power/rockchip,power-controller.yaml      | 207 ++++++++++++++++++
 .../bindings/soc/rockchip/power_domain.txt    | 136 ------------
 2 files changed, 207 insertions(+), 136 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/power/rockchip,power-controller.yaml
 delete mode 100644 Documentation/devicetree/bindings/soc/rockchip/power_domain.txt

Comments

Rob Herring (Arm) Oct. 7, 2020, 3:11 p.m. UTC | #1
On Mon, Sep 21, 2020 at 11:29:51AM +0200, Enric Balletbo i Serra wrote:
> Convert the soc/rockchip/power_domain.txt binding document to json-schema
> and move to the power bindings directory.
> 
> Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
> ---
> 
> Changes in v3:
> - Fixed tab errors found by bot
> 
> Changes in v2:
> - Fixed a warning that says that 'syscon' should not be used alone.
> - Use patternProperties to define a new level for power-domains.
> - Add const values for power-domain-cells, address-cells, etc.
> 
>  .../power/rockchip,power-controller.yaml      | 207 ++++++++++++++++++
>  .../bindings/soc/rockchip/power_domain.txt    | 136 ------------
>  2 files changed, 207 insertions(+), 136 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/power/rockchip,power-controller.yaml
>  delete mode 100644 Documentation/devicetree/bindings/soc/rockchip/power_domain.txt
> 
> diff --git a/Documentation/devicetree/bindings/power/rockchip,power-controller.yaml b/Documentation/devicetree/bindings/power/rockchip,power-controller.yaml
> new file mode 100644
> index 000000000000..b23ea37e2a08
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/power/rockchip,power-controller.yaml
> @@ -0,0 +1,207 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/power/rockchip,power-controller.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Rockchip Power Domains
> +
> +maintainers:
> +  - Caesar Wang <wxt@rock-chips.com>
> +  - Heiko Stuebner <heiko@sntech.de>
> +
> +description: |
> +  Rockchip processors include support for multiple power domains which can be
> +  powered up/down by software based on different application scenes to save power.
> +
> +  Power domains contained within power-controller node are generic power domain
> +  providers documented in Documentation/devicetree/bindings/power/power-domain.yaml.
> +
> +  IP cores belonging to a power domain should contain a 'power-domains'
> +  property that is a phandle for the power domain node representing the domain.
> +
> +properties:
> +  $nodename:
> +    const: power-controller
> +
> +  compatible:
> +    enum:
> +      - rockchip,px30-power-controller
> +      - rockchip,rk3036-power-controller
> +      - rockchip,rk3066-power-controller
> +      - rockchip,rk3128-power-controller
> +      - rockchip,rk3188-power-controller
> +      - rockchip,rk3228-power-controller
> +      - rockchip,rk3288-power-controller
> +      - rockchip,rk3328-power-controller
> +      - rockchip,rk3366-power-controller
> +      - rockchip,rk3368-power-controller
> +      - rockchip,rk3399-power-controller
> +
> +  '#power-domain-cells':
> +    const: 1
> +
> +  '#address-cells':
> +    const: 1
> +
> +  '#size-cells':
> +    const: 0
> +
> +patternProperties:
> +  "^power-domain@[0-9]+$":

unit-addresses are hex.

> +    type: object
> +    description: |
> +      Represents the power domains within the power controller node as documented
> +      in Documentation/devicetree/bindings/power/power-domain.yaml.
> +
> +    properties:
> +
> +      '#power-domain-cells':
> +        description:
> +            Must be 0 for nodes representing a single PM domain and 1 for nodes
> +            providing multiple PM domains.
> +
> +      '#address-cells':
> +        const: 1
> +
> +      '#size-cells':
> +        const: 0
> +
> +      reg:
> +        description: |
> +          Power domain index. Valid values are defined in:
> +          "include/dt-bindings/power/px30-power.h" - for PX30 type power domain.
> +          "include/dt-bindings/power/rk3036-power.h" - for RK3036 type power domain.
> +          "include/dt-bindings/power/rk3066-power.h" - for RK3066 type power domain.
> +          "include/dt-bindings/power/rk3128-power.h" - for RK3128 type power domain.
> +          "include/dt-bindings/power/rk3188-power.h" - for RK3188 type power domain.
> +          "include/dt-bindings/power/rk3228-power.h" - for RK3228 type power domain.
> +          "include/dt-bindings/power/rk3288-power.h" - for RK3288 type power domain.
> +          "include/dt-bindings/power/rk3328-power.h" - for RK3328 type power domain.
> +          "include/dt-bindings/power/rk3366-power.h" - for RK3366 type power domain.
> +          "include/dt-bindings/power/rk3368-power.h" - for RK3368 type power domain.
> +          "include/dt-bindings/power/rk3399-power.h" - for RK3399 type power domain.
> +        maxItems: 1

Range of values?

> +
> +      clocks:
> +        description: |
> +          A number of phandles to clocks that need to be enabled while power domain
> +          switches state.

Can you at least put a range of how many clocks?

> +
> +      pm_qos:
> +        description: |
> +          A number of phandles to qos blocks which need to be saved and restored
> +          while power domain switches state.

And here.

> +
> +    required:
> +      - reg

       additionalProperties: false

Which in turn means the nested power domains will throw an error, so you 
can do:

       patternProperties:
	 "^power-domain@[0-9a-f]+$":
           $ref: '#/patternProperties/^power-domain@[0-9a-f]+$'

> +
> +required:
> +  - compatible
> +  - '#power-domain-cells'
> +
> +additionalProperties: false
> +
> +examples:
> +  - |
> +    #include <dt-bindings/clock/rk3399-cru.h>
> +    #include <dt-bindings/power/rk3399-power.h>
> +
> +    soc {
> +        #address-cells = <2>;
> +        #size-cells = <2>;
> +
> +        qos_hdcp: qos@ffa90000 {
> +            compatible = "rockchip,rk3399-qos","syscon";

space                                             ^

> +            reg = <0x0 0xffa90000 0x0 0x20>;
> +        };
> +
> +        qos_iep: qos@ffa98000 {
> +            compatible = "rk3399-qos","syscon";
> +            reg = <0x0 0xffa98000 0x0 0x20>;
> +        };
> +
> +        qos_rga_r: qos@ffab0000 {
> +            compatible = "rk3399-qos","syscon";
> +            reg = <0x0 0xffab0000 0x0 0x20>;
> +        };
> +
> +        qos_rga_w: qos@ffab0080 {
> +            compatible = "rk3399-qos","syscon";
> +            reg = <0x0 0xffab0080 0x0 0x20>;
> +        };
> +
> +        qos_video_m0: qos@ffab8000 {
> +            compatible = "rk3399-qos","syscon";
> +            reg = <0x0 0xffab8000 0x0 0x20>;
> +        };
> +
> +        qos_video_m1_r: qos@ffac0000 {
> +            compatible = "rk3399-qos","syscon";
> +            reg = <0x0 0xffac0000 0x0 0x20>;
> +        };
> +
> +        qos_video_m1_w: qos@ffac0080 {
> +            compatible = "rk3399-qos","syscon";
> +            reg = <0x0 0xffac0080 0x0 0x20>;
> +        };
> +
> +        power-management@ff310000 {
> +            compatible = "rockchip,rk3399-pmu", "syscon", "simple-mfd";
> +            reg = <0x0 0xff310000 0x0 0x1000>;
> +
> +            power-controller {
> +                compatible = "rockchip,rk3399-power-controller";
> +                #power-domain-cells = <1>;
> +                #address-cells = <1>;
> +                #size-cells = <0>;
> +
> +                /* These power domains are grouped by VD_CENTER */
> +                power-domain@RK3399_PD_IEP {
> +                    reg = <RK3399_PD_IEP>;
> +                    clocks = <&cru ACLK_IEP>,
> +                             <&cru HCLK_IEP>;
> +                    pm_qos = <&qos_iep>;
> +                    #power-domain-cells = <0>;
> +                };
> +                power-domain@RK3399_PD_RGA {
> +                    reg = <RK3399_PD_RGA>;
> +                    clocks = <&cru ACLK_RGA>,
> +                             <&cru HCLK_RGA>;
> +                    pm_qos = <&qos_rga_r>,
> +                             <&qos_rga_w>;
> +                    #power-domain-cells = <0>;
> +                };
> +                power-domain@RK3399_PD_VCODEC {
> +                    reg = <RK3399_PD_VCODEC>;
> +                    clocks = <&cru ACLK_VCODEC>,
> +                             <&cru HCLK_VCODEC>;
> +                    pm_qos = <&qos_video_m0>;
> +                    #power-domain-cells = <0>;
> +                };
> +                power-domain@RK3399_PD_VDU {
> +                    reg = <RK3399_PD_VDU>;
> +                    clocks = <&cru ACLK_VDU>,
> +                             <&cru HCLK_VDU>;
> +                    pm_qos = <&qos_video_m1_r>,
> +                             <&qos_video_m1_w>;
> +                    #power-domain-cells = <0>;
> +                };
> +                power-domain@RK3399_PD_VIO {
> +                    reg = <RK3399_PD_VIO>;
> +                    #power-domain-cells = <1>;
> +                    #address-cells = <1>;
> +                    #size-cells = <0>;
> +
> +                    power-domain@RK3399_PD_HDCP {
> +                        reg = <RK3399_PD_HDCP>;
> +                        clocks = <&cru ACLK_HDCP>,
> +                                 <&cru HCLK_HDCP>,
> +                                 <&cru PCLK_HDCP>;
> +                        pm_qos = <&qos_hdcp>;
> +                        #power-domain-cells = <0>;
> +                    };
> +                };
> +            };
> +        };
> +    };
Enric Balletbo Serra Oct. 7, 2020, 8:57 p.m. UTC | #2
Hi Rob,

Missatge de Rob Herring <robh@kernel.org> del dia dc., 7 d’oct. 2020 a
les 17:12:
>
> On Mon, Sep 21, 2020 at 11:29:51AM +0200, Enric Balletbo i Serra wrote:
> > Convert the soc/rockchip/power_domain.txt binding document to json-schema
> > and move to the power bindings directory.
> >
> > Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
> > ---
> >
> > Changes in v3:
> > - Fixed tab errors found by bot
> >
> > Changes in v2:
> > - Fixed a warning that says that 'syscon' should not be used alone.
> > - Use patternProperties to define a new level for power-domains.
> > - Add const values for power-domain-cells, address-cells, etc.
> >
> >  .../power/rockchip,power-controller.yaml      | 207 ++++++++++++++++++
> >  .../bindings/soc/rockchip/power_domain.txt    | 136 ------------
> >  2 files changed, 207 insertions(+), 136 deletions(-)
> >  create mode 100644 Documentation/devicetree/bindings/power/rockchip,power-controller.yaml
> >  delete mode 100644 Documentation/devicetree/bindings/soc/rockchip/power_domain.txt
> >
> > diff --git a/Documentation/devicetree/bindings/power/rockchip,power-controller.yaml b/Documentation/devicetree/bindings/power/rockchip,power-controller.yaml
> > new file mode 100644
> > index 000000000000..b23ea37e2a08
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/power/rockchip,power-controller.yaml
> > @@ -0,0 +1,207 @@
> > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> > +%YAML 1.2
> > +---
> > +$id: http://devicetree.org/schemas/power/rockchip,power-controller.yaml#
> > +$schema: http://devicetree.org/meta-schemas/core.yaml#
> > +
> > +title: Rockchip Power Domains
> > +
> > +maintainers:
> > +  - Caesar Wang <wxt@rock-chips.com>
> > +  - Heiko Stuebner <heiko@sntech.de>
> > +
> > +description: |
> > +  Rockchip processors include support for multiple power domains which can be
> > +  powered up/down by software based on different application scenes to save power.
> > +
> > +  Power domains contained within power-controller node are generic power domain
> > +  providers documented in Documentation/devicetree/bindings/power/power-domain.yaml.
> > +
> > +  IP cores belonging to a power domain should contain a 'power-domains'
> > +  property that is a phandle for the power domain node representing the domain.
> > +
> > +properties:
> > +  $nodename:
> > +    const: power-controller
> > +
> > +  compatible:
> > +    enum:
> > +      - rockchip,px30-power-controller
> > +      - rockchip,rk3036-power-controller
> > +      - rockchip,rk3066-power-controller
> > +      - rockchip,rk3128-power-controller
> > +      - rockchip,rk3188-power-controller
> > +      - rockchip,rk3228-power-controller
> > +      - rockchip,rk3288-power-controller
> > +      - rockchip,rk3328-power-controller
> > +      - rockchip,rk3366-power-controller
> > +      - rockchip,rk3368-power-controller
> > +      - rockchip,rk3399-power-controller
> > +
> > +  '#power-domain-cells':
> > +    const: 1
> > +
> > +  '#address-cells':
> > +    const: 1
> > +
> > +  '#size-cells':
> > +    const: 0
> > +
> > +patternProperties:
> > +  "^power-domain@[0-9]+$":
>
> unit-addresses are hex.
>
> > +    type: object
> > +    description: |
> > +      Represents the power domains within the power controller node as documented
> > +      in Documentation/devicetree/bindings/power/power-domain.yaml.
> > +
> > +    properties:
> > +
> > +      '#power-domain-cells':
> > +        description:
> > +            Must be 0 for nodes representing a single PM domain and 1 for nodes
> > +            providing multiple PM domains.
> > +
> > +      '#address-cells':
> > +        const: 1
> > +
> > +      '#size-cells':
> > +        const: 0
> > +
> > +      reg:
> > +        description: |
> > +          Power domain index. Valid values are defined in:
> > +          "include/dt-bindings/power/px30-power.h" - for PX30 type power domain.
> > +          "include/dt-bindings/power/rk3036-power.h" - for RK3036 type power domain.
> > +          "include/dt-bindings/power/rk3066-power.h" - for RK3066 type power domain.
> > +          "include/dt-bindings/power/rk3128-power.h" - for RK3128 type power domain.
> > +          "include/dt-bindings/power/rk3188-power.h" - for RK3188 type power domain.
> > +          "include/dt-bindings/power/rk3228-power.h" - for RK3228 type power domain.
> > +          "include/dt-bindings/power/rk3288-power.h" - for RK3288 type power domain.
> > +          "include/dt-bindings/power/rk3328-power.h" - for RK3328 type power domain.
> > +          "include/dt-bindings/power/rk3366-power.h" - for RK3366 type power domain.
> > +          "include/dt-bindings/power/rk3368-power.h" - for RK3368 type power domain.
> > +          "include/dt-bindings/power/rk3399-power.h" - for RK3399 type power domain.
> > +        maxItems: 1
>
> Range of values?
>
> > +
> > +      clocks:
> > +        description: |
> > +          A number of phandles to clocks that need to be enabled while power domain
> > +          switches state.
>
> Can you at least put a range of how many clocks?
>
> > +
> > +      pm_qos:
> > +        description: |
> > +          A number of phandles to qos blocks which need to be saved and restored
> > +          while power domain switches state.
>
> And here.
>
> > +
> > +    required:
> > +      - reg
>
>        additionalProperties: false
>
> Which in turn means the nested power domains will throw an error, so you
> can do:
>
>        patternProperties:
>          "^power-domain@[0-9a-f]+$":
>            $ref: '#/patternProperties/^power-domain@[0-9a-f]+$'
>

When I tried this I got the following error:

rockchip,power-controller.yaml:
patternProperties:^power-domain@[0-9a-f]+$:patternProperties:^power-domain@[0-9a-f]+$:$ref:
'#/patternProperties/^power-domain@[0-9a-f]+$' is not a
'uri-reference'

Not sure if is my environment or I am still doing something silly, can
you confirm that this works for you? It doesn't seem to be any binding
doing this actually.

Thanks,
  Enric

> > +
> > +required:
> > +  - compatible
> > +  - '#power-domain-cells'
> > +
> > +additionalProperties: false
> > +
> > +examples:
> > +  - |
> > +    #include <dt-bindings/clock/rk3399-cru.h>
> > +    #include <dt-bindings/power/rk3399-power.h>
> > +
> > +    soc {
> > +        #address-cells = <2>;
> > +        #size-cells = <2>;
> > +
> > +        qos_hdcp: qos@ffa90000 {
> > +            compatible = "rockchip,rk3399-qos","syscon";
>
> space                                             ^
>
> > +            reg = <0x0 0xffa90000 0x0 0x20>;
> > +        };
> > +
> > +        qos_iep: qos@ffa98000 {
> > +            compatible = "rk3399-qos","syscon";
> > +            reg = <0x0 0xffa98000 0x0 0x20>;
> > +        };
> > +
> > +        qos_rga_r: qos@ffab0000 {
> > +            compatible = "rk3399-qos","syscon";
> > +            reg = <0x0 0xffab0000 0x0 0x20>;
> > +        };
> > +
> > +        qos_rga_w: qos@ffab0080 {
> > +            compatible = "rk3399-qos","syscon";
> > +            reg = <0x0 0xffab0080 0x0 0x20>;
> > +        };
> > +
> > +        qos_video_m0: qos@ffab8000 {
> > +            compatible = "rk3399-qos","syscon";
> > +            reg = <0x0 0xffab8000 0x0 0x20>;
> > +        };
> > +
> > +        qos_video_m1_r: qos@ffac0000 {
> > +            compatible = "rk3399-qos","syscon";
> > +            reg = <0x0 0xffac0000 0x0 0x20>;
> > +        };
> > +
> > +        qos_video_m1_w: qos@ffac0080 {
> > +            compatible = "rk3399-qos","syscon";
> > +            reg = <0x0 0xffac0080 0x0 0x20>;
> > +        };
> > +
> > +        power-management@ff310000 {
> > +            compatible = "rockchip,rk3399-pmu", "syscon", "simple-mfd";
> > +            reg = <0x0 0xff310000 0x0 0x1000>;
> > +
> > +            power-controller {
> > +                compatible = "rockchip,rk3399-power-controller";
> > +                #power-domain-cells = <1>;
> > +                #address-cells = <1>;
> > +                #size-cells = <0>;
> > +
> > +                /* These power domains are grouped by VD_CENTER */
> > +                power-domain@RK3399_PD_IEP {
> > +                    reg = <RK3399_PD_IEP>;
> > +                    clocks = <&cru ACLK_IEP>,
> > +                             <&cru HCLK_IEP>;
> > +                    pm_qos = <&qos_iep>;
> > +                    #power-domain-cells = <0>;
> > +                };
> > +                power-domain@RK3399_PD_RGA {
> > +                    reg = <RK3399_PD_RGA>;
> > +                    clocks = <&cru ACLK_RGA>,
> > +                             <&cru HCLK_RGA>;
> > +                    pm_qos = <&qos_rga_r>,
> > +                             <&qos_rga_w>;
> > +                    #power-domain-cells = <0>;
> > +                };
> > +                power-domain@RK3399_PD_VCODEC {
> > +                    reg = <RK3399_PD_VCODEC>;
> > +                    clocks = <&cru ACLK_VCODEC>,
> > +                             <&cru HCLK_VCODEC>;
> > +                    pm_qos = <&qos_video_m0>;
> > +                    #power-domain-cells = <0>;
> > +                };
> > +                power-domain@RK3399_PD_VDU {
> > +                    reg = <RK3399_PD_VDU>;
> > +                    clocks = <&cru ACLK_VDU>,
> > +                             <&cru HCLK_VDU>;
> > +                    pm_qos = <&qos_video_m1_r>,
> > +                             <&qos_video_m1_w>;
> > +                    #power-domain-cells = <0>;
> > +                };
> > +                power-domain@RK3399_PD_VIO {
> > +                    reg = <RK3399_PD_VIO>;
> > +                    #power-domain-cells = <1>;
> > +                    #address-cells = <1>;
> > +                    #size-cells = <0>;
> > +
> > +                    power-domain@RK3399_PD_HDCP {
> > +                        reg = <RK3399_PD_HDCP>;
> > +                        clocks = <&cru ACLK_HDCP>,
> > +                                 <&cru HCLK_HDCP>,
> > +                                 <&cru PCLK_HDCP>;
> > +                        pm_qos = <&qos_hdcp>;
> > +                        #power-domain-cells = <0>;
> > +                    };
> > +                };
> > +            };
> > +        };
> > +    };
>
> _______________________________________________
> Linux-rockchip mailing list
> Linux-rockchip@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-rockchip
Rob Herring (Arm) Oct. 8, 2020, 7:47 p.m. UTC | #3
On Wed, Oct 7, 2020 at 3:57 PM Enric Balletbo Serra <eballetbo@gmail.com> wrote:
>
> Hi Rob,
>
> Missatge de Rob Herring <robh@kernel.org> del dia dc., 7 d’oct. 2020 a
> les 17:12:
> >
> > On Mon, Sep 21, 2020 at 11:29:51AM +0200, Enric Balletbo i Serra wrote:
> > > Convert the soc/rockchip/power_domain.txt binding document to json-schema
> > > and move to the power bindings directory.
> > >
> > > Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
> > > ---
> > >
> > > Changes in v3:
> > > - Fixed tab errors found by bot
> > >
> > > Changes in v2:
> > > - Fixed a warning that says that 'syscon' should not be used alone.
> > > - Use patternProperties to define a new level for power-domains.
> > > - Add const values for power-domain-cells, address-cells, etc.
> > >
> > >  .../power/rockchip,power-controller.yaml      | 207 ++++++++++++++++++
> > >  .../bindings/soc/rockchip/power_domain.txt    | 136 ------------
> > >  2 files changed, 207 insertions(+), 136 deletions(-)
> > >  create mode 100644 Documentation/devicetree/bindings/power/rockchip,power-controller.yaml
> > >  delete mode 100644 Documentation/devicetree/bindings/soc/rockchip/power_domain.txt
> > >
> > > diff --git a/Documentation/devicetree/bindings/power/rockchip,power-controller.yaml b/Documentation/devicetree/bindings/power/rockchip,power-controller.yaml
> > > new file mode 100644
> > > index 000000000000..b23ea37e2a08
> > > --- /dev/null
> > > +++ b/Documentation/devicetree/bindings/power/rockchip,power-controller.yaml
> > > @@ -0,0 +1,207 @@
> > > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> > > +%YAML 1.2
> > > +---
> > > +$id: http://devicetree.org/schemas/power/rockchip,power-controller.yaml#
> > > +$schema: http://devicetree.org/meta-schemas/core.yaml#
> > > +
> > > +title: Rockchip Power Domains
> > > +
> > > +maintainers:
> > > +  - Caesar Wang <wxt@rock-chips.com>
> > > +  - Heiko Stuebner <heiko@sntech.de>
> > > +
> > > +description: |
> > > +  Rockchip processors include support for multiple power domains which can be
> > > +  powered up/down by software based on different application scenes to save power.
> > > +
> > > +  Power domains contained within power-controller node are generic power domain
> > > +  providers documented in Documentation/devicetree/bindings/power/power-domain.yaml.
> > > +
> > > +  IP cores belonging to a power domain should contain a 'power-domains'
> > > +  property that is a phandle for the power domain node representing the domain.
> > > +
> > > +properties:
> > > +  $nodename:
> > > +    const: power-controller
> > > +
> > > +  compatible:
> > > +    enum:
> > > +      - rockchip,px30-power-controller
> > > +      - rockchip,rk3036-power-controller
> > > +      - rockchip,rk3066-power-controller
> > > +      - rockchip,rk3128-power-controller
> > > +      - rockchip,rk3188-power-controller
> > > +      - rockchip,rk3228-power-controller
> > > +      - rockchip,rk3288-power-controller
> > > +      - rockchip,rk3328-power-controller
> > > +      - rockchip,rk3366-power-controller
> > > +      - rockchip,rk3368-power-controller
> > > +      - rockchip,rk3399-power-controller
> > > +
> > > +  '#power-domain-cells':
> > > +    const: 1
> > > +
> > > +  '#address-cells':
> > > +    const: 1
> > > +
> > > +  '#size-cells':
> > > +    const: 0
> > > +
> > > +patternProperties:
> > > +  "^power-domain@[0-9]+$":
> >
> > unit-addresses are hex.
> >
> > > +    type: object
> > > +    description: |
> > > +      Represents the power domains within the power controller node as documented
> > > +      in Documentation/devicetree/bindings/power/power-domain.yaml.
> > > +
> > > +    properties:
> > > +
> > > +      '#power-domain-cells':
> > > +        description:
> > > +            Must be 0 for nodes representing a single PM domain and 1 for nodes
> > > +            providing multiple PM domains.
> > > +
> > > +      '#address-cells':
> > > +        const: 1
> > > +
> > > +      '#size-cells':
> > > +        const: 0
> > > +
> > > +      reg:
> > > +        description: |
> > > +          Power domain index. Valid values are defined in:
> > > +          "include/dt-bindings/power/px30-power.h" - for PX30 type power domain.
> > > +          "include/dt-bindings/power/rk3036-power.h" - for RK3036 type power domain.
> > > +          "include/dt-bindings/power/rk3066-power.h" - for RK3066 type power domain.
> > > +          "include/dt-bindings/power/rk3128-power.h" - for RK3128 type power domain.
> > > +          "include/dt-bindings/power/rk3188-power.h" - for RK3188 type power domain.
> > > +          "include/dt-bindings/power/rk3228-power.h" - for RK3228 type power domain.
> > > +          "include/dt-bindings/power/rk3288-power.h" - for RK3288 type power domain.
> > > +          "include/dt-bindings/power/rk3328-power.h" - for RK3328 type power domain.
> > > +          "include/dt-bindings/power/rk3366-power.h" - for RK3366 type power domain.
> > > +          "include/dt-bindings/power/rk3368-power.h" - for RK3368 type power domain.
> > > +          "include/dt-bindings/power/rk3399-power.h" - for RK3399 type power domain.
> > > +        maxItems: 1
> >
> > Range of values?
> >
> > > +
> > > +      clocks:
> > > +        description: |
> > > +          A number of phandles to clocks that need to be enabled while power domain
> > > +          switches state.
> >
> > Can you at least put a range of how many clocks?
> >
> > > +
> > > +      pm_qos:
> > > +        description: |
> > > +          A number of phandles to qos blocks which need to be saved and restored
> > > +          while power domain switches state.
> >
> > And here.
> >
> > > +
> > > +    required:
> > > +      - reg
> >
> >        additionalProperties: false
> >
> > Which in turn means the nested power domains will throw an error, so you
> > can do:
> >
> >        patternProperties:
> >          "^power-domain@[0-9a-f]+$":
> >            $ref: '#/patternProperties/^power-domain@[0-9a-f]+$'
> >
>
> When I tried this I got the following error:
>
> rockchip,power-controller.yaml:
> patternProperties:^power-domain@[0-9a-f]+$:patternProperties:^power-domain@[0-9a-f]+$:$ref:
> '#/patternProperties/^power-domain@[0-9a-f]+$' is not a
> 'uri-reference'
>
> Not sure if is my environment or I am still doing something silly, can
> you confirm that this works for you? It doesn't seem to be any binding
> doing this actually.

I think the regex would have to be escaped to be a valid URI:

$ref: '%23/patternProperties/%5Epower-domain@%5B0-9a-f%5D+%24'

That's not the most readable nor am I sure it would get translated
back to the right path, so it's probably going to be best to just
define the child nodes even if duplicated.

Rob
Enric Balletbo i Serra Oct. 11, 2020, 9:01 a.m. UTC | #4
Hi Rob,

On 8/10/20 21:47, Rob Herring wrote:
> On Wed, Oct 7, 2020 at 3:57 PM Enric Balletbo Serra <eballetbo@gmail.com> wrote:
>>
>> Hi Rob,
>>
>> Missatge de Rob Herring <robh@kernel.org> del dia dc., 7 d’oct. 2020 a
>> les 17:12:
>>>
>>> On Mon, Sep 21, 2020 at 11:29:51AM +0200, Enric Balletbo i Serra wrote:
>>>> Convert the soc/rockchip/power_domain.txt binding document to json-schema
>>>> and move to the power bindings directory.
>>>>
>>>> Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
>>>> ---
>>>>
>>>> Changes in v3:
>>>> - Fixed tab errors found by bot
>>>>
>>>> Changes in v2:
>>>> - Fixed a warning that says that 'syscon' should not be used alone.
>>>> - Use patternProperties to define a new level for power-domains.
>>>> - Add const values for power-domain-cells, address-cells, etc.
>>>>
>>>>  .../power/rockchip,power-controller.yaml      | 207 ++++++++++++++++++
>>>>  .../bindings/soc/rockchip/power_domain.txt    | 136 ------------
>>>>  2 files changed, 207 insertions(+), 136 deletions(-)
>>>>  create mode 100644 Documentation/devicetree/bindings/power/rockchip,power-controller.yaml
>>>>  delete mode 100644 Documentation/devicetree/bindings/soc/rockchip/power_domain.txt
>>>>
>>>> diff --git a/Documentation/devicetree/bindings/power/rockchip,power-controller.yaml b/Documentation/devicetree/bindings/power/rockchip,power-controller.yaml
>>>> new file mode 100644
>>>> index 000000000000..b23ea37e2a08
>>>> --- /dev/null
>>>> +++ b/Documentation/devicetree/bindings/power/rockchip,power-controller.yaml
>>>> @@ -0,0 +1,207 @@
>>>> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
>>>> +%YAML 1.2
>>>> +---
>>>> +$id: http://devicetree.org/schemas/power/rockchip,power-controller.yaml#
>>>> +$schema: http://devicetree.org/meta-schemas/core.yaml#
>>>> +
>>>> +title: Rockchip Power Domains
>>>> +
>>>> +maintainers:
>>>> +  - Caesar Wang <wxt@rock-chips.com>
>>>> +  - Heiko Stuebner <heiko@sntech.de>
>>>> +
>>>> +description: |
>>>> +  Rockchip processors include support for multiple power domains which can be
>>>> +  powered up/down by software based on different application scenes to save power.
>>>> +
>>>> +  Power domains contained within power-controller node are generic power domain
>>>> +  providers documented in Documentation/devicetree/bindings/power/power-domain.yaml.
>>>> +
>>>> +  IP cores belonging to a power domain should contain a 'power-domains'
>>>> +  property that is a phandle for the power domain node representing the domain.
>>>> +
>>>> +properties:
>>>> +  $nodename:
>>>> +    const: power-controller
>>>> +
>>>> +  compatible:
>>>> +    enum:
>>>> +      - rockchip,px30-power-controller
>>>> +      - rockchip,rk3036-power-controller
>>>> +      - rockchip,rk3066-power-controller
>>>> +      - rockchip,rk3128-power-controller
>>>> +      - rockchip,rk3188-power-controller
>>>> +      - rockchip,rk3228-power-controller
>>>> +      - rockchip,rk3288-power-controller
>>>> +      - rockchip,rk3328-power-controller
>>>> +      - rockchip,rk3366-power-controller
>>>> +      - rockchip,rk3368-power-controller
>>>> +      - rockchip,rk3399-power-controller
>>>> +
>>>> +  '#power-domain-cells':
>>>> +    const: 1
>>>> +
>>>> +  '#address-cells':
>>>> +    const: 1
>>>> +
>>>> +  '#size-cells':
>>>> +    const: 0
>>>> +
>>>> +patternProperties:
>>>> +  "^power-domain@[0-9]+$":
>>>
>>> unit-addresses are hex.
>>>
>>>> +    type: object
>>>> +    description: |
>>>> +      Represents the power domains within the power controller node as documented
>>>> +      in Documentation/devicetree/bindings/power/power-domain.yaml.
>>>> +
>>>> +    properties:
>>>> +
>>>> +      '#power-domain-cells':
>>>> +        description:
>>>> +            Must be 0 for nodes representing a single PM domain and 1 for nodes
>>>> +            providing multiple PM domains.
>>>> +
>>>> +      '#address-cells':
>>>> +        const: 1
>>>> +
>>>> +      '#size-cells':
>>>> +        const: 0
>>>> +
>>>> +      reg:
>>>> +        description: |
>>>> +          Power domain index. Valid values are defined in:
>>>> +          "include/dt-bindings/power/px30-power.h" - for PX30 type power domain.
>>>> +          "include/dt-bindings/power/rk3036-power.h" - for RK3036 type power domain.
>>>> +          "include/dt-bindings/power/rk3066-power.h" - for RK3066 type power domain.
>>>> +          "include/dt-bindings/power/rk3128-power.h" - for RK3128 type power domain.
>>>> +          "include/dt-bindings/power/rk3188-power.h" - for RK3188 type power domain.
>>>> +          "include/dt-bindings/power/rk3228-power.h" - for RK3228 type power domain.
>>>> +          "include/dt-bindings/power/rk3288-power.h" - for RK3288 type power domain.
>>>> +          "include/dt-bindings/power/rk3328-power.h" - for RK3328 type power domain.
>>>> +          "include/dt-bindings/power/rk3366-power.h" - for RK3366 type power domain.
>>>> +          "include/dt-bindings/power/rk3368-power.h" - for RK3368 type power domain.
>>>> +          "include/dt-bindings/power/rk3399-power.h" - for RK3399 type power domain.
>>>> +        maxItems: 1
>>>
>>> Range of values?
>>>
>>>> +
>>>> +      clocks:
>>>> +        description: |
>>>> +          A number of phandles to clocks that need to be enabled while power domain
>>>> +          switches state.
>>>
>>> Can you at least put a range of how many clocks?
>>>
>>>> +
>>>> +      pm_qos:
>>>> +        description: |
>>>> +          A number of phandles to qos blocks which need to be saved and restored
>>>> +          while power domain switches state.
>>>
>>> And here.
>>>
>>>> +
>>>> +    required:
>>>> +      - reg
>>>
>>>        additionalProperties: false
>>>
>>> Which in turn means the nested power domains will throw an error, so you
>>> can do:
>>>
>>>        patternProperties:
>>>          "^power-domain@[0-9a-f]+$":
>>>            $ref: '#/patternProperties/^power-domain@[0-9a-f]+$'
>>>
>>
>> When I tried this I got the following error:
>>
>> rockchip,power-controller.yaml:
>> patternProperties:^power-domain@[0-9a-f]+$:patternProperties:^power-domain@[0-9a-f]+$:$ref:
>> '#/patternProperties/^power-domain@[0-9a-f]+$' is not a
>> 'uri-reference'
>>
>> Not sure if is my environment or I am still doing something silly, can
>> you confirm that this works for you? It doesn't seem to be any binding
>> doing this actually.
> 
> I think the regex would have to be escaped to be a valid URI:
> 
> $ref: '%23/patternProperties/%5Epower-domain@%5B0-9a-f%5D+%24'
> 
> That's not the most readable nor am I sure it would get translated
> back to the right path, so it's probably going to be best to just
> define the child nodes even if duplicated.
> 

Ok, I'll define the child node then. Thank you for your support.

Cheers,
  Enric

> Rob
>
Enric Balletbo i Serra Oct. 11, 2020, 9:56 a.m. UTC | #5
Hi Rob,

Many thanks for your comments, some questions below.

On 7/10/20 17:11, Rob Herring wrote:
> On Mon, Sep 21, 2020 at 11:29:51AM +0200, Enric Balletbo i Serra wrote:
>> Convert the soc/rockchip/power_domain.txt binding document to json-schema
>> and move to the power bindings directory.
>>
>> Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
>> ---
>>
>> Changes in v3:
>> - Fixed tab errors found by bot
>>
>> Changes in v2:
>> - Fixed a warning that says that 'syscon' should not be used alone.
>> - Use patternProperties to define a new level for power-domains.
>> - Add const values for power-domain-cells, address-cells, etc.
>>
>>  .../power/rockchip,power-controller.yaml      | 207 ++++++++++++++++++
>>  .../bindings/soc/rockchip/power_domain.txt    | 136 ------------
>>  2 files changed, 207 insertions(+), 136 deletions(-)
>>  create mode 100644 Documentation/devicetree/bindings/power/rockchip,power-controller.yaml
>>  delete mode 100644 Documentation/devicetree/bindings/soc/rockchip/power_domain.txt
>>
>> diff --git a/Documentation/devicetree/bindings/power/rockchip,power-controller.yaml b/Documentation/devicetree/bindings/power/rockchip,power-controller.yaml
>> new file mode 100644
>> index 000000000000..b23ea37e2a08
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/power/rockchip,power-controller.yaml
>> @@ -0,0 +1,207 @@
>> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
>> +%YAML 1.2
>> +---
>> +$id: http://devicetree.org/schemas/power/rockchip,power-controller.yaml#
>> +$schema: http://devicetree.org/meta-schemas/core.yaml#
>> +
>> +title: Rockchip Power Domains
>> +
>> +maintainers:
>> +  - Caesar Wang <wxt@rock-chips.com>
>> +  - Heiko Stuebner <heiko@sntech.de>
>> +
>> +description: |
>> +  Rockchip processors include support for multiple power domains which can be
>> +  powered up/down by software based on different application scenes to save power.
>> +
>> +  Power domains contained within power-controller node are generic power domain
>> +  providers documented in Documentation/devicetree/bindings/power/power-domain.yaml.
>> +
>> +  IP cores belonging to a power domain should contain a 'power-domains'
>> +  property that is a phandle for the power domain node representing the domain.
>> +
>> +properties:
>> +  $nodename:
>> +    const: power-controller
>> +
>> +  compatible:
>> +    enum:
>> +      - rockchip,px30-power-controller
>> +      - rockchip,rk3036-power-controller
>> +      - rockchip,rk3066-power-controller
>> +      - rockchip,rk3128-power-controller
>> +      - rockchip,rk3188-power-controller
>> +      - rockchip,rk3228-power-controller
>> +      - rockchip,rk3288-power-controller
>> +      - rockchip,rk3328-power-controller
>> +      - rockchip,rk3366-power-controller
>> +      - rockchip,rk3368-power-controller
>> +      - rockchip,rk3399-power-controller
>> +
>> +  '#power-domain-cells':
>> +    const: 1
>> +
>> +  '#address-cells':
>> +    const: 1
>> +
>> +  '#size-cells':
>> +    const: 0
>> +
>> +patternProperties:
>> +  "^power-domain@[0-9]+$":
> 
> unit-addresses are hex.
> 

As explained in the description of 'reg' is more a power domain index than a
hexadecimal address. Same as done in
Documentation/devicetree/bindings/power/fsl,imx-gpcv2.yaml

Use hex pattern will give a lot of errors, i.e 'pd_edp@25' and many others will
not match the regexes '^power-domain@[0-9a-f]+$'

Is the hex notation a must here? In that case, I assume I should change all the
power/rk3*power.h includes to use that notation.

>> +    type: object
>> +    description: |
>> +      Represents the power domains within the power controller node as documented
>> +      in Documentation/devicetree/bindings/power/power-domain.yaml.
>> +
>> +    properties:
>> +
>> +      '#power-domain-cells':
>> +        description:
>> +            Must be 0 for nodes representing a single PM domain and 1 for nodes
>> +            providing multiple PM domains.
>> +
>> +      '#address-cells':
>> +        const: 1
>> +
>> +      '#size-cells':
>> +        const: 0
>> +
>> +      reg:
>> +        description: |
>> +          Power domain index. Valid values are defined in:
>> +          "include/dt-bindings/power/px30-power.h" - for PX30 type power domain.
>> +          "include/dt-bindings/power/rk3036-power.h" - for RK3036 type power domain.
>> +          "include/dt-bindings/power/rk3066-power.h" - for RK3066 type power domain.
>> +          "include/dt-bindings/power/rk3128-power.h" - for RK3128 type power domain.
>> +          "include/dt-bindings/power/rk3188-power.h" - for RK3188 type power domain.
>> +          "include/dt-bindings/power/rk3228-power.h" - for RK3228 type power domain.
>> +          "include/dt-bindings/power/rk3288-power.h" - for RK3288 type power domain.
>> +          "include/dt-bindings/power/rk3328-power.h" - for RK3328 type power domain.
>> +          "include/dt-bindings/power/rk3366-power.h" - for RK3366 type power domain.
>> +          "include/dt-bindings/power/rk3368-power.h" - for RK3368 type power domain.
>> +          "include/dt-bindings/power/rk3399-power.h" - for RK3399 type power domain.
>> +        maxItems: 1
> 
> Range of values?
> 
>> +
>> +      clocks:
>> +        description: |
>> +          A number of phandles to clocks that need to be enabled while power domain
>> +          switches state.
> 
> Can you at least put a range of how many clocks?
> 

minItems could be 0, but from the datasheet, I am not sure if I am able to
define a maxItems, I think I can do two things, or define a maxItems based on
current definitions (with the risk that if a new SoC is supported we should
change that number) or use a finger in the air "safe" value. Should any of these
solutions be acceptable for you?


>> +
>> +      pm_qos:
>> +        description: |
>> +          A number of phandles to qos blocks which need to be saved and restored
>> +          while power domain switches state.
> 
> And here.
> 

The same as clocks here.

>> +
>> +    required:
>> +      - reg
> 
>        additionalProperties: false
> 
> Which in turn means the nested power domains will throw an error, so you 
> can do:
> 
>        patternProperties:
> 	 "^power-domain@[0-9a-f]+$":
>            $ref: '#/patternProperties/^power-domain@[0-9a-f]+$'
> 
>> +
>> +required:
>> +  - compatible
>> +  - '#power-domain-cells'
>> +
>> +additionalProperties: false
>> +
>> +examples:
>> +  - |
>> +    #include <dt-bindings/clock/rk3399-cru.h>
>> +    #include <dt-bindings/power/rk3399-power.h>
>> +
>> +    soc {
>> +        #address-cells = <2>;
>> +        #size-cells = <2>;
>> +
>> +        qos_hdcp: qos@ffa90000 {
>> +            compatible = "rockchip,rk3399-qos","syscon";
> 
> space                                             ^
> 
>> +            reg = <0x0 0xffa90000 0x0 0x20>;
>> +        };
>> +
>> +        qos_iep: qos@ffa98000 {
>> +            compatible = "rk3399-qos","syscon";
>> +            reg = <0x0 0xffa98000 0x0 0x20>;
>> +        };
>> +
>> +        qos_rga_r: qos@ffab0000 {
>> +            compatible = "rk3399-qos","syscon";
>> +            reg = <0x0 0xffab0000 0x0 0x20>;
>> +        };
>> +
>> +        qos_rga_w: qos@ffab0080 {
>> +            compatible = "rk3399-qos","syscon";
>> +            reg = <0x0 0xffab0080 0x0 0x20>;
>> +        };
>> +
>> +        qos_video_m0: qos@ffab8000 {
>> +            compatible = "rk3399-qos","syscon";
>> +            reg = <0x0 0xffab8000 0x0 0x20>;
>> +        };
>> +
>> +        qos_video_m1_r: qos@ffac0000 {
>> +            compatible = "rk3399-qos","syscon";
>> +            reg = <0x0 0xffac0000 0x0 0x20>;
>> +        };
>> +
>> +        qos_video_m1_w: qos@ffac0080 {
>> +            compatible = "rk3399-qos","syscon";
>> +            reg = <0x0 0xffac0080 0x0 0x20>;
>> +        };
>> +
>> +        power-management@ff310000 {
>> +            compatible = "rockchip,rk3399-pmu", "syscon", "simple-mfd";
>> +            reg = <0x0 0xff310000 0x0 0x1000>;
>> +
>> +            power-controller {
>> +                compatible = "rockchip,rk3399-power-controller";
>> +                #power-domain-cells = <1>;
>> +                #address-cells = <1>;
>> +                #size-cells = <0>;
>> +
>> +                /* These power domains are grouped by VD_CENTER */
>> +                power-domain@RK3399_PD_IEP {
>> +                    reg = <RK3399_PD_IEP>;
>> +                    clocks = <&cru ACLK_IEP>,
>> +                             <&cru HCLK_IEP>;
>> +                    pm_qos = <&qos_iep>;
>> +                    #power-domain-cells = <0>;
>> +                };
>> +                power-domain@RK3399_PD_RGA {
>> +                    reg = <RK3399_PD_RGA>;
>> +                    clocks = <&cru ACLK_RGA>,
>> +                             <&cru HCLK_RGA>;
>> +                    pm_qos = <&qos_rga_r>,
>> +                             <&qos_rga_w>;
>> +                    #power-domain-cells = <0>;
>> +                };
>> +                power-domain@RK3399_PD_VCODEC {
>> +                    reg = <RK3399_PD_VCODEC>;
>> +                    clocks = <&cru ACLK_VCODEC>,
>> +                             <&cru HCLK_VCODEC>;
>> +                    pm_qos = <&qos_video_m0>;
>> +                    #power-domain-cells = <0>;
>> +                };
>> +                power-domain@RK3399_PD_VDU {
>> +                    reg = <RK3399_PD_VDU>;
>> +                    clocks = <&cru ACLK_VDU>,
>> +                             <&cru HCLK_VDU>;
>> +                    pm_qos = <&qos_video_m1_r>,
>> +                             <&qos_video_m1_w>;
>> +                    #power-domain-cells = <0>;
>> +                };
>> +                power-domain@RK3399_PD_VIO {
>> +                    reg = <RK3399_PD_VIO>;
>> +                    #power-domain-cells = <1>;
>> +                    #address-cells = <1>;
>> +                    #size-cells = <0>;
>> +
>> +                    power-domain@RK3399_PD_HDCP {
>> +                        reg = <RK3399_PD_HDCP>;
>> +                        clocks = <&cru ACLK_HDCP>,
>> +                                 <&cru HCLK_HDCP>,
>> +                                 <&cru PCLK_HDCP>;
>> +                        pm_qos = <&qos_hdcp>;
>> +                        #power-domain-cells = <0>;
>> +                    };
>> +                };
>> +            };
>> +        };
>> +    };
Enric Balletbo i Serra Oct. 11, 2020, 10:03 a.m. UTC | #6
On 11/10/20 11:56, Enric Balletbo i Serra wrote:
> Hi Rob,
> 
> Many thanks for your comments, some questions below.
> 
> On 7/10/20 17:11, Rob Herring wrote:
>> On Mon, Sep 21, 2020 at 11:29:51AM +0200, Enric Balletbo i Serra wrote:
>>> Convert the soc/rockchip/power_domain.txt binding document to json-schema
>>> and move to the power bindings directory.
>>>
>>> Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
>>> ---
>>>
>>> Changes in v3:
>>> - Fixed tab errors found by bot
>>>
>>> Changes in v2:
>>> - Fixed a warning that says that 'syscon' should not be used alone.
>>> - Use patternProperties to define a new level for power-domains.
>>> - Add const values for power-domain-cells, address-cells, etc.
>>>
>>>  .../power/rockchip,power-controller.yaml      | 207 ++++++++++++++++++
>>>  .../bindings/soc/rockchip/power_domain.txt    | 136 ------------
>>>  2 files changed, 207 insertions(+), 136 deletions(-)
>>>  create mode 100644 Documentation/devicetree/bindings/power/rockchip,power-controller.yaml
>>>  delete mode 100644 Documentation/devicetree/bindings/soc/rockchip/power_domain.txt
>>>
>>> diff --git a/Documentation/devicetree/bindings/power/rockchip,power-controller.yaml b/Documentation/devicetree/bindings/power/rockchip,power-controller.yaml
>>> new file mode 100644
>>> index 000000000000..b23ea37e2a08
>>> --- /dev/null
>>> +++ b/Documentation/devicetree/bindings/power/rockchip,power-controller.yaml
>>> @@ -0,0 +1,207 @@
>>> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
>>> +%YAML 1.2
>>> +---
>>> +$id: http://devicetree.org/schemas/power/rockchip,power-controller.yaml#
>>> +$schema: http://devicetree.org/meta-schemas/core.yaml#
>>> +
>>> +title: Rockchip Power Domains
>>> +
>>> +maintainers:
>>> +  - Caesar Wang <wxt@rock-chips.com>
>>> +  - Heiko Stuebner <heiko@sntech.de>
>>> +
>>> +description: |
>>> +  Rockchip processors include support for multiple power domains which can be
>>> +  powered up/down by software based on different application scenes to save power.
>>> +
>>> +  Power domains contained within power-controller node are generic power domain
>>> +  providers documented in Documentation/devicetree/bindings/power/power-domain.yaml.
>>> +
>>> +  IP cores belonging to a power domain should contain a 'power-domains'
>>> +  property that is a phandle for the power domain node representing the domain.
>>> +
>>> +properties:
>>> +  $nodename:
>>> +    const: power-controller
>>> +
>>> +  compatible:
>>> +    enum:
>>> +      - rockchip,px30-power-controller
>>> +      - rockchip,rk3036-power-controller
>>> +      - rockchip,rk3066-power-controller
>>> +      - rockchip,rk3128-power-controller
>>> +      - rockchip,rk3188-power-controller
>>> +      - rockchip,rk3228-power-controller
>>> +      - rockchip,rk3288-power-controller
>>> +      - rockchip,rk3328-power-controller
>>> +      - rockchip,rk3366-power-controller
>>> +      - rockchip,rk3368-power-controller
>>> +      - rockchip,rk3399-power-controller
>>> +
>>> +  '#power-domain-cells':
>>> +    const: 1
>>> +
>>> +  '#address-cells':
>>> +    const: 1
>>> +
>>> +  '#size-cells':
>>> +    const: 0
>>> +
>>> +patternProperties:
>>> +  "^power-domain@[0-9]+$":
>>
>> unit-addresses are hex.
>>
> 
> As explained in the description of 'reg' is more a power domain index than a
> hexadecimal address. Same as done in
> Documentation/devicetree/bindings/power/fsl,imx-gpcv2.yaml
> 
> Use hex pattern will give a lot of errors, i.e 'pd_edp@25' and many others will
> not match the regexes '^power-domain@[0-9a-f]+$'
> 
> Is the hex notation a must here? In that case, I assume I should change all the
> power/rk3*power.h includes to use that notation.
> 

Oops, forget about this part, not enough caffeine this morning, I was confused,
sorry.

[snip]
diff mbox series

Patch

diff --git a/Documentation/devicetree/bindings/power/rockchip,power-controller.yaml b/Documentation/devicetree/bindings/power/rockchip,power-controller.yaml
new file mode 100644
index 000000000000..b23ea37e2a08
--- /dev/null
+++ b/Documentation/devicetree/bindings/power/rockchip,power-controller.yaml
@@ -0,0 +1,207 @@ 
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/power/rockchip,power-controller.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Rockchip Power Domains
+
+maintainers:
+  - Caesar Wang <wxt@rock-chips.com>
+  - Heiko Stuebner <heiko@sntech.de>
+
+description: |
+  Rockchip processors include support for multiple power domains which can be
+  powered up/down by software based on different application scenes to save power.
+
+  Power domains contained within power-controller node are generic power domain
+  providers documented in Documentation/devicetree/bindings/power/power-domain.yaml.
+
+  IP cores belonging to a power domain should contain a 'power-domains'
+  property that is a phandle for the power domain node representing the domain.
+
+properties:
+  $nodename:
+    const: power-controller
+
+  compatible:
+    enum:
+      - rockchip,px30-power-controller
+      - rockchip,rk3036-power-controller
+      - rockchip,rk3066-power-controller
+      - rockchip,rk3128-power-controller
+      - rockchip,rk3188-power-controller
+      - rockchip,rk3228-power-controller
+      - rockchip,rk3288-power-controller
+      - rockchip,rk3328-power-controller
+      - rockchip,rk3366-power-controller
+      - rockchip,rk3368-power-controller
+      - rockchip,rk3399-power-controller
+
+  '#power-domain-cells':
+    const: 1
+
+  '#address-cells':
+    const: 1
+
+  '#size-cells':
+    const: 0
+
+patternProperties:
+  "^power-domain@[0-9]+$":
+    type: object
+    description: |
+      Represents the power domains within the power controller node as documented
+      in Documentation/devicetree/bindings/power/power-domain.yaml.
+
+    properties:
+
+      '#power-domain-cells':
+        description:
+            Must be 0 for nodes representing a single PM domain and 1 for nodes
+            providing multiple PM domains.
+
+      '#address-cells':
+        const: 1
+
+      '#size-cells':
+        const: 0
+
+      reg:
+        description: |
+          Power domain index. Valid values are defined in:
+          "include/dt-bindings/power/px30-power.h" - for PX30 type power domain.
+          "include/dt-bindings/power/rk3036-power.h" - for RK3036 type power domain.
+          "include/dt-bindings/power/rk3066-power.h" - for RK3066 type power domain.
+          "include/dt-bindings/power/rk3128-power.h" - for RK3128 type power domain.
+          "include/dt-bindings/power/rk3188-power.h" - for RK3188 type power domain.
+          "include/dt-bindings/power/rk3228-power.h" - for RK3228 type power domain.
+          "include/dt-bindings/power/rk3288-power.h" - for RK3288 type power domain.
+          "include/dt-bindings/power/rk3328-power.h" - for RK3328 type power domain.
+          "include/dt-bindings/power/rk3366-power.h" - for RK3366 type power domain.
+          "include/dt-bindings/power/rk3368-power.h" - for RK3368 type power domain.
+          "include/dt-bindings/power/rk3399-power.h" - for RK3399 type power domain.
+        maxItems: 1
+
+      clocks:
+        description: |
+          A number of phandles to clocks that need to be enabled while power domain
+          switches state.
+
+      pm_qos:
+        description: |
+          A number of phandles to qos blocks which need to be saved and restored
+          while power domain switches state.
+
+    required:
+      - reg
+
+required:
+  - compatible
+  - '#power-domain-cells'
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/clock/rk3399-cru.h>
+    #include <dt-bindings/power/rk3399-power.h>
+
+    soc {
+        #address-cells = <2>;
+        #size-cells = <2>;
+
+        qos_hdcp: qos@ffa90000 {
+            compatible = "rockchip,rk3399-qos","syscon";
+            reg = <0x0 0xffa90000 0x0 0x20>;
+        };
+
+        qos_iep: qos@ffa98000 {
+            compatible = "rk3399-qos","syscon";
+            reg = <0x0 0xffa98000 0x0 0x20>;
+        };
+
+        qos_rga_r: qos@ffab0000 {
+            compatible = "rk3399-qos","syscon";
+            reg = <0x0 0xffab0000 0x0 0x20>;
+        };
+
+        qos_rga_w: qos@ffab0080 {
+            compatible = "rk3399-qos","syscon";
+            reg = <0x0 0xffab0080 0x0 0x20>;
+        };
+
+        qos_video_m0: qos@ffab8000 {
+            compatible = "rk3399-qos","syscon";
+            reg = <0x0 0xffab8000 0x0 0x20>;
+        };
+
+        qos_video_m1_r: qos@ffac0000 {
+            compatible = "rk3399-qos","syscon";
+            reg = <0x0 0xffac0000 0x0 0x20>;
+        };
+
+        qos_video_m1_w: qos@ffac0080 {
+            compatible = "rk3399-qos","syscon";
+            reg = <0x0 0xffac0080 0x0 0x20>;
+        };
+
+        power-management@ff310000 {
+            compatible = "rockchip,rk3399-pmu", "syscon", "simple-mfd";
+            reg = <0x0 0xff310000 0x0 0x1000>;
+
+            power-controller {
+                compatible = "rockchip,rk3399-power-controller";
+                #power-domain-cells = <1>;
+                #address-cells = <1>;
+                #size-cells = <0>;
+
+                /* These power domains are grouped by VD_CENTER */
+                power-domain@RK3399_PD_IEP {
+                    reg = <RK3399_PD_IEP>;
+                    clocks = <&cru ACLK_IEP>,
+                             <&cru HCLK_IEP>;
+                    pm_qos = <&qos_iep>;
+                    #power-domain-cells = <0>;
+                };
+                power-domain@RK3399_PD_RGA {
+                    reg = <RK3399_PD_RGA>;
+                    clocks = <&cru ACLK_RGA>,
+                             <&cru HCLK_RGA>;
+                    pm_qos = <&qos_rga_r>,
+                             <&qos_rga_w>;
+                    #power-domain-cells = <0>;
+                };
+                power-domain@RK3399_PD_VCODEC {
+                    reg = <RK3399_PD_VCODEC>;
+                    clocks = <&cru ACLK_VCODEC>,
+                             <&cru HCLK_VCODEC>;
+                    pm_qos = <&qos_video_m0>;
+                    #power-domain-cells = <0>;
+                };
+                power-domain@RK3399_PD_VDU {
+                    reg = <RK3399_PD_VDU>;
+                    clocks = <&cru ACLK_VDU>,
+                             <&cru HCLK_VDU>;
+                    pm_qos = <&qos_video_m1_r>,
+                             <&qos_video_m1_w>;
+                    #power-domain-cells = <0>;
+                };
+                power-domain@RK3399_PD_VIO {
+                    reg = <RK3399_PD_VIO>;
+                    #power-domain-cells = <1>;
+                    #address-cells = <1>;
+                    #size-cells = <0>;
+
+                    power-domain@RK3399_PD_HDCP {
+                        reg = <RK3399_PD_HDCP>;
+                        clocks = <&cru ACLK_HDCP>,
+                                 <&cru HCLK_HDCP>,
+                                 <&cru PCLK_HDCP>;
+                        pm_qos = <&qos_hdcp>;
+                        #power-domain-cells = <0>;
+                    };
+                };
+            };
+        };
+    };
diff --git a/Documentation/devicetree/bindings/soc/rockchip/power_domain.txt b/Documentation/devicetree/bindings/soc/rockchip/power_domain.txt
deleted file mode 100644
index 8304eceb62e4..000000000000
--- a/Documentation/devicetree/bindings/soc/rockchip/power_domain.txt
+++ /dev/null
@@ -1,136 +0,0 @@ 
-* Rockchip Power Domains
-
-Rockchip processors include support for multiple power domains which can be
-powered up/down by software based on different application scenes to save power.
-
-Required properties for power domain controller:
-- compatible: Should be one of the following.
-	"rockchip,px30-power-controller" - for PX30 SoCs.
-	"rockchip,rk3036-power-controller" - for RK3036 SoCs.
-	"rockchip,rk3066-power-controller" - for RK3066 SoCs.
-	"rockchip,rk3128-power-controller" - for RK3128 SoCs.
-	"rockchip,rk3188-power-controller" - for RK3188 SoCs.
-	"rockchip,rk3228-power-controller" - for RK3228 SoCs.
-	"rockchip,rk3288-power-controller" - for RK3288 SoCs.
-	"rockchip,rk3328-power-controller" - for RK3328 SoCs.
-	"rockchip,rk3366-power-controller" - for RK3366 SoCs.
-	"rockchip,rk3368-power-controller" - for RK3368 SoCs.
-	"rockchip,rk3399-power-controller" - for RK3399 SoCs.
-- #power-domain-cells: Number of cells in a power-domain specifier.
-	Should be 1 for multiple PM domains.
-- #address-cells: Should be 1.
-- #size-cells: Should be 0.
-
-Required properties for power domain sub nodes:
-- reg: index of the power domain, should use macros in:
-	"include/dt-bindings/power/px30-power.h" - for PX30 type power domain.
-	"include/dt-bindings/power/rk3036-power.h" - for RK3036 type power domain.
-	"include/dt-bindings/power/rk3066-power.h" - for RK3066 type power domain.
-	"include/dt-bindings/power/rk3128-power.h" - for RK3128 type power domain.
-	"include/dt-bindings/power/rk3188-power.h" - for RK3188 type power domain.
-	"include/dt-bindings/power/rk3228-power.h" - for RK3228 type power domain.
-	"include/dt-bindings/power/rk3288-power.h" - for RK3288 type power domain.
-	"include/dt-bindings/power/rk3328-power.h" - for RK3328 type power domain.
-	"include/dt-bindings/power/rk3366-power.h" - for RK3366 type power domain.
-	"include/dt-bindings/power/rk3368-power.h" - for RK3368 type power domain.
-	"include/dt-bindings/power/rk3399-power.h" - for RK3399 type power domain.
-- clocks (optional): phandles to clocks which need to be enabled while power domain
-	switches state.
-- pm_qos (optional): phandles to qos blocks which need to be saved and restored
-	while power domain switches state.
-
-Qos Example:
-
-	qos_gpu: qos_gpu@ffaf0000 {
-		compatible ="syscon";
-		reg = <0x0 0xffaf0000 0x0 0x20>;
-	};
-
-Example:
-
-	power: power-controller {
-		compatible = "rockchip,rk3288-power-controller";
-		#power-domain-cells = <1>;
-		#address-cells = <1>;
-		#size-cells = <0>;
-
-		pd_gpu {
-			reg = <RK3288_PD_GPU>;
-			clocks = <&cru ACLK_GPU>;
-			pm_qos = <&qos_gpu>;
-		};
-	};
-
-	 power: power-controller {
-                compatible = "rockchip,rk3368-power-controller";
-                #power-domain-cells = <1>;
-                #address-cells = <1>;
-                #size-cells = <0>;
-
-                pd_gpu_1 {
-                        reg = <RK3368_PD_GPU_1>;
-                        clocks = <&cru ACLK_GPU_CFG>;
-                };
-        };
-
-Example 2:
-		power: power-controller {
-			compatible = "rockchip,rk3399-power-controller";
-			#power-domain-cells = <1>;
-			#address-cells = <1>;
-			#size-cells = <0>;
-
-			pd_vio {
-				#address-cells = <1>;
-				#size-cells = <0>;
-				reg = <RK3399_PD_VIO>;
-
-				pd_vo {
-					#address-cells = <1>;
-					#size-cells = <0>;
-					reg = <RK3399_PD_VO>;
-
-					pd_vopb {
-						reg = <RK3399_PD_VOPB>;
-					};
-
-					pd_vopl {
-						reg = <RK3399_PD_VOPL>;
-					};
-				};
-			};
-		};
-
-Node of a device using power domains must have a power-domains property,
-containing a phandle to the power device node and an index specifying which
-power domain to use.
-The index should use macros in:
-	"include/dt-bindings/power/px30-power.h" - for px30 type power domain.
-	"include/dt-bindings/power/rk3036-power.h" - for rk3036 type power domain.
-	"include/dt-bindings/power/rk3128-power.h" - for rk3128 type power domain.
-	"include/dt-bindings/power/rk3128-power.h" - for rk3228 type power domain.
-	"include/dt-bindings/power/rk3288-power.h" - for rk3288 type power domain.
-	"include/dt-bindings/power/rk3328-power.h" - for rk3328 type power domain.
-	"include/dt-bindings/power/rk3366-power.h" - for rk3366 type power domain.
-	"include/dt-bindings/power/rk3368-power.h" - for rk3368 type power domain.
-	"include/dt-bindings/power/rk3399-power.h" - for rk3399 type power domain.
-
-Example of the node using power domain:
-
-	node {
-		/* ... */
-		power-domains = <&power RK3288_PD_GPU>;
-		/* ... */
-	};
-
-	node {
-                /* ... */
-                power-domains = <&power RK3368_PD_GPU_1>;
-                /* ... */
-        };
-
-	node {
-		/* ... */
-		power-domains = <&power RK3399_PD_VOPB>;
-		/* ... */
-	};