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 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 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 oneOf: 60 - items: 61 - const: tx 62 - const: rx 63 minItems: 1 64 - items: 65 - const: tx 66 - const: tx_reply 67 - const: rx 68 minItems: 2 69 70 mboxes: 71 description: 72 List of phandle and mailbox channel specifiers. It should contain 73 exactly one, two or three mailboxes; the first one or two for transmitting 74 messages ("tx") and another optional ("rx") for receiving notifications 75 and delayed responses, if supported by the platform. 76 The number of mailboxes needed for transmitting messages depends on the 77 type of channels exposed by the specific underlying mailbox controller; 78 one single channel descriptor is enough if such channel is bidirectional, 79 while two channel descriptors are needed to represent the SCMI ("tx") 80 channel if the underlying mailbox channels are of unidirectional type. 81 The effective combination in numbers of mboxes and shmem descriptors let 82 the SCMI subsystem determine unambiguosly which type of SCMI channels are 83 made available by the underlying mailbox controller and how to use them. 84 1 mbox / 1 shmem => SCMI TX over 1 mailbox bidirectional channel 85 2 mbox / 2 shmem => SCMI TX and RX over 2 mailbox bidirectional channels 86 2 mbox / 1 shmem => SCMI TX over 2 mailbox unidirectional channels 87 3 mbox / 2 shmem => SCMI TX and RX over 3 mailbox unidirectional channels 88 Any other combination of mboxes and shmem is invalid. 89 minItems: 1 90 maxItems: 3 91 92 shmem: 93 description: 94 List of phandle pointing to the shared memory(SHM) area, for each 95 transport channel specified. 96 minItems: 1 97 maxItems: 2 98 99 '#address-cells': 100 const: 1 101 102 '#size-cells': 103 const: 0 104 105 atomic-threshold-us: 106 description: 107 An optional time value, expressed in microseconds, representing, on this 108 platform, the threshold above which any SCMI command, advertised to have 109 an higher-than-threshold execution latency, should not be considered for 110 atomic mode of operation, even if requested. 111 default: 0 112 113 arm,smc-id: 114 $ref: /schemas/types.yaml#/definitions/uint32 115 description: 116 SMC id required when using smc or hvc transports 117 118 linaro,optee-channel-id: 119 $ref: /schemas/types.yaml#/definitions/uint32 120 description: 121 Channel specifier required when using OP-TEE transport. 122 123 protocol@11: 124 $ref: '#/$defs/protocol-node' 125 unevaluatedProperties: false 126 127 properties: 128 reg: 129 const: 0x11 130 131 '#power-domain-cells': 132 const: 1 133 134 required: 135 - '#power-domain-cells' 136 137 protocol@13: 138 $ref: '#/$defs/protocol-node' 139 unevaluatedProperties: false 140 141 properties: 142 reg: 143 const: 0x13 144 145 '#clock-cells': 146 const: 1 147 148 required: 149 - '#clock-cells' 150 151 protocol@14: 152 $ref: '#/$defs/protocol-node' 153 unevaluatedProperties: false 154 155 properties: 156 reg: 157 const: 0x14 158 159 '#clock-cells': 160 const: 1 161 162 required: 163 - '#clock-cells' 164 165 protocol@15: 166 $ref: '#/$defs/protocol-node' 167 unevaluatedProperties: false 168 169 properties: 170 reg: 171 const: 0x15 172 173 '#thermal-sensor-cells': 174 const: 1 175 176 required: 177 - '#thermal-sensor-cells' 178 179 protocol@16: 180 $ref: '#/$defs/protocol-node' 181 unevaluatedProperties: false 182 183 properties: 184 reg: 185 const: 0x16 186 187 '#reset-cells': 188 const: 1 189 190 required: 191 - '#reset-cells' 192 193 protocol@17: 194 $ref: '#/$defs/protocol-node' 195 unevaluatedProperties: false 196 197 properties: 198 reg: 199 const: 0x17 200 201 regulators: 202 type: object 203 additionalProperties: false 204 description: 205 The list of all regulators provided by this SCMI controller. 206 207 properties: 208 '#address-cells': 209 const: 1 210 211 '#size-cells': 212 const: 0 213 214 patternProperties: 215 '^regulator@[0-9a-f]+$': 216 type: object 217 $ref: "../regulator/regulator.yaml#" 218 unevaluatedProperties: false 219 220 properties: 221 reg: 222 maxItems: 1 223 description: Identifier for the voltage regulator. 224 225 required: 226 - reg 227 228 protocol@18: 229 $ref: '#/$defs/protocol-node' 230 unevaluatedProperties: false 231 232 properties: 233 reg: 234 const: 0x18 235 236additionalProperties: false 237 238$defs: 239 protocol-node: 240 type: object 241 description: 242 Each sub-node represents a protocol supported. If the platform 243 supports a dedicated communication channel for a particular protocol, 244 then the corresponding transport properties must be present. 245 The virtio transport does not support a dedicated communication channel. 246 247 properties: 248 reg: 249 maxItems: 1 250 251 mbox-names: 252 oneOf: 253 - items: 254 - const: tx 255 - const: rx 256 minItems: 1 257 - items: 258 - const: tx 259 - const: tx_reply 260 - const: rx 261 minItems: 2 262 263 mboxes: 264 minItems: 1 265 maxItems: 3 266 267 shmem: 268 minItems: 1 269 maxItems: 2 270 271 linaro,optee-channel-id: 272 $ref: /schemas/types.yaml#/definitions/uint32 273 description: 274 Channel specifier required when using OP-TEE transport and 275 protocol has a dedicated communication channel. 276 277 required: 278 - reg 279 280required: 281 - compatible 282 283if: 284 properties: 285 compatible: 286 contains: 287 const: arm,scmi 288then: 289 properties: 290 interrupts: false 291 interrupt-names: false 292 293 required: 294 - mboxes 295 - shmem 296 297else: 298 if: 299 properties: 300 compatible: 301 contains: 302 const: arm,scmi-smc 303 then: 304 required: 305 - arm,smc-id 306 - shmem 307 308 else: 309 if: 310 properties: 311 compatible: 312 contains: 313 const: linaro,scmi-optee 314 then: 315 required: 316 - linaro,optee-channel-id 317 318examples: 319 - | 320 firmware { 321 scmi { 322 compatible = "arm,scmi"; 323 mboxes = <&mhuB 0 0>, 324 <&mhuB 0 1>; 325 mbox-names = "tx", "rx"; 326 shmem = <&cpu_scp_lpri0>, 327 <&cpu_scp_lpri1>; 328 329 #address-cells = <1>; 330 #size-cells = <0>; 331 332 atomic-threshold-us = <10000>; 333 334 scmi_devpd: protocol@11 { 335 reg = <0x11>; 336 #power-domain-cells = <1>; 337 }; 338 339 scmi_dvfs: protocol@13 { 340 reg = <0x13>; 341 #clock-cells = <1>; 342 343 mboxes = <&mhuB 1 0>, 344 <&mhuB 1 1>; 345 mbox-names = "tx", "rx"; 346 shmem = <&cpu_scp_hpri0>, 347 <&cpu_scp_hpri1>; 348 }; 349 350 scmi_clk: protocol@14 { 351 reg = <0x14>; 352 #clock-cells = <1>; 353 }; 354 355 scmi_sensors: protocol@15 { 356 reg = <0x15>; 357 #thermal-sensor-cells = <1>; 358 }; 359 360 scmi_reset: protocol@16 { 361 reg = <0x16>; 362 #reset-cells = <1>; 363 }; 364 365 scmi_voltage: protocol@17 { 366 reg = <0x17>; 367 regulators { 368 #address-cells = <1>; 369 #size-cells = <0>; 370 371 regulator_devX: regulator@0 { 372 reg = <0x0>; 373 regulator-max-microvolt = <3300000>; 374 }; 375 376 regulator_devY: regulator@9 { 377 reg = <0x9>; 378 regulator-min-microvolt = <500000>; 379 regulator-max-microvolt = <4200000>; 380 }; 381 }; 382 }; 383 384 scmi_powercap: protocol@18 { 385 reg = <0x18>; 386 }; 387 }; 388 }; 389 390 soc { 391 #address-cells = <2>; 392 #size-cells = <2>; 393 394 sram@50000000 { 395 compatible = "mmio-sram"; 396 reg = <0x0 0x50000000 0x0 0x10000>; 397 398 #address-cells = <1>; 399 #size-cells = <1>; 400 ranges = <0 0x0 0x50000000 0x10000>; 401 402 cpu_scp_lpri0: scp-sram-section@0 { 403 compatible = "arm,scmi-shmem"; 404 reg = <0x0 0x80>; 405 }; 406 407 cpu_scp_lpri1: scp-sram-section@80 { 408 compatible = "arm,scmi-shmem"; 409 reg = <0x80 0x80>; 410 }; 411 412 cpu_scp_hpri0: scp-sram-section@100 { 413 compatible = "arm,scmi-shmem"; 414 reg = <0x100 0x80>; 415 }; 416 417 cpu_scp_hpri2: scp-sram-section@180 { 418 compatible = "arm,scmi-shmem"; 419 reg = <0x180 0x80>; 420 }; 421 }; 422 }; 423 424 - | 425 firmware { 426 scmi { 427 compatible = "arm,scmi-smc"; 428 shmem = <&cpu_scp_lpri0>, <&cpu_scp_lpri1>; 429 arm,smc-id = <0xc3000001>; 430 431 #address-cells = <1>; 432 #size-cells = <0>; 433 434 scmi_devpd1: protocol@11 { 435 reg = <0x11>; 436 #power-domain-cells = <1>; 437 }; 438 }; 439 }; 440 441 - | 442 firmware { 443 scmi { 444 compatible = "linaro,scmi-optee"; 445 linaro,optee-channel-id = <0>; 446 447 #address-cells = <1>; 448 #size-cells = <0>; 449 450 scmi_dvfs1: protocol@13 { 451 reg = <0x13>; 452 linaro,optee-channel-id = <1>; 453 shmem = <&cpu_optee_lpri0>; 454 #clock-cells = <1>; 455 }; 456 457 scmi_clk0: protocol@14 { 458 reg = <0x14>; 459 #clock-cells = <1>; 460 }; 461 }; 462 }; 463 464 soc { 465 #address-cells = <2>; 466 #size-cells = <2>; 467 468 sram@51000000 { 469 compatible = "mmio-sram"; 470 reg = <0x0 0x51000000 0x0 0x10000>; 471 472 #address-cells = <1>; 473 #size-cells = <1>; 474 ranges = <0 0x0 0x51000000 0x10000>; 475 476 cpu_optee_lpri0: optee-sram-section@0 { 477 compatible = "arm,scmi-shmem"; 478 reg = <0x0 0x80>; 479 }; 480 }; 481 }; 482 483... 484