blob: 7de2c29606e5aa4ab985273950468471df83fa96 [file] [log] [blame]
Tom Rini53633a82024-02-29 12:33:36 -05001# 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
8title: System Control and Management Interface (SCMI) Message Protocol
9
10maintainers:
11 - Sudeep Holla <sudeep.holla@arm.com>
12
13description: |
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
25properties:
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 ARM SMC/HVC transport
38 with shmem address(4KB-page, offset) as parameters
39 items:
40 - const: arm,scmi-smc-param
41 - description: SCMI compliant firmware with Qualcomm SMC/HVC transport
42 items:
43 - const: qcom,scmi-smc
44 - description: SCMI compliant firmware with SCMI Virtio transport.
45 The virtio transport only supports a single device.
46 items:
47 - const: arm,scmi-virtio
48 - description: SCMI compliant firmware with OP-TEE transport
49 items:
50 - const: linaro,scmi-optee
51
52 interrupts:
53 description:
54 The interrupt that indicates message completion by the platform
55 rather than by the return of the smc call. This should not be used
56 except when the platform requires such behavior.
57 maxItems: 1
58
59 interrupt-names:
60 const: a2p
61
62 mbox-names:
63 description:
64 Specifies the mailboxes used to communicate with SCMI compliant
65 firmware.
66 oneOf:
67 - items:
68 - const: tx
69 - const: rx
70 minItems: 1
71 - items:
72 - const: tx
73 - const: tx_reply
74 - const: rx
75 minItems: 2
76
77 mboxes:
78 description:
79 List of phandle and mailbox channel specifiers. It should contain
80 exactly one, two or three mailboxes; the first one or two for transmitting
81 messages ("tx") and another optional ("rx") for receiving notifications
82 and delayed responses, if supported by the platform.
83 The number of mailboxes needed for transmitting messages depends on the
84 type of channels exposed by the specific underlying mailbox controller;
85 one single channel descriptor is enough if such channel is bidirectional,
86 while two channel descriptors are needed to represent the SCMI ("tx")
87 channel if the underlying mailbox channels are of unidirectional type.
88 The effective combination in numbers of mboxes and shmem descriptors let
89 the SCMI subsystem determine unambiguosly which type of SCMI channels are
90 made available by the underlying mailbox controller and how to use them.
91 1 mbox / 1 shmem => SCMI TX over 1 mailbox bidirectional channel
92 2 mbox / 2 shmem => SCMI TX and RX over 2 mailbox bidirectional channels
93 2 mbox / 1 shmem => SCMI TX over 2 mailbox unidirectional channels
94 3 mbox / 2 shmem => SCMI TX and RX over 3 mailbox unidirectional channels
95 Any other combination of mboxes and shmem is invalid.
96 minItems: 1
97 maxItems: 3
98
99 shmem:
100 description:
101 List of phandle pointing to the shared memory(SHM) area, for each
102 transport channel specified.
103 minItems: 1
104 maxItems: 2
105
106 '#address-cells':
107 const: 1
108
109 '#size-cells':
110 const: 0
111
112 atomic-threshold-us:
113 description:
114 An optional time value, expressed in microseconds, representing, on this
115 platform, the threshold above which any SCMI command, advertised to have
116 an higher-than-threshold execution latency, should not be considered for
117 atomic mode of operation, even if requested.
118 default: 0
119
120 arm,smc-id:
121 $ref: /schemas/types.yaml#/definitions/uint32
122 description:
123 SMC id required when using smc or hvc transports
124
125 linaro,optee-channel-id:
126 $ref: /schemas/types.yaml#/definitions/uint32
127 description:
128 Channel specifier required when using OP-TEE transport.
129
130 protocol@11:
131 $ref: '#/$defs/protocol-node'
132 unevaluatedProperties: false
133
134 properties:
135 reg:
136 const: 0x11
137
138 '#power-domain-cells':
139 const: 1
140
141 required:
142 - '#power-domain-cells'
143
144 protocol@13:
145 $ref: '#/$defs/protocol-node'
146 unevaluatedProperties: false
147
148 properties:
149 reg:
150 const: 0x13
151
152 '#clock-cells':
153 const: 1
154
155 '#power-domain-cells':
156 const: 1
157
158 oneOf:
159 - required:
160 - '#clock-cells'
161
162 - required:
163 - '#power-domain-cells'
164
165 protocol@14:
166 $ref: '#/$defs/protocol-node'
167 unevaluatedProperties: false
168
169 properties:
170 reg:
171 const: 0x14
172
173 '#clock-cells':
174 const: 1
175
176 required:
177 - '#clock-cells'
178
179 protocol@15:
180 $ref: '#/$defs/protocol-node'
181 unevaluatedProperties: false
182
183 properties:
184 reg:
185 const: 0x15
186
187 '#thermal-sensor-cells':
188 const: 1
189
190 required:
191 - '#thermal-sensor-cells'
192
193 protocol@16:
194 $ref: '#/$defs/protocol-node'
195 unevaluatedProperties: false
196
197 properties:
198 reg:
199 const: 0x16
200
201 '#reset-cells':
202 const: 1
203
204 required:
205 - '#reset-cells'
206
207 protocol@17:
208 $ref: '#/$defs/protocol-node'
209 unevaluatedProperties: false
210
211 properties:
212 reg:
213 const: 0x17
214
215 regulators:
216 type: object
217 additionalProperties: false
218 description:
219 The list of all regulators provided by this SCMI controller.
220
221 properties:
222 '#address-cells':
223 const: 1
224
225 '#size-cells':
226 const: 0
227
228 patternProperties:
229 '^regulator@[0-9a-f]+$':
230 type: object
231 $ref: /schemas/regulator/regulator.yaml#
232 unevaluatedProperties: false
233
234 properties:
235 reg:
236 maxItems: 1
237 description: Identifier for the voltage regulator.
238
239 required:
240 - reg
241
242 protocol@18:
243 $ref: '#/$defs/protocol-node'
244 unevaluatedProperties: false
245
246 properties:
247 reg:
248 const: 0x18
249
Tom Rini762f85b2024-07-20 11:15:10 -0600250 protocol@19:
251 type: object
252 allOf:
253 - $ref: '#/$defs/protocol-node'
254 - $ref: /schemas/pinctrl/pinctrl.yaml
255
256 unevaluatedProperties: false
257
258 properties:
259 reg:
260 const: 0x19
261
262 patternProperties:
263 '-pins$':
264 type: object
265 allOf:
266 - $ref: /schemas/pinctrl/pincfg-node.yaml#
267 - $ref: /schemas/pinctrl/pinmux-node.yaml#
268 unevaluatedProperties: false
269
270 description:
271 A pin multiplexing sub-node describes how to configure a
272 set of pins in some desired function.
273 A single sub-node may define several pin configurations.
274 This sub-node is using the default pinctrl bindings to configure
275 pin multiplexing and using SCMI protocol to apply a specified
276 configuration.
277
278 required:
279 - reg
280
Tom Rini53633a82024-02-29 12:33:36 -0500281additionalProperties: false
282
283$defs:
284 protocol-node:
285 type: object
286 description:
287 Each sub-node represents a protocol supported. If the platform
288 supports a dedicated communication channel for a particular protocol,
289 then the corresponding transport properties must be present.
290 The virtio transport does not support a dedicated communication channel.
291
292 properties:
293 reg:
294 maxItems: 1
295
296 mbox-names:
297 oneOf:
298 - items:
299 - const: tx
300 - const: rx
301 minItems: 1
302 - items:
303 - const: tx
304 - const: tx_reply
305 - const: rx
306 minItems: 2
307
308 mboxes:
309 minItems: 1
310 maxItems: 3
311
312 shmem:
313 minItems: 1
314 maxItems: 2
315
316 linaro,optee-channel-id:
317 $ref: /schemas/types.yaml#/definitions/uint32
318 description:
319 Channel specifier required when using OP-TEE transport and
320 protocol has a dedicated communication channel.
321
322 required:
323 - reg
324
325required:
326 - compatible
327
328if:
329 properties:
330 compatible:
331 contains:
332 const: arm,scmi
333then:
334 properties:
335 interrupts: false
336 interrupt-names: false
337
338 required:
339 - mboxes
340 - shmem
341
342else:
343 if:
344 properties:
345 compatible:
346 contains:
347 enum:
348 - arm,scmi-smc
349 - arm,scmi-smc-param
350 - qcom,scmi-smc
351 then:
352 required:
353 - arm,smc-id
354 - shmem
355
356 else:
357 if:
358 properties:
359 compatible:
360 contains:
361 const: linaro,scmi-optee
362 then:
363 required:
364 - linaro,optee-channel-id
365
366examples:
367 - |
368 firmware {
369 scmi {
370 compatible = "arm,scmi";
371 mboxes = <&mhuB 0 0>,
372 <&mhuB 0 1>;
373 mbox-names = "tx", "rx";
374 shmem = <&cpu_scp_lpri0>,
375 <&cpu_scp_lpri1>;
376
377 #address-cells = <1>;
378 #size-cells = <0>;
379
380 atomic-threshold-us = <10000>;
381
382 scmi_devpd: protocol@11 {
383 reg = <0x11>;
384 #power-domain-cells = <1>;
385 };
386
387 scmi_dvfs: protocol@13 {
388 reg = <0x13>;
Tom Rini762f85b2024-07-20 11:15:10 -0600389 #power-domain-cells = <1>;
Tom Rini53633a82024-02-29 12:33:36 -0500390
391 mboxes = <&mhuB 1 0>,
392 <&mhuB 1 1>;
393 mbox-names = "tx", "rx";
394 shmem = <&cpu_scp_hpri0>,
395 <&cpu_scp_hpri1>;
396 };
397
398 scmi_clk: protocol@14 {
399 reg = <0x14>;
400 #clock-cells = <1>;
401 };
402
403 scmi_sensors: protocol@15 {
404 reg = <0x15>;
405 #thermal-sensor-cells = <1>;
406 };
407
408 scmi_reset: protocol@16 {
409 reg = <0x16>;
410 #reset-cells = <1>;
411 };
412
413 scmi_voltage: protocol@17 {
414 reg = <0x17>;
415 regulators {
416 #address-cells = <1>;
417 #size-cells = <0>;
418
419 regulator_devX: regulator@0 {
420 reg = <0x0>;
421 regulator-max-microvolt = <3300000>;
422 };
423
424 regulator_devY: regulator@9 {
425 reg = <0x9>;
426 regulator-min-microvolt = <500000>;
427 regulator-max-microvolt = <4200000>;
428 };
429 };
430 };
431
432 scmi_powercap: protocol@18 {
433 reg = <0x18>;
434 };
Tom Rini762f85b2024-07-20 11:15:10 -0600435
436 scmi_pinctrl: protocol@19 {
437 reg = <0x19>;
438
439 i2c2-pins {
440 groups = "g_i2c2_a", "g_i2c2_b";
441 function = "f_i2c2";
442 };
443
444 mdio-pins {
445 groups = "g_avb_mdio";
446 drive-strength = <24>;
447 };
448
449 keys_pins: keys-pins {
450 pins = "gpio_5_17", "gpio_5_20", "gpio_5_22", "gpio_2_1";
451 bias-pull-up;
452 };
453 };
Tom Rini53633a82024-02-29 12:33:36 -0500454 };
455 };
456
457 soc {
458 #address-cells = <2>;
459 #size-cells = <2>;
460
461 sram@50000000 {
462 compatible = "mmio-sram";
463 reg = <0x0 0x50000000 0x0 0x10000>;
464
465 #address-cells = <1>;
466 #size-cells = <1>;
467 ranges = <0 0x0 0x50000000 0x10000>;
468
469 cpu_scp_lpri0: scp-sram-section@0 {
470 compatible = "arm,scmi-shmem";
471 reg = <0x0 0x80>;
472 };
473
474 cpu_scp_lpri1: scp-sram-section@80 {
475 compatible = "arm,scmi-shmem";
476 reg = <0x80 0x80>;
477 };
478
479 cpu_scp_hpri0: scp-sram-section@100 {
480 compatible = "arm,scmi-shmem";
481 reg = <0x100 0x80>;
482 };
483
484 cpu_scp_hpri2: scp-sram-section@180 {
485 compatible = "arm,scmi-shmem";
486 reg = <0x180 0x80>;
487 };
488 };
489 };
490
491 - |
492 firmware {
493 scmi {
494 compatible = "arm,scmi-smc";
495 shmem = <&cpu_scp_lpri0>, <&cpu_scp_lpri1>;
496 arm,smc-id = <0xc3000001>;
497
498 #address-cells = <1>;
499 #size-cells = <0>;
500
501 scmi_devpd1: protocol@11 {
502 reg = <0x11>;
503 #power-domain-cells = <1>;
504 };
505 };
506 };
507
508 - |
509 firmware {
510 scmi {
511 compatible = "linaro,scmi-optee";
512 linaro,optee-channel-id = <0>;
513
514 #address-cells = <1>;
515 #size-cells = <0>;
516
517 scmi_dvfs1: protocol@13 {
518 reg = <0x13>;
519 linaro,optee-channel-id = <1>;
520 shmem = <&cpu_optee_lpri0>;
Tom Rini762f85b2024-07-20 11:15:10 -0600521 #power-domain-cells = <1>;
Tom Rini53633a82024-02-29 12:33:36 -0500522 };
523
524 scmi_clk0: protocol@14 {
525 reg = <0x14>;
526 #clock-cells = <1>;
527 };
528 };
529 };
530
531 soc {
532 #address-cells = <2>;
533 #size-cells = <2>;
534
535 sram@51000000 {
536 compatible = "mmio-sram";
537 reg = <0x0 0x51000000 0x0 0x10000>;
538
539 #address-cells = <1>;
540 #size-cells = <1>;
541 ranges = <0 0x0 0x51000000 0x10000>;
542
543 cpu_optee_lpri0: optee-sram-section@0 {
544 compatible = "arm,scmi-shmem";
545 reg = <0x0 0x80>;
546 };
547 };
548 };
549
550...