xref: /freebsd/sys/contrib/device-tree/Bindings/display/msm/gmu.yaml (revision f5f40dd63bc7acbb5312b26ac1ea1103c12352a6)
1# SPDX-License-Identifier: GPL-2.0-only
2# Copyright 2019-2020, The Linux Foundation, All Rights Reserved
3%YAML 1.2
4---
5
6$id: http://devicetree.org/schemas/display/msm/gmu.yaml#
7$schema: http://devicetree.org/meta-schemas/core.yaml#
8
9title: GMU attached to certain Adreno GPUs
10
11maintainers:
12  - Rob Clark <robdclark@gmail.com>
13
14description: |
15  These bindings describe the Graphics Management Unit (GMU) that is attached
16  to members of the Adreno A6xx GPU family. The GMU provides on-device power
17  management and support to improve power efficiency and reduce the load on
18  the CPU.
19
20properties:
21  compatible:
22    oneOf:
23      - items:
24          - pattern: '^qcom,adreno-gmu-[67][0-9][0-9]\.[0-9]$'
25          - const: qcom,adreno-gmu
26      - const: qcom,adreno-gmu-wrapper
27
28  reg:
29    minItems: 1
30    maxItems: 4
31
32  reg-names:
33    minItems: 1
34    maxItems: 4
35
36  clocks:
37    minItems: 4
38    maxItems: 7
39
40  clock-names:
41    minItems: 4
42    maxItems: 7
43
44  interrupts:
45    items:
46      - description: GMU HFI interrupt
47      - description: GMU interrupt
48
49  interrupt-names:
50    items:
51      - const: hfi
52      - const: gmu
53
54  power-domains:
55    items:
56      - description: CX power domain
57      - description: GX power domain
58
59  power-domain-names:
60    items:
61      - const: cx
62      - const: gx
63
64  iommus:
65    maxItems: 1
66
67  qcom,qmp:
68    $ref: /schemas/types.yaml#/definitions/phandle
69    description: Reference to the AOSS side-channel message RAM
70
71  operating-points-v2: true
72
73  opp-table:
74    type: object
75
76required:
77  - compatible
78  - reg
79  - reg-names
80  - power-domains
81  - power-domain-names
82
83additionalProperties: false
84
85allOf:
86  - if:
87      properties:
88        compatible:
89          contains:
90            enum:
91              - qcom,adreno-gmu-618.0
92              - qcom,adreno-gmu-630.2
93    then:
94      properties:
95        reg:
96          items:
97            - description: Core GMU registers
98            - description: GMU PDC registers
99            - description: GMU PDC sequence registers
100        reg-names:
101          items:
102            - const: gmu
103            - const: gmu_pdc
104            - const: gmu_pdc_seq
105        clocks:
106          items:
107            - description: GMU clock
108            - description: GPU CX clock
109            - description: GPU AXI clock
110            - description: GPU MEMNOC clock
111        clock-names:
112          items:
113            - const: gmu
114            - const: cxo
115            - const: axi
116            - const: memnoc
117
118  - if:
119      properties:
120        compatible:
121          contains:
122            enum:
123              - qcom,adreno-gmu-635.0
124              - qcom,adreno-gmu-660.1
125    then:
126      properties:
127        reg:
128          items:
129            - description: Core GMU registers
130            - description: Resource controller registers
131            - description: GMU PDC registers
132        reg-names:
133          items:
134            - const: gmu
135            - const: rscc
136            - const: gmu_pdc
137        clocks:
138          items:
139            - description: GMU clock
140            - description: GPU CX clock
141            - description: GPU AXI clock
142            - description: GPU MEMNOC clock
143            - description: GPU AHB clock
144            - description: GPU HUB CX clock
145            - description: GPU SMMU vote clock
146        clock-names:
147          items:
148            - const: gmu
149            - const: cxo
150            - const: axi
151            - const: memnoc
152            - const: ahb
153            - const: hub
154            - const: smmu_vote
155
156  - if:
157      properties:
158        compatible:
159          contains:
160            enum:
161              - qcom,adreno-gmu-640.1
162    then:
163      properties:
164        reg:
165          items:
166            - description: Core GMU registers
167            - description: GMU PDC registers
168            - description: GMU PDC sequence registers
169        reg-names:
170          items:
171            - const: gmu
172            - const: gmu_pdc
173            - const: gmu_pdc_seq
174
175  - if:
176      properties:
177        compatible:
178          contains:
179            enum:
180              - qcom,adreno-gmu-650.2
181    then:
182      properties:
183        reg:
184          items:
185            - description: Core GMU registers
186            - description: Resource controller registers
187            - description: GMU PDC registers
188            - description: GMU PDC sequence registers
189        reg-names:
190          items:
191            - const: gmu
192            - const: rscc
193            - const: gmu_pdc
194            - const: gmu_pdc_seq
195
196  - if:
197      properties:
198        compatible:
199          contains:
200            enum:
201              - qcom,adreno-gmu-640.1
202              - qcom,adreno-gmu-650.2
203    then:
204      properties:
205        clocks:
206          items:
207            - description: GPU AHB clock
208            - description: GMU clock
209            - description: GPU CX clock
210            - description: GPU AXI clock
211            - description: GPU MEMNOC clock
212        clock-names:
213          items:
214            - const: ahb
215            - const: gmu
216            - const: cxo
217            - const: axi
218            - const: memnoc
219
220  - if:
221      properties:
222        compatible:
223          contains:
224            enum:
225              - qcom,adreno-gmu-730.1
226              - qcom,adreno-gmu-740.1
227    then:
228      properties:
229        reg:
230          items:
231            - description: Core GMU registers
232            - description: Resource controller registers
233            - description: GMU PDC registers
234        reg-names:
235          items:
236            - const: gmu
237            - const: rscc
238            - const: gmu_pdc
239        clocks:
240          items:
241            - description: GPU AHB clock
242            - description: GMU clock
243            - description: GPU CX clock
244            - description: GPU AXI clock
245            - description: GPU MEMNOC clock
246            - description: GMU HUB clock
247            - description: GPUSS DEMET clock
248        clock-names:
249          items:
250            - const: ahb
251            - const: gmu
252            - const: cxo
253            - const: axi
254            - const: memnoc
255            - const: hub
256            - const: demet
257
258      required:
259        - qcom,qmp
260
261  - if:
262      properties:
263        compatible:
264          contains:
265            const: qcom,adreno-gmu-wrapper
266    then:
267      properties:
268        reg:
269          items:
270            - description: GMU wrapper register space
271        reg-names:
272          items:
273            - const: gmu
274    else:
275      required:
276        - clocks
277        - clock-names
278        - interrupts
279        - interrupt-names
280        - iommus
281        - operating-points-v2
282
283examples:
284  - |
285    #include <dt-bindings/clock/qcom,gpucc-sdm845.h>
286    #include <dt-bindings/clock/qcom,gcc-sdm845.h>
287    #include <dt-bindings/interrupt-controller/irq.h>
288    #include <dt-bindings/interrupt-controller/arm-gic.h>
289
290    gmu: gmu@506a000 {
291        compatible = "qcom,adreno-gmu-630.2", "qcom,adreno-gmu";
292
293        reg = <0x506a000 0x30000>,
294              <0xb280000 0x10000>,
295              <0xb480000 0x10000>;
296        reg-names = "gmu", "gmu_pdc", "gmu_pdc_seq";
297
298        clocks = <&gpucc GPU_CC_CX_GMU_CLK>,
299                 <&gpucc GPU_CC_CXO_CLK>,
300                 <&gcc GCC_DDRSS_GPU_AXI_CLK>,
301                 <&gcc GCC_GPU_MEMNOC_GFX_CLK>;
302        clock-names = "gmu", "cxo", "axi", "memnoc";
303
304        interrupts = <GIC_SPI 304 IRQ_TYPE_LEVEL_HIGH>,
305                     <GIC_SPI 305 IRQ_TYPE_LEVEL_HIGH>;
306        interrupt-names = "hfi", "gmu";
307
308        power-domains = <&gpucc GPU_CX_GDSC>,
309                        <&gpucc GPU_GX_GDSC>;
310        power-domain-names = "cx", "gx";
311
312        iommus = <&adreno_smmu 5>;
313        operating-points-v2 = <&gmu_opp_table>;
314    };
315
316    gmu_wrapper: gmu@596a000 {
317        compatible = "qcom,adreno-gmu-wrapper";
318        reg = <0x0596a000 0x30000>;
319        reg-names = "gmu";
320        power-domains = <&gpucc GPU_CX_GDSC>,
321                        <&gpucc GPU_GX_GDSC>;
322        power-domain-names = "cx", "gx";
323    };
324