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: true
78
79  power-domains:
80    maxItems: 1
81
82  resets:
83    minItems: 1
84    maxItems: 2
85
86  operating-points-v2: true
87
88  "#cooling-cells":
89    const: 2
90
91  dma-coherent: true
92
93  dynamic-power-coefficient:
94    $ref: '/schemas/types.yaml#/definitions/uint32'
95    description:
96      A u32 value that represents the running time dynamic
97      power coefficient in units of uW/MHz/V^2. The
98      coefficient can either be calculated from power
99      measurements or derived by analysis.
100
101      The dynamic power consumption of the GPU is
102      proportional to the square of the Voltage (V) and
103      the clock frequency (f). The coefficient is used to
104      calculate the dynamic power as below -
105
106      Pdyn = dynamic-power-coefficient * V^2 * f
107
108      where voltage is in V, frequency is in MHz.
109
110required:
111  - compatible
112  - reg
113  - interrupts
114  - interrupt-names
115  - clocks
116
117additionalProperties: false
118
119allOf:
120  - if:
121      properties:
122        compatible:
123          contains:
124            const: allwinner,sun50i-h6-mali
125    then:
126      properties:
127        clocks:
128          minItems: 2
129      required:
130        - clock-names
131        - resets
132  - if:
133      properties:
134        compatible:
135          contains:
136            const: amlogic,meson-gxm-mali
137    then:
138      properties:
139        resets:
140          minItems: 2
141      required:
142        - resets
143
144examples:
145  - |
146    #include <dt-bindings/interrupt-controller/irq.h>
147    #include <dt-bindings/interrupt-controller/arm-gic.h>
148
149    gpu@ffa30000 {
150      compatible = "rockchip,rk3288-mali", "arm,mali-t760";
151      reg = <0xffa30000 0x10000>;
152      interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>,
153             <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>,
154             <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>;
155      interrupt-names = "job", "mmu", "gpu";
156      clocks = <&cru 0>;
157      mali-supply = <&vdd_gpu>;
158      operating-points-v2 = <&gpu_opp_table>;
159      power-domains = <&power 0>;
160      #cooling-cells = <2>;
161    };
162
163    gpu_opp_table: opp_table0 {
164      compatible = "operating-points-v2";
165
166      opp-533000000 {
167        opp-hz = /bits/ 64 <533000000>;
168        opp-microvolt = <1250000>;
169      };
170      opp-450000000 {
171        opp-hz = /bits/ 64 <450000000>;
172        opp-microvolt = <1150000>;
173      };
174      opp-400000000 {
175        opp-hz = /bits/ 64 <400000000>;
176        opp-microvolt = <1125000>;
177      };
178      opp-350000000 {
179        opp-hz = /bits/ 64 <350000000>;
180        opp-microvolt = <1075000>;
181      };
182      opp-266000000 {
183        opp-hz = /bits/ 64 <266000000>;
184        opp-microvolt = <1025000>;
185      };
186      opp-160000000 {
187        opp-hz = /bits/ 64 <160000000>;
188        opp-microvolt = <925000>;
189      };
190      opp-100000000 {
191        opp-hz = /bits/ 64 <100000000>;
192        opp-microvolt = <912500>;
193      };
194    };
195
196...
197