1# SPDX-License-Identifier: GPL-2.0-only
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/gpu/arm,mali-bifrost.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: ARM Mali Bifrost GPU
8
9maintainers:
10  - Rob Herring <robh@kernel.org>
11
12properties:
13  $nodename:
14    pattern: '^gpu@[a-f0-9]+$'
15
16  compatible:
17    items:
18      - enum:
19          - amlogic,meson-g12a-mali
20          - mediatek,mt8183-mali
21          - realtek,rtd1619-mali
22          - renesas,r9a07g044-mali
23          - renesas,r9a07g054-mali
24          - rockchip,px30-mali
25          - rockchip,rk3568-mali
26      - const: arm,mali-bifrost # Mali Bifrost GPU model/revision is fully discoverable
27
28  reg:
29    maxItems: 1
30
31  interrupts:
32    minItems: 3
33    items:
34      - description: Job interrupt
35      - description: MMU interrupt
36      - description: GPU interrupt
37      - description: Event interrupt
38
39  interrupt-names:
40    minItems: 3
41    items:
42      - const: job
43      - const: mmu
44      - const: gpu
45      - const: event
46
47  clocks:
48    minItems: 1
49    maxItems: 3
50
51  clock-names: true
52
53  mali-supply: true
54
55  sram-supply: true
56
57  operating-points-v2: true
58
59  power-domains:
60    minItems: 1
61    maxItems: 3
62
63  resets:
64    minItems: 1
65    maxItems: 3
66
67  reset-names: true
68
69  "#cooling-cells":
70    const: 2
71
72  dynamic-power-coefficient:
73    $ref: '/schemas/types.yaml#/definitions/uint32'
74    description:
75      A u32 value that represents the running time dynamic
76      power coefficient in units of uW/MHz/V^2. The
77      coefficient can either be calculated from power
78      measurements or derived by analysis.
79
80      The dynamic power consumption of the GPU is
81      proportional to the square of the Voltage (V) and
82      the clock frequency (f). The coefficient is used to
83      calculate the dynamic power as below -
84
85      Pdyn = dynamic-power-coefficient * V^2 * f
86
87      where voltage is in V, frequency is in MHz.
88
89  dma-coherent: true
90
91required:
92  - compatible
93  - reg
94  - interrupts
95  - interrupt-names
96  - clocks
97
98additionalProperties: false
99
100allOf:
101  - if:
102      properties:
103        compatible:
104          contains:
105            const: amlogic,meson-g12a-mali
106    then:
107      required:
108        - resets
109  - if:
110      properties:
111        compatible:
112          contains:
113            enum:
114              - renesas,r9a07g044-mali
115              - renesas,r9a07g054-mali
116    then:
117      properties:
118        interrupts:
119          minItems: 4
120        interrupt-names:
121          minItems: 4
122        clocks:
123          minItems: 3
124        clock-names:
125          items:
126            - const: gpu
127            - const: bus
128            - const: bus_ace
129        resets:
130          minItems: 3
131        reset-names:
132          items:
133            - const: rst
134            - const: axi_rst
135            - const: ace_rst
136      required:
137        - clock-names
138        - power-domains
139        - resets
140        - reset-names
141  - if:
142      properties:
143        compatible:
144          contains:
145            const: mediatek,mt8183-mali
146    then:
147      properties:
148        power-domains:
149          minItems: 3
150        power-domain-names:
151          items:
152            - const: core0
153            - const: core1
154            - const: core2
155
156      required:
157        - sram-supply
158        - power-domains
159        - power-domain-names
160    else:
161      properties:
162        power-domains:
163          maxItems: 1
164        sram-supply: false
165  - if:
166      properties:
167        compatible:
168          contains:
169            const: rockchip,rk3568-mali
170    then:
171      properties:
172        clocks:
173          minItems: 2
174        clock-names:
175          items:
176            - const: gpu
177            - const: bus
178      required:
179        - clock-names
180
181examples:
182  - |
183    #include <dt-bindings/interrupt-controller/irq.h>
184    #include <dt-bindings/interrupt-controller/arm-gic.h>
185
186    gpu@ffe40000 {
187      compatible = "amlogic,meson-g12a-mali", "arm,mali-bifrost";
188      reg = <0xffe40000 0x10000>;
189      interrupts = <GIC_SPI 160 IRQ_TYPE_LEVEL_HIGH>,
190             <GIC_SPI 161 IRQ_TYPE_LEVEL_HIGH>,
191             <GIC_SPI 162 IRQ_TYPE_LEVEL_HIGH>;
192      interrupt-names = "job", "mmu", "gpu";
193      clocks = <&clk 1>;
194      mali-supply = <&vdd_gpu>;
195      operating-points-v2 = <&gpu_opp_table>;
196      resets = <&reset 0>, <&reset 1>;
197    };
198
199    gpu_opp_table: opp-table {
200      compatible = "operating-points-v2";
201
202      opp-533000000 {
203        opp-hz = /bits/ 64 <533000000>;
204        opp-microvolt = <1250000>;
205      };
206      opp-450000000 {
207        opp-hz = /bits/ 64 <450000000>;
208        opp-microvolt = <1150000>;
209      };
210      opp-400000000 {
211        opp-hz = /bits/ 64 <400000000>;
212        opp-microvolt = <1125000>;
213      };
214      opp-350000000 {
215        opp-hz = /bits/ 64 <350000000>;
216        opp-microvolt = <1075000>;
217      };
218      opp-266000000 {
219        opp-hz = /bits/ 64 <266000000>;
220        opp-microvolt = <1025000>;
221      };
222      opp-160000000 {
223        opp-hz = /bits/ 64 <160000000>;
224        opp-microvolt = <925000>;
225      };
226      opp-100000000 {
227        opp-hz = /bits/ 64 <100000000>;
228        opp-microvolt = <912500>;
229      };
230    };
231
232...
233