1 # SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
2 # Copyright 2021 ARM Ltd.
3 %YAML 1.2
4 ---
5 $id: http://devicetree.org/schemas/firmware/arm,scmi.yaml#
6 $schema: http://devicetree.org/meta-schemas/core.yaml#
7
8 title: System Control and Management Interface (SCMI) Message Protocol bindings
9
10 maintainers:
11 - Sudeep Holla <sudeep.holla@arm.com>
12
13 description: |
14 The SCMI is intended to allow agents such as OSPM to manage various functions
15 that are provided by the hardware platform it is running on, including power
16 and performance functions.
17
18 This binding is intended to define the interface the firmware implementing
19 the SCMI as described in ARM document number ARM DEN 0056 ("ARM System Control
20 and Management Interface Platform Design Document")[0] provide for OSPM in
21 the device tree.
22
23 [0] https://developer.arm.com/documentation/den0056/latest
24
25 properties:
26 $nodename:
27 const: scmi
28
29 compatible:
30 oneOf:
31 - description: SCMI compliant firmware with mailbox transport
32 items:
33 - const: arm,scmi
34 - description: SCMI compliant firmware with ARM SMC/HVC transport
35 items:
36 - const: arm,scmi-smc
37 - description: SCMI compliant firmware with SCMI Virtio transport.
38 The virtio transport only supports a single device.
39 items:
40 - const: arm,scmi-virtio
41 - description: SCMI compliant firmware with OP-TEE transport
42 items:
43 - const: linaro,scmi-optee
44
45 interrupts:
46 description:
47 The interrupt that indicates message completion by the platform
48 rather than by the return of the smc call. This should not be used
49 except when the platform requires such behavior.
50 maxItems: 1
51
52 interrupt-names:
53 const: a2p
54
55 mbox-names:
56 description:
57 Specifies the mailboxes used to communicate with SCMI compliant
58 firmware.
59 items:
60 - const: tx
61 - const: rx
62
63 mboxes:
64 description:
65 List of phandle and mailbox channel specifiers. It should contain
66 exactly one or two mailboxes, one for transmitting messages("tx")
67 and another optional for receiving the notifications("rx") if supported.
68 minItems: 1
69 maxItems: 2
70
71 shmem:
72 description:
73 List of phandle pointing to the shared memory(SHM) area, for each
74 transport channel specified.
75 minItems: 1
76 maxItems: 2
77
78 '#address-cells':
79 const: 1
80
81 '#size-cells':
82 const: 0
83
84 atomic-threshold-us:
85 description:
86 An optional time value, expressed in microseconds, representing, on this
87 platform, the threshold above which any SCMI command, advertised to have
88 an higher-than-threshold execution latency, should not be considered for
89 atomic mode of operation, even if requested.
90 default: 0
91
92 arm,smc-id:
93 $ref: /schemas/types.yaml#/definitions/uint32
94 description:
95 SMC id required when using smc or hvc transports
96
97 linaro,optee-channel-id:
98 $ref: /schemas/types.yaml#/definitions/uint32
99 description:
100 Channel specifier required when using OP-TEE transport.
101
102 protocol@11:
103 type: object
104 properties:
105 reg:
106 const: 0x11
107
108 '#power-domain-cells':
109 const: 1
110
111 required:
112 - '#power-domain-cells'
113
114 protocol@13:
115 type: object
116 properties:
117 reg:
118 const: 0x13
119
120 '#clock-cells':
121 const: 1
122
123 required:
124 - '#clock-cells'
125
126 protocol@14:
127 type: object
128 properties:
129 reg:
130 const: 0x14
131
132 '#clock-cells':
133 const: 1
134
135 required:
136 - '#clock-cells'
137
138 protocol@15:
139 type: object
140 properties:
141 reg:
142 const: 0x15
143
144 '#thermal-sensor-cells':
145 const: 1
146
147 required:
148 - '#thermal-sensor-cells'
149
150 protocol@16:
151 type: object
152 properties:
153 reg:
154 const: 0x16
155
156 '#reset-cells':
157 const: 1
158
159 required:
160 - '#reset-cells'
161
162 protocol@17:
163 type: object
164 properties:
165 reg:
166 const: 0x17
167
168 regulators:
169 type: object
170 description:
171 The list of all regulators provided by this SCMI controller.
172
173 patternProperties:
174 '^regulators@[0-9a-f]+$':
175 type: object
176 $ref: "../regulator/regulator.yaml#"
177
178 properties:
179 reg:
180 maxItems: 1
181 description: Identifier for the voltage regulator.
182
183 required:
184 - reg
185
186 protocol@18:
187 type: object
188 properties:
189 reg:
190 const: 0x18
191
192 additionalProperties: false
193
194 patternProperties:
195 '^protocol@[0-9a-f]+$':
196 type: object
197 description:
198 Each sub-node represents a protocol supported. If the platform
199 supports a dedicated communication channel for a particular protocol,
200 then the corresponding transport properties must be present.
201 The virtio transport does not support a dedicated communication channel.
202
203 properties:
204 reg:
205 maxItems: 1
206
207 mbox-names:
208 items:
209 - const: tx
210 - const: rx
211
212 mboxes:
213 minItems: 1
214 maxItems: 2
215
216 shmem:
217 minItems: 1
218 maxItems: 2
219
220 linaro,optee-channel-id:
221 $ref: /schemas/types.yaml#/definitions/uint32
222 description:
223 Channel specifier required when using OP-TEE transport and
224 protocol has a dedicated communication channel.
225
226 required:
227 - reg
228
229 required:
230 - compatible
231
232 if:
233 properties:
234 compatible:
235 contains:
236 const: arm,scmi
237 then:
238 properties:
239 interrupts: false
240 interrupt-names: false
241
242 required:
243 - mboxes
244 - shmem
245
246 else:
247 if:
248 properties:
249 compatible:
250 contains:
251 const: arm,scmi-smc
252 then:
253 required:
254 - arm,smc-id
255 - shmem
256
257 else:
258 if:
259 properties:
260 compatible:
261 contains:
262 const: linaro,scmi-optee
263 then:
264 required:
265 - linaro,optee-channel-id
266
267 examples:
268 - |
269 firmware {
270 scmi {
271 compatible = "arm,scmi";
272 mboxes = <&mhuB 0 0>,
273 <&mhuB 0 1>;
274 mbox-names = "tx", "rx";
275 shmem = <&cpu_scp_lpri0>,
276 <&cpu_scp_lpri1>;
277
278 #address-cells = <1>;
279 #size-cells = <0>;
280
281 atomic-threshold-us = <10000>;
282
283 scmi_devpd: protocol@11 {
284 reg = <0x11>;
285 #power-domain-cells = <1>;
286 };
287
288 scmi_dvfs: protocol@13 {
289 reg = <0x13>;
290 #clock-cells = <1>;
291
292 mboxes = <&mhuB 1 0>,
293 <&mhuB 1 1>;
294 mbox-names = "tx", "rx";
295 shmem = <&cpu_scp_hpri0>,
296 <&cpu_scp_hpri1>;
297 };
298
299 scmi_clk: protocol@14 {
300 reg = <0x14>;
301 #clock-cells = <1>;
302 };
303
304 scmi_sensors: protocol@15 {
305 reg = <0x15>;
306 #thermal-sensor-cells = <1>;
307 };
308
309 scmi_reset: protocol@16 {
310 reg = <0x16>;
311 #reset-cells = <1>;
312 };
313
314 scmi_voltage: protocol@17 {
315 reg = <0x17>;
316 regulators {
317 #address-cells = <1>;
318 #size-cells = <0>;
319
320 regulator_devX: regulator@0 {
321 reg = <0x0>;
322 regulator-max-microvolt = <3300000>;
323 };
324
325 regulator_devY: regulator@9 {
326 reg = <0x9>;
327 regulator-min-microvolt = <500000>;
328 regulator-max-microvolt = <4200000>;
329 };
330 };
331 };
332
333 scmi_powercap: protocol@18 {
334 reg = <0x18>;
335 };
336 };
337 };
338
339 soc {
340 #address-cells = <2>;
341 #size-cells = <2>;
342
343 sram@50000000 {
344 compatible = "mmio-sram";
345 reg = <0x0 0x50000000 0x0 0x10000>;
346
347 #address-cells = <1>;
348 #size-cells = <1>;
349 ranges = <0 0x0 0x50000000 0x10000>;
350
351 cpu_scp_lpri0: scp-sram-section@0 {
352 compatible = "arm,scmi-shmem";
353 reg = <0x0 0x80>;
354 };
355
356 cpu_scp_lpri1: scp-sram-section@80 {
357 compatible = "arm,scmi-shmem";
358 reg = <0x80 0x80>;
359 };
360
361 cpu_scp_hpri0: scp-sram-section@100 {
362 compatible = "arm,scmi-shmem";
363 reg = <0x100 0x80>;
364 };
365
366 cpu_scp_hpri2: scp-sram-section@180 {
367 compatible = "arm,scmi-shmem";
368 reg = <0x180 0x80>;
369 };
370 };
371 };
372
373 - |
374 firmware {
375 scmi {
376 compatible = "arm,scmi-smc";
377 shmem = <&cpu_scp_lpri0>, <&cpu_scp_lpri1>;
378 arm,smc-id = <0xc3000001>;
379
380 #address-cells = <1>;
381 #size-cells = <0>;
382
383 scmi_devpd1: protocol@11 {
384 reg = <0x11>;
385 #power-domain-cells = <1>;
386 };
387 };
388 };
389
390 - |
391 firmware {
392 scmi {
393 compatible = "linaro,scmi-optee";
394 linaro,optee-channel-id = <0>;
395
396 #address-cells = <1>;
397 #size-cells = <0>;
398
399 scmi_dvfs1: protocol@13 {
400 reg = <0x13>;
401 linaro,optee-channel-id = <1>;
402 shmem = <&cpu_optee_lpri0>;
403 #clock-cells = <1>;
404 };
405
406 scmi_clk0: protocol@14 {
407 reg = <0x14>;
408 #clock-cells = <1>;
409 };
410 };
411 };
412
413 soc {
414 #address-cells = <2>;
415 #size-cells = <2>;
416
417 sram@51000000 {
418 compatible = "mmio-sram";
419 reg = <0x0 0x51000000 0x0 0x10000>;
420
421 #address-cells = <1>;
422 #size-cells = <1>;
423 ranges = <0 0x0 0x51000000 0x10000>;
424
425 cpu_optee_lpri0: optee-sram-section@0 {
426 compatible = "arm,scmi-shmem";
427 reg = <0x0 0x80>;
428 };
429 };
430 };
431
432 ...
Cache object: d78993ca4ccaeeecb0c1b21a362fc19d
|