162306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci%YAML 1.2
362306a36Sopenharmony_ci---
462306a36Sopenharmony_ci$id: http://devicetree.org/schemas/power/rockchip,power-controller.yaml#
562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
662306a36Sopenharmony_ci
762306a36Sopenharmony_cititle: Rockchip Power Domains
862306a36Sopenharmony_ci
962306a36Sopenharmony_cimaintainers:
1062306a36Sopenharmony_ci  - Elaine Zhang <zhangqing@rock-chips.com>
1162306a36Sopenharmony_ci  - Heiko Stuebner <heiko@sntech.de>
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_cidescription: |
1462306a36Sopenharmony_ci  Rockchip processors include support for multiple power domains
1562306a36Sopenharmony_ci  which can be powered up/down by software based on different
1662306a36Sopenharmony_ci  application scenarios to save power.
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ci  Power domains contained within power-controller node are
1962306a36Sopenharmony_ci  generic power domain providers documented in
2062306a36Sopenharmony_ci  Documentation/devicetree/bindings/power/power-domain.yaml.
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ci  IP cores belonging to a power domain should contain a
2362306a36Sopenharmony_ci  "power-domains" property that is a phandle for the
2462306a36Sopenharmony_ci  power domain node representing the domain.
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ciproperties:
2762306a36Sopenharmony_ci  $nodename:
2862306a36Sopenharmony_ci    const: power-controller
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ci  compatible:
3162306a36Sopenharmony_ci    enum:
3262306a36Sopenharmony_ci      - rockchip,px30-power-controller
3362306a36Sopenharmony_ci      - rockchip,rk3036-power-controller
3462306a36Sopenharmony_ci      - rockchip,rk3066-power-controller
3562306a36Sopenharmony_ci      - rockchip,rk3128-power-controller
3662306a36Sopenharmony_ci      - rockchip,rk3188-power-controller
3762306a36Sopenharmony_ci      - rockchip,rk3228-power-controller
3862306a36Sopenharmony_ci      - rockchip,rk3288-power-controller
3962306a36Sopenharmony_ci      - rockchip,rk3328-power-controller
4062306a36Sopenharmony_ci      - rockchip,rk3366-power-controller
4162306a36Sopenharmony_ci      - rockchip,rk3368-power-controller
4262306a36Sopenharmony_ci      - rockchip,rk3399-power-controller
4362306a36Sopenharmony_ci      - rockchip,rk3568-power-controller
4462306a36Sopenharmony_ci      - rockchip,rk3588-power-controller
4562306a36Sopenharmony_ci      - rockchip,rv1126-power-controller
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ci  "#power-domain-cells":
4862306a36Sopenharmony_ci    const: 1
4962306a36Sopenharmony_ci
5062306a36Sopenharmony_ci  "#address-cells":
5162306a36Sopenharmony_ci    const: 1
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_ci  "#size-cells":
5462306a36Sopenharmony_ci    const: 0
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_cirequired:
5762306a36Sopenharmony_ci  - compatible
5862306a36Sopenharmony_ci  - "#power-domain-cells"
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_ciadditionalProperties: false
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_cipatternProperties:
6362306a36Sopenharmony_ci  "^power-domain@[0-9a-f]+$":
6462306a36Sopenharmony_ci
6562306a36Sopenharmony_ci    $ref: "#/$defs/pd-node"
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_ci    unevaluatedProperties: false
6862306a36Sopenharmony_ci
6962306a36Sopenharmony_ci    properties:
7062306a36Sopenharmony_ci      "#address-cells":
7162306a36Sopenharmony_ci        const: 1
7262306a36Sopenharmony_ci
7362306a36Sopenharmony_ci      "#size-cells":
7462306a36Sopenharmony_ci        const: 0
7562306a36Sopenharmony_ci
7662306a36Sopenharmony_ci    patternProperties:
7762306a36Sopenharmony_ci      "^power-domain@[0-9a-f]+$":
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_ci        $ref: "#/$defs/pd-node"
8062306a36Sopenharmony_ci
8162306a36Sopenharmony_ci        unevaluatedProperties: false
8262306a36Sopenharmony_ci
8362306a36Sopenharmony_ci        properties:
8462306a36Sopenharmony_ci          "#address-cells":
8562306a36Sopenharmony_ci            const: 1
8662306a36Sopenharmony_ci
8762306a36Sopenharmony_ci          "#size-cells":
8862306a36Sopenharmony_ci            const: 0
8962306a36Sopenharmony_ci
9062306a36Sopenharmony_ci        patternProperties:
9162306a36Sopenharmony_ci          "^power-domain@[0-9a-f]+$":
9262306a36Sopenharmony_ci
9362306a36Sopenharmony_ci            $ref: "#/$defs/pd-node"
9462306a36Sopenharmony_ci
9562306a36Sopenharmony_ci            unevaluatedProperties: false
9662306a36Sopenharmony_ci
9762306a36Sopenharmony_ci            properties:
9862306a36Sopenharmony_ci              "#power-domain-cells":
9962306a36Sopenharmony_ci                const: 0
10062306a36Sopenharmony_ci
10162306a36Sopenharmony_ci$defs:
10262306a36Sopenharmony_ci  pd-node:
10362306a36Sopenharmony_ci    type: object
10462306a36Sopenharmony_ci    description: |
10562306a36Sopenharmony_ci      Represents the power domains within the power controller node.
10662306a36Sopenharmony_ci
10762306a36Sopenharmony_ci    properties:
10862306a36Sopenharmony_ci      reg:
10962306a36Sopenharmony_ci        maxItems: 1
11062306a36Sopenharmony_ci        description: |
11162306a36Sopenharmony_ci          Power domain index. Valid values are defined in
11262306a36Sopenharmony_ci          "include/dt-bindings/power/px30-power.h"
11362306a36Sopenharmony_ci          "include/dt-bindings/power/rk3036-power.h"
11462306a36Sopenharmony_ci          "include/dt-bindings/power/rk3066-power.h"
11562306a36Sopenharmony_ci          "include/dt-bindings/power/rk3128-power.h"
11662306a36Sopenharmony_ci          "include/dt-bindings/power/rk3188-power.h"
11762306a36Sopenharmony_ci          "include/dt-bindings/power/rk3228-power.h"
11862306a36Sopenharmony_ci          "include/dt-bindings/power/rk3288-power.h"
11962306a36Sopenharmony_ci          "include/dt-bindings/power/rk3328-power.h"
12062306a36Sopenharmony_ci          "include/dt-bindings/power/rk3366-power.h"
12162306a36Sopenharmony_ci          "include/dt-bindings/power/rk3368-power.h"
12262306a36Sopenharmony_ci          "include/dt-bindings/power/rk3399-power.h"
12362306a36Sopenharmony_ci          "include/dt-bindings/power/rk3568-power.h"
12462306a36Sopenharmony_ci          "include/dt-bindings/power/rk3588-power.h"
12562306a36Sopenharmony_ci          "include/dt-bindings/power/rockchip,rv1126-power.h"
12662306a36Sopenharmony_ci
12762306a36Sopenharmony_ci      clocks:
12862306a36Sopenharmony_ci        minItems: 1
12962306a36Sopenharmony_ci        maxItems: 30
13062306a36Sopenharmony_ci        description: |
13162306a36Sopenharmony_ci          A number of phandles to clocks that need to be enabled
13262306a36Sopenharmony_ci          while power domain switches state.
13362306a36Sopenharmony_ci
13462306a36Sopenharmony_ci      pm_qos:
13562306a36Sopenharmony_ci        $ref: /schemas/types.yaml#/definitions/phandle-array
13662306a36Sopenharmony_ci        items:
13762306a36Sopenharmony_ci          maxItems: 1
13862306a36Sopenharmony_ci        description: |
13962306a36Sopenharmony_ci          A number of phandles to qos blocks which need to be saved and restored
14062306a36Sopenharmony_ci          while power domain switches state.
14162306a36Sopenharmony_ci
14262306a36Sopenharmony_ci      "#power-domain-cells":
14362306a36Sopenharmony_ci        enum: [0, 1]
14462306a36Sopenharmony_ci        description:
14562306a36Sopenharmony_ci          Must be 0 for nodes representing a single PM domain and 1 for nodes
14662306a36Sopenharmony_ci          providing multiple PM domains.
14762306a36Sopenharmony_ci
14862306a36Sopenharmony_ci    required:
14962306a36Sopenharmony_ci      - reg
15062306a36Sopenharmony_ci      - "#power-domain-cells"
15162306a36Sopenharmony_ci
15262306a36Sopenharmony_ciexamples:
15362306a36Sopenharmony_ci  - |
15462306a36Sopenharmony_ci    #include <dt-bindings/clock/rk3399-cru.h>
15562306a36Sopenharmony_ci    #include <dt-bindings/power/rk3399-power.h>
15662306a36Sopenharmony_ci
15762306a36Sopenharmony_ci    soc {
15862306a36Sopenharmony_ci        #address-cells = <2>;
15962306a36Sopenharmony_ci        #size-cells = <2>;
16062306a36Sopenharmony_ci
16162306a36Sopenharmony_ci        qos_hdcp: qos@ffa90000 {
16262306a36Sopenharmony_ci            compatible = "rockchip,rk3399-qos", "syscon";
16362306a36Sopenharmony_ci            reg = <0x0 0xffa90000 0x0 0x20>;
16462306a36Sopenharmony_ci        };
16562306a36Sopenharmony_ci
16662306a36Sopenharmony_ci        qos_iep: qos@ffa98000 {
16762306a36Sopenharmony_ci            compatible = "rockchip,rk3399-qos", "syscon";
16862306a36Sopenharmony_ci            reg = <0x0 0xffa98000 0x0 0x20>;
16962306a36Sopenharmony_ci        };
17062306a36Sopenharmony_ci
17162306a36Sopenharmony_ci        qos_rga_r: qos@ffab0000 {
17262306a36Sopenharmony_ci            compatible = "rockchip,rk3399-qos", "syscon";
17362306a36Sopenharmony_ci            reg = <0x0 0xffab0000 0x0 0x20>;
17462306a36Sopenharmony_ci        };
17562306a36Sopenharmony_ci
17662306a36Sopenharmony_ci        qos_rga_w: qos@ffab0080 {
17762306a36Sopenharmony_ci            compatible = "rockchip,rk3399-qos", "syscon";
17862306a36Sopenharmony_ci            reg = <0x0 0xffab0080 0x0 0x20>;
17962306a36Sopenharmony_ci        };
18062306a36Sopenharmony_ci
18162306a36Sopenharmony_ci        qos_video_m0: qos@ffab8000 {
18262306a36Sopenharmony_ci            compatible = "rockchip,rk3399-qos", "syscon";
18362306a36Sopenharmony_ci            reg = <0x0 0xffab8000 0x0 0x20>;
18462306a36Sopenharmony_ci        };
18562306a36Sopenharmony_ci
18662306a36Sopenharmony_ci        qos_video_m1_r: qos@ffac0000 {
18762306a36Sopenharmony_ci            compatible = "rockchip,rk3399-qos", "syscon";
18862306a36Sopenharmony_ci            reg = <0x0 0xffac0000 0x0 0x20>;
18962306a36Sopenharmony_ci        };
19062306a36Sopenharmony_ci
19162306a36Sopenharmony_ci        qos_video_m1_w: qos@ffac0080 {
19262306a36Sopenharmony_ci            compatible = "rockchip,rk3399-qos", "syscon";
19362306a36Sopenharmony_ci            reg = <0x0 0xffac0080 0x0 0x20>;
19462306a36Sopenharmony_ci        };
19562306a36Sopenharmony_ci
19662306a36Sopenharmony_ci        power-management@ff310000 {
19762306a36Sopenharmony_ci            compatible = "rockchip,rk3399-pmu", "syscon", "simple-mfd";
19862306a36Sopenharmony_ci            reg = <0x0 0xff310000 0x0 0x1000>;
19962306a36Sopenharmony_ci
20062306a36Sopenharmony_ci            power-controller {
20162306a36Sopenharmony_ci                compatible = "rockchip,rk3399-power-controller";
20262306a36Sopenharmony_ci                #power-domain-cells = <1>;
20362306a36Sopenharmony_ci                #address-cells = <1>;
20462306a36Sopenharmony_ci                #size-cells = <0>;
20562306a36Sopenharmony_ci
20662306a36Sopenharmony_ci                /* These power domains are grouped by VD_CENTER */
20762306a36Sopenharmony_ci                power-domain@RK3399_PD_IEP {
20862306a36Sopenharmony_ci                    reg = <RK3399_PD_IEP>;
20962306a36Sopenharmony_ci                    clocks = <&cru ACLK_IEP>,
21062306a36Sopenharmony_ci                             <&cru HCLK_IEP>;
21162306a36Sopenharmony_ci                    pm_qos = <&qos_iep>;
21262306a36Sopenharmony_ci                    #power-domain-cells = <0>;
21362306a36Sopenharmony_ci                };
21462306a36Sopenharmony_ci                power-domain@RK3399_PD_RGA {
21562306a36Sopenharmony_ci                    reg = <RK3399_PD_RGA>;
21662306a36Sopenharmony_ci                    clocks = <&cru ACLK_RGA>,
21762306a36Sopenharmony_ci                             <&cru HCLK_RGA>;
21862306a36Sopenharmony_ci                    pm_qos = <&qos_rga_r>,
21962306a36Sopenharmony_ci                             <&qos_rga_w>;
22062306a36Sopenharmony_ci                    #power-domain-cells = <0>;
22162306a36Sopenharmony_ci                };
22262306a36Sopenharmony_ci                power-domain@RK3399_PD_VCODEC {
22362306a36Sopenharmony_ci                    reg = <RK3399_PD_VCODEC>;
22462306a36Sopenharmony_ci                    clocks = <&cru ACLK_VCODEC>,
22562306a36Sopenharmony_ci                             <&cru HCLK_VCODEC>;
22662306a36Sopenharmony_ci                    pm_qos = <&qos_video_m0>;
22762306a36Sopenharmony_ci                    #power-domain-cells = <0>;
22862306a36Sopenharmony_ci                };
22962306a36Sopenharmony_ci                power-domain@RK3399_PD_VDU {
23062306a36Sopenharmony_ci                    reg = <RK3399_PD_VDU>;
23162306a36Sopenharmony_ci                    clocks = <&cru ACLK_VDU>,
23262306a36Sopenharmony_ci                             <&cru HCLK_VDU>;
23362306a36Sopenharmony_ci                    pm_qos = <&qos_video_m1_r>,
23462306a36Sopenharmony_ci                             <&qos_video_m1_w>;
23562306a36Sopenharmony_ci                    #power-domain-cells = <0>;
23662306a36Sopenharmony_ci                };
23762306a36Sopenharmony_ci                power-domain@RK3399_PD_VIO {
23862306a36Sopenharmony_ci                    reg = <RK3399_PD_VIO>;
23962306a36Sopenharmony_ci                    #power-domain-cells = <1>;
24062306a36Sopenharmony_ci                    #address-cells = <1>;
24162306a36Sopenharmony_ci                    #size-cells = <0>;
24262306a36Sopenharmony_ci
24362306a36Sopenharmony_ci                    power-domain@RK3399_PD_HDCP {
24462306a36Sopenharmony_ci                        reg = <RK3399_PD_HDCP>;
24562306a36Sopenharmony_ci                        clocks = <&cru ACLK_HDCP>,
24662306a36Sopenharmony_ci                                 <&cru HCLK_HDCP>,
24762306a36Sopenharmony_ci                                 <&cru PCLK_HDCP>;
24862306a36Sopenharmony_ci                        pm_qos = <&qos_hdcp>;
24962306a36Sopenharmony_ci                        #power-domain-cells = <0>;
25062306a36Sopenharmony_ci                    };
25162306a36Sopenharmony_ci                };
25262306a36Sopenharmony_ci            };
25362306a36Sopenharmony_ci        };
25462306a36Sopenharmony_ci    };
255