1# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/interconnect/qcom,rpm.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Qualcomm RPM Network-On-Chip Interconnect
8
9maintainers:
10  - Georgi Djakov <georgi.djakov@linaro.org>
11
12description: |
13  RPM interconnect providers support system bandwidth requirements through
14  RPM processor. The provider is able to communicate with the RPM through
15  the RPM shared memory device.
16
17properties:
18  reg:
19    maxItems: 1
20
21  compatible:
22    enum:
23      - qcom,msm8916-bimc
24      - qcom,msm8916-pcnoc
25      - qcom,msm8916-snoc
26      - qcom,msm8939-bimc
27      - qcom,msm8939-pcnoc
28      - qcom,msm8939-snoc
29      - qcom,msm8996-a0noc
30      - qcom,msm8996-a1noc
31      - qcom,msm8996-a2noc
32      - qcom,msm8996-bimc
33      - qcom,msm8996-cnoc
34      - qcom,msm8996-mnoc
35      - qcom,msm8996-pnoc
36      - qcom,msm8996-snoc
37      - qcom,qcs404-bimc
38      - qcom,qcs404-pcnoc
39      - qcom,qcs404-snoc
40      - qcom,sdm660-a2noc
41      - qcom,sdm660-bimc
42      - qcom,sdm660-cnoc
43      - qcom,sdm660-gnoc
44      - qcom,sdm660-mnoc
45      - qcom,sdm660-snoc
46
47  '#interconnect-cells':
48    const: 1
49
50  clocks:
51    minItems: 2
52    maxItems: 7
53
54  clock-names:
55    minItems: 2
56    maxItems: 7
57
58  power-domains:
59    maxItems: 1
60
61required:
62  - compatible
63  - reg
64  - '#interconnect-cells'
65  - clock-names
66  - clocks
67
68additionalProperties: false
69
70allOf:
71  - if:
72      properties:
73        compatible:
74          contains:
75            enum:
76              - qcom,msm8916-bimc
77              - qcom,msm8916-pcnoc
78              - qcom,msm8916-snoc
79              - qcom,msm8939-bimc
80              - qcom,msm8939-pcnoc
81              - qcom,msm8939-snoc
82              - qcom,msm8996-a1noc
83              - qcom,msm8996-a2noc
84              - qcom,msm8996-bimc
85              - qcom,msm8996-cnoc
86              - qcom,msm8996-pnoc
87              - qcom,msm8996-snoc
88              - qcom,qcs404-bimc
89              - qcom,qcs404-pcnoc
90              - qcom,qcs404-snoc
91              - qcom,sdm660-bimc
92              - qcom,sdm660-cnoc
93              - qcom,sdm660-gnoc
94              - qcom,sdm660-snoc
95
96      then:
97        properties:
98          clock-names:
99            items:
100              - const: bus
101              - const: bus_a
102
103          clocks:
104            items:
105              - description: Bus Clock
106              - description: Bus A Clock
107
108        # Child node's properties
109        patternProperties:
110          '^interconnect-[a-z0-9]+$':
111            type: object
112            description:
113              snoc-mm is a child of snoc, sharing snoc's register address space.
114
115            properties:
116              compatible:
117                enum:
118                  - qcom,msm8939-snoc-mm
119
120              '#interconnect-cells':
121                const: 1
122
123              clock-names:
124                items:
125                  - const: bus
126                  - const: bus_a
127
128              clocks:
129                items:
130                  - description: Bus Clock
131                  - description: Bus A Clock
132
133            required:
134              - compatible
135              - '#interconnect-cells'
136              - clock-names
137              - clocks
138
139  - if:
140      properties:
141        compatible:
142          contains:
143            enum:
144              - qcom,msm8996-mnoc
145              - qcom,sdm660-mnoc
146
147    then:
148      properties:
149        clock-names:
150          items:
151            - const: bus
152            - const: bus_a
153            - const: iface
154
155        clocks:
156          items:
157            - description: Bus Clock.
158            - description: Bus A Clock.
159            - description: CPU-NoC High-performance Bus Clock.
160
161  - if:
162      properties:
163        compatible:
164          contains:
165            enum:
166              - qcom,msm8996-a0noc
167
168    then:
169      properties:
170        clock-names:
171          items:
172            - const: aggre0_snoc_axi
173            - const: aggre0_cnoc_ahb
174            - const: aggre0_noc_mpu_cfg
175
176        clocks:
177          items:
178            - description: Aggregate0 System NoC AXI Clock.
179            - description: Aggregate0 Config NoC AHB Clock.
180            - description: Aggregate0 NoC MPU Clock.
181
182      required:
183        - power-domains
184
185  - if:
186      properties:
187        compatible:
188          contains:
189            enum:
190              - qcom,sdm660-a2noc
191
192    then:
193      properties:
194        clock-names:
195          items:
196            - const: bus
197            - const: bus_a
198            - const: ipa
199            - const: ufs_axi
200            - const: aggre2_ufs_axi
201            - const: aggre2_usb3_axi
202            - const: cfg_noc_usb2_axi
203
204        clocks:
205          items:
206            - description: Bus Clock.
207            - description: Bus A Clock.
208            - description: IPA Clock.
209            - description: UFS AXI Clock.
210            - description: Aggregate2 UFS AXI Clock.
211            - description: Aggregate2 USB3 AXI Clock.
212            - description: Config NoC USB2 AXI Clock.
213
214examples:
215  - |
216      #include <dt-bindings/clock/qcom,rpmcc.h>
217
218      bimc: interconnect@400000 {
219              compatible = "qcom,msm8916-bimc";
220              reg = <0x00400000 0x62000>;
221              #interconnect-cells = <1>;
222              clock-names = "bus", "bus_a";
223              clocks = <&rpmcc RPM_SMD_BIMC_CLK>,
224                       <&rpmcc RPM_SMD_BIMC_A_CLK>;
225      };
226
227      pcnoc: interconnect@500000 {
228              compatible = "qcom,msm8916-pcnoc";
229              reg = <0x00500000 0x11000>;
230              #interconnect-cells = <1>;
231              clock-names = "bus", "bus_a";
232              clocks = <&rpmcc RPM_SMD_PCNOC_CLK>,
233                       <&rpmcc RPM_SMD_PCNOC_A_CLK>;
234      };
235
236      snoc: interconnect@580000 {
237              compatible = "qcom,msm8916-snoc";
238              reg = <0x00580000 0x14000>;
239              #interconnect-cells = <1>;
240              clock-names = "bus", "bus_a";
241              clocks = <&rpmcc RPM_SMD_SNOC_CLK>,
242                       <&rpmcc RPM_SMD_SNOC_A_CLK>;
243      };
244