summaryrefslogtreecommitdiff
path: root/Documentation/devicetree/bindings/soc/qcom/qcom,smd-rpm.yaml
blob: ea86569a40d3cb2e72da2831f49f3e09828db103 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/soc/qcom/qcom,smd-rpm.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Qualcomm Resource Power Manager (RPM) over SMD/GLINK

description: |
  This driver is used to interface with the Resource Power Manager (RPM) found
  in various Qualcomm platforms. The RPM allows each component in the system
  to vote for state of the system resources, such as clocks, regulators and bus
  frequencies.

  The SMD or GLINK information for the RPM edge should be filled out.  See
  qcom,smd.yaml for the required edge properties.  All SMD/GLINK related
  properties will reside within the RPM node itself.

  The RPM exposes resources to its subnodes.  The rpm_requests node must be
  present and this subnode may contain children that designate regulator
  resources.

  Refer to Documentation/devicetree/bindings/regulator/qcom,smd-rpm-regulator.yaml
  for information on the regulator subnodes that can exist under the
  rpm_requests.

maintainers:
  - Andy Gross <agross@kernel.org>
  - Bjorn Andersson <bjorn.andersson@linaro.org>

properties:
  compatible:
    enum:
      - qcom,rpm-apq8084
      - qcom,rpm-ipq6018
      - qcom,rpm-ipq9574
      - qcom,rpm-msm8226
      - qcom,rpm-msm8909
      - qcom,rpm-msm8916
      - qcom,rpm-msm8936
      - qcom,rpm-msm8953
      - qcom,rpm-msm8974
      - qcom,rpm-msm8976
      - qcom,rpm-msm8994
      - qcom,rpm-msm8996
      - qcom,rpm-msm8998
      - qcom,rpm-sdm660
      - qcom,rpm-sm6115
      - qcom,rpm-sm6125
      - qcom,rpm-sm6375
      - qcom,rpm-qcm2290
      - qcom,rpm-qcs404

  clock-controller:
    $ref: /schemas/clock/qcom,rpmcc.yaml#
    unevaluatedProperties: false

  power-controller:
    $ref: /schemas/power/qcom,rpmpd.yaml#

  qcom,glink-channels:
    $ref: /schemas/types.yaml#/definitions/string-array
    description: Channel name used for the RPM communication
    items:
      - const: rpm_requests

  qcom,smd-channels:
    $ref: /schemas/types.yaml#/definitions/string-array
    description: Channel name used for the RPM communication
    items:
      - const: rpm_requests

patternProperties:
  "^regulators(-[01])?$":
    $ref: /schemas/regulator/qcom,smd-rpm-regulator.yaml#
    unevaluatedProperties: false

if:
  properties:
    compatible:
      contains:
        enum:
          - qcom,rpm-apq8084
          - qcom,rpm-msm8916
          - qcom,rpm-msm8936
          - qcom,rpm-msm8974
          - qcom,rpm-msm8976
          - qcom,rpm-msm8953
          - qcom,rpm-msm8994
then:
  properties:
    qcom,glink-channels: false
  required:
    - qcom,smd-channels
else:
  properties:
    qcom,smd-channels: false
  required:
    - qcom,glink-channels

required:
  - compatible

additionalProperties: false

examples:
  - |
    #include <dt-bindings/interrupt-controller/arm-gic.h>
    #include <dt-bindings/interrupt-controller/irq.h>

    smd {
        compatible = "qcom,smd";

        rpm {
            interrupts = <GIC_SPI 168 IRQ_TYPE_EDGE_RISING>;
            qcom,ipc = <&apcs 8 0>;
            qcom,smd-edge = <15>;

            rpm-requests {
                compatible = "qcom,rpm-msm8916";
                qcom,smd-channels = "rpm_requests";

                clock-controller {
                    compatible = "qcom,rpmcc-msm8916", "qcom,rpmcc";
                    #clock-cells = <1>;
                    clocks = <&xo_board>;
                    clock-names = "xo";
                };

                power-controller {
                    compatible = "qcom,msm8916-rpmpd";
                    #power-domain-cells = <1>;
                    operating-points-v2 = <&rpmpd_opp_table>;

                    rpmpd_opp_table: opp-table {
                        compatible = "operating-points-v2";

                        opp-1 {
                            opp-level = <1>;
                        };
                        opp-2 {
                            opp-level = <2>;
                        };
                    };
                };
            };
        };
    };