1# SPDX-License-Identifier: GPL-2.0-only
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/gpu/arm,mali-midgard.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: ARM Mali Midgard GPU
8
9maintainers:
10  - Rob Herring <robh@kernel.org>
11
12properties:
13  $nodename:
14    pattern: '^gpu@[a-f0-9]+$'
15  compatible:
16    oneOf:
17      - items:
18          - enum:
19              - samsung,exynos5250-mali
20          - const: arm,mali-t604
21      - items:
22          - enum:
23              - samsung,exynos5420-mali
24          - const: arm,mali-t628
25      - items:
26          - enum:
27              - allwinner,sun50i-h6-mali
28          - const: arm,mali-t720
29      - items:
30          - enum:
31              - amlogic,meson-gxm-mali
32              - realtek,rtd1295-mali
33          - const: arm,mali-t820
34      - items:
35          - enum:
36              - arm,juno-mali
37          - const: arm,mali-t624
38      - items:
39          - enum:
40              - rockchip,rk3288-mali
41              - samsung,exynos5433-mali
42          - const: arm,mali-t760
43      - items:
44          - enum:
45              - rockchip,rk3399-mali
46          - const: arm,mali-t860
47
48          # "arm,mali-t830"
49          # "arm,mali-t880"
50
51  reg:
52    maxItems: 1
53
54  interrupts:
55    items:
56      - description: Job interrupt
57      - description: MMU interrupt
58      - description: GPU interrupt
59
60  interrupt-names:
61    items:
62      - const: job
63      - const: mmu
64      - const: gpu
65
66  clocks:
67    minItems: 1
68    maxItems: 2
69
70  clock-names:
71    minItems: 1
72    items:
73      - const: core
74      - const: bus
75
76  mali-supply: true
77  opp-table:
78    type: object
79
80  power-domains:
81    maxItems: 1
82
83  resets:
84    minItems: 1
85    maxItems: 2
86
87  operating-points-v2: true
88
89  "#cooling-cells":
90    const: 2
91
92  dma-coherent: true
93
94  dynamic-power-coefficient:
95    $ref: /schemas/types.yaml#/definitions/uint32
96    description:
97      A u32 value that represents the running time dynamic
98      power coefficient in units of uW/MHz/V^2. The
99      coefficient can either be calculated from power
100      measurements or derived by analysis.
101
102      The dynamic power consumption of the GPU is
103      proportional to the square of the Voltage (V) and
104      the clock frequency (f). The coefficient is used to
105      calculate the dynamic power as below -
106
107      Pdyn = dynamic-power-coefficient * V^2 * f
108
109      where voltage is in V, frequency is in MHz.
110
111required:
112  - compatible
113  - reg
114  - interrupts
115  - interrupt-names
116  - clocks
117
118additionalProperties: false
119
120allOf:
121  - if:
122      properties:
123        compatible:
124          contains:
125            const: allwinner,sun50i-h6-mali
126    then:
127      properties:
128        clocks:
129          minItems: 2
130      required:
131        - clock-names
132        - resets
133  - if:
134      properties:
135        compatible:
136          contains:
137            const: amlogic,meson-gxm-mali
138    then:
139      properties:
140        resets:
141          minItems: 2
142      required:
143        - resets
144
145examples:
146  - |
147    #include <dt-bindings/interrupt-controller/irq.h>
148    #include <dt-bindings/interrupt-controller/arm-gic.h>
149
150    gpu@ffa30000 {
151      compatible = "rockchip,rk3288-mali", "arm,mali-t760";
152      reg = <0xffa30000 0x10000>;
153      interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>,
154             <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>,
155             <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>;
156      interrupt-names = "job", "mmu", "gpu";
157      clocks = <&cru 0>;
158      mali-supply = <&vdd_gpu>;
159      operating-points-v2 = <&gpu_opp_table>;
160      power-domains = <&power 0>;
161      #cooling-cells = <2>;
162    };
163
164    gpu_opp_table: opp-table {
165      compatible = "operating-points-v2";
166
167      opp-533000000 {
168        opp-hz = /bits/ 64 <533000000>;
169        opp-microvolt = <1250000>;
170      };
171      opp-450000000 {
172        opp-hz = /bits/ 64 <450000000>;
173        opp-microvolt = <1150000>;
174      };
175      opp-400000000 {
176        opp-hz = /bits/ 64 <400000000>;
177        opp-microvolt = <1125000>;
178      };
179      opp-350000000 {
180        opp-hz = /bits/ 64 <350000000>;
181        opp-microvolt = <1075000>;
182      };
183      opp-266000000 {
184        opp-hz = /bits/ 64 <266000000>;
185        opp-microvolt = <1025000>;
186      };
187      opp-160000000 {
188        opp-hz = /bits/ 64 <160000000>;
189        opp-microvolt = <925000>;
190      };
191      opp-100000000 {
192        opp-hz = /bits/ 64 <100000000>;
193        opp-microvolt = <912500>;
194      };
195    };
196
197...
198