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 bindings 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 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 192additionalProperties: false 193 194patternProperties: 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 229required: 230 - compatible 231 232if: 233 properties: 234 compatible: 235 contains: 236 const: arm,scmi 237then: 238 properties: 239 interrupts: false 240 interrupt-names: false 241 242 required: 243 - mboxes 244 - shmem 245 246else: 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 267examples: 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... 433