1# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/soc/qcom/qcom,smd-rpm.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Qualcomm Resource Power Manager (RPM) over SMD/GLINK
8
9description: |
10  This driver is used to interface with the Resource Power Manager (RPM) found
11  in various Qualcomm platforms. The RPM allows each component in the system
12  to vote for state of the system resources, such as clocks, regulators and bus
13  frequencies.
14
15  The SMD or GLINK information for the RPM edge should be filled out.  See
16  qcom,smd.yaml for the required edge properties.  All SMD/GLINK related
17  properties will reside within the RPM node itself.
18
19  The RPM exposes resources to its subnodes.  The rpm_requests node must be
20  present and this subnode may contain children that designate regulator
21  resources.
22
23  Refer to Documentation/devicetree/bindings/regulator/qcom,smd-rpm-regulator.yaml
24  for information on the regulator subnodes that can exist under the
25  rpm_requests.
26
27maintainers:
28  - Andy Gross <agross@kernel.org>
29  - Bjorn Andersson <bjorn.andersson@linaro.org>
30
31properties:
32  compatible:
33    enum:
34      - qcom,rpm-apq8084
35      - qcom,rpm-ipq6018
36      - qcom,rpm-ipq9574
37      - qcom,rpm-msm8226
38      - qcom,rpm-msm8909
39      - qcom,rpm-msm8916
40      - qcom,rpm-msm8936
41      - qcom,rpm-msm8953
42      - qcom,rpm-msm8974
43      - qcom,rpm-msm8976
44      - qcom,rpm-msm8994
45      - qcom,rpm-msm8996
46      - qcom,rpm-msm8998
47      - qcom,rpm-sdm660
48      - qcom,rpm-sm6115
49      - qcom,rpm-sm6125
50      - qcom,rpm-sm6375
51      - qcom,rpm-qcm2290
52      - qcom,rpm-qcs404
53
54  clock-controller:
55    $ref: /schemas/clock/qcom,rpmcc.yaml#
56    unevaluatedProperties: false
57
58  power-controller:
59    $ref: /schemas/power/qcom,rpmpd.yaml#
60
61  qcom,glink-channels:
62    $ref: /schemas/types.yaml#/definitions/string-array
63    description: Channel name used for the RPM communication
64    items:
65      - const: rpm_requests
66
67  qcom,smd-channels:
68    $ref: /schemas/types.yaml#/definitions/string-array
69    description: Channel name used for the RPM communication
70    items:
71      - const: rpm_requests
72
73patternProperties:
74  "^regulators(-[01])?$":
75    $ref: /schemas/regulator/qcom,smd-rpm-regulator.yaml#
76    unevaluatedProperties: false
77
78if:
79  properties:
80    compatible:
81      contains:
82        enum:
83          - qcom,rpm-apq8084
84          - qcom,rpm-msm8916
85          - qcom,rpm-msm8936
86          - qcom,rpm-msm8974
87          - qcom,rpm-msm8976
88          - qcom,rpm-msm8953
89          - qcom,rpm-msm8994
90then:
91  properties:
92    qcom,glink-channels: false
93  required:
94    - qcom,smd-channels
95else:
96  properties:
97    qcom,smd-channels: false
98  required:
99    - qcom,glink-channels
100
101required:
102  - compatible
103
104additionalProperties: false
105
106examples:
107  - |
108    #include <dt-bindings/interrupt-controller/arm-gic.h>
109    #include <dt-bindings/interrupt-controller/irq.h>
110
111    smd {
112        compatible = "qcom,smd";
113
114        rpm {
115            interrupts = <GIC_SPI 168 IRQ_TYPE_EDGE_RISING>;
116            qcom,ipc = <&apcs 8 0>;
117            qcom,smd-edge = <15>;
118
119            rpm-requests {
120                compatible = "qcom,rpm-msm8916";
121                qcom,smd-channels = "rpm_requests";
122
123                clock-controller {
124                    compatible = "qcom,rpmcc-msm8916", "qcom,rpmcc";
125                    #clock-cells = <1>;
126                    clocks = <&xo_board>;
127                    clock-names = "xo";
128                };
129
130                power-controller {
131                    compatible = "qcom,msm8916-rpmpd";
132                    #power-domain-cells = <1>;
133                    operating-points-v2 = <&rpmpd_opp_table>;
134
135                    rpmpd_opp_table: opp-table {
136                        compatible = "operating-points-v2";
137
138                        opp-1 {
139                            opp-level = <1>;
140                        };
141                        opp-2 {
142                            opp-level = <2>;
143                        };
144                    };
145                };
146            };
147        };
148    };
149