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