18c2ecf20Sopenharmony_ciSystem Control and Management Interface (SCMI) Message Protocol
28c2ecf20Sopenharmony_ci----------------------------------------------------------
38c2ecf20Sopenharmony_ci
48c2ecf20Sopenharmony_ciThe SCMI is intended to allow agents such as OSPM to manage various functions
58c2ecf20Sopenharmony_cithat are provided by the hardware platform it is running on, including power
68c2ecf20Sopenharmony_ciand performance functions.
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ciThis binding is intended to define the interface the firmware implementing
98c2ecf20Sopenharmony_cithe SCMI as described in ARM document number ARM DEN 0056A ("ARM System Control
108c2ecf20Sopenharmony_ciand Management Interface Platform Design Document")[0] provide for OSPM in
118c2ecf20Sopenharmony_cithe device tree.
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_ciRequired properties:
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_ciThe scmi node with the following properties shall be under the /firmware/ node.
168c2ecf20Sopenharmony_ci
178c2ecf20Sopenharmony_ci- compatible : shall be "arm,scmi" or "arm,scmi-smc" for smc/hvc transports
188c2ecf20Sopenharmony_ci- mboxes: List of phandle and mailbox channel specifiers. It should contain
198c2ecf20Sopenharmony_ci	  exactly one or two mailboxes, one for transmitting messages("tx")
208c2ecf20Sopenharmony_ci	  and another optional for receiving the notifications("rx") if
218c2ecf20Sopenharmony_ci	  supported.
228c2ecf20Sopenharmony_ci- shmem : List of phandle pointing to the shared memory(SHM) area as per
238c2ecf20Sopenharmony_ci	  generic mailbox client binding.
248c2ecf20Sopenharmony_ci- #address-cells : should be '1' if the device has sub-nodes, maps to
258c2ecf20Sopenharmony_ci	  protocol identifier for a given sub-node.
268c2ecf20Sopenharmony_ci- #size-cells : should be '0' as 'reg' property doesn't have any size
278c2ecf20Sopenharmony_ci	  associated with it.
288c2ecf20Sopenharmony_ci- arm,smc-id : SMC id required when using smc or hvc transports
298c2ecf20Sopenharmony_ci
308c2ecf20Sopenharmony_ciOptional properties:
318c2ecf20Sopenharmony_ci
328c2ecf20Sopenharmony_ci- mbox-names: shall be "tx" or "rx" depending on mboxes entries.
338c2ecf20Sopenharmony_ci
348c2ecf20Sopenharmony_ciSee Documentation/devicetree/bindings/mailbox/mailbox.txt for more details
358c2ecf20Sopenharmony_ciabout the generic mailbox controller and client driver bindings.
368c2ecf20Sopenharmony_ci
378c2ecf20Sopenharmony_ciThe mailbox is the only permitted method of calling the SCMI firmware.
388c2ecf20Sopenharmony_ciMailbox doorbell is used as a mechanism to alert the presence of a
398c2ecf20Sopenharmony_cimessages and/or notification.
408c2ecf20Sopenharmony_ci
418c2ecf20Sopenharmony_ciEach protocol supported shall have a sub-node with corresponding compatible
428c2ecf20Sopenharmony_cias described in the following sections. If the platform supports dedicated
438c2ecf20Sopenharmony_cicommunication channel for a particular protocol, the 3 properties namely:
448c2ecf20Sopenharmony_cimboxes, mbox-names and shmem shall be present in the sub-node corresponding
458c2ecf20Sopenharmony_cito that protocol.
468c2ecf20Sopenharmony_ci
478c2ecf20Sopenharmony_ciClock/Performance bindings for the clocks/OPPs based on SCMI Message Protocol
488c2ecf20Sopenharmony_ci------------------------------------------------------------
498c2ecf20Sopenharmony_ci
508c2ecf20Sopenharmony_ciThis binding uses the common clock binding[1].
518c2ecf20Sopenharmony_ci
528c2ecf20Sopenharmony_ciRequired properties:
538c2ecf20Sopenharmony_ci- #clock-cells : Should be 1. Contains the Clock ID value used by SCMI commands.
548c2ecf20Sopenharmony_ci
558c2ecf20Sopenharmony_ciPower domain bindings for the power domains based on SCMI Message Protocol
568c2ecf20Sopenharmony_ci------------------------------------------------------------
578c2ecf20Sopenharmony_ci
588c2ecf20Sopenharmony_ciThis binding for the SCMI power domain providers uses the generic power
598c2ecf20Sopenharmony_cidomain binding[2].
608c2ecf20Sopenharmony_ci
618c2ecf20Sopenharmony_ciRequired properties:
628c2ecf20Sopenharmony_ci - #power-domain-cells : Should be 1. Contains the device or the power
638c2ecf20Sopenharmony_ci			 domain ID value used by SCMI commands.
648c2ecf20Sopenharmony_ci
658c2ecf20Sopenharmony_ciSensor bindings for the sensors based on SCMI Message Protocol
668c2ecf20Sopenharmony_ci--------------------------------------------------------------
678c2ecf20Sopenharmony_ciSCMI provides an API to access the various sensors on the SoC.
688c2ecf20Sopenharmony_ci
698c2ecf20Sopenharmony_ciRequired properties:
708c2ecf20Sopenharmony_ci- #thermal-sensor-cells: should be set to 1. This property follows the
718c2ecf20Sopenharmony_ci			 thermal device tree bindings[3].
728c2ecf20Sopenharmony_ci
738c2ecf20Sopenharmony_ci			 Valid cell values are raw identifiers (Sensor ID)
748c2ecf20Sopenharmony_ci			 as used by the firmware. Refer to  platform details
758c2ecf20Sopenharmony_ci			 for your implementation for the IDs to use.
768c2ecf20Sopenharmony_ci
778c2ecf20Sopenharmony_ciReset signal bindings for the reset domains based on SCMI Message Protocol
788c2ecf20Sopenharmony_ci------------------------------------------------------------
798c2ecf20Sopenharmony_ci
808c2ecf20Sopenharmony_ciThis binding for the SCMI reset domain providers uses the generic reset
818c2ecf20Sopenharmony_cisignal binding[5].
828c2ecf20Sopenharmony_ci
838c2ecf20Sopenharmony_ciRequired properties:
848c2ecf20Sopenharmony_ci - #reset-cells : Should be 1. Contains the reset domain ID value used
858c2ecf20Sopenharmony_ci		  by SCMI commands.
868c2ecf20Sopenharmony_ci
878c2ecf20Sopenharmony_ciSRAM and Shared Memory for SCMI
888c2ecf20Sopenharmony_ci-------------------------------
898c2ecf20Sopenharmony_ci
908c2ecf20Sopenharmony_ciA small area of SRAM is reserved for SCMI communication between application
918c2ecf20Sopenharmony_ciprocessors and SCP.
928c2ecf20Sopenharmony_ci
938c2ecf20Sopenharmony_ciThe properties should follow the generic mmio-sram description found in [4]
948c2ecf20Sopenharmony_ci
958c2ecf20Sopenharmony_ciEach sub-node represents the reserved area for SCMI.
968c2ecf20Sopenharmony_ci
978c2ecf20Sopenharmony_ciRequired sub-node properties:
988c2ecf20Sopenharmony_ci- reg : The base offset and size of the reserved area with the SRAM
998c2ecf20Sopenharmony_ci- compatible : should be "arm,scmi-shmem" for Non-secure SRAM based
1008c2ecf20Sopenharmony_ci	       shared memory
1018c2ecf20Sopenharmony_ci
1028c2ecf20Sopenharmony_ci[0] http://infocenter.arm.com/help/topic/com.arm.doc.den0056a/index.html
1038c2ecf20Sopenharmony_ci[1] Documentation/devicetree/bindings/clock/clock-bindings.txt
1048c2ecf20Sopenharmony_ci[2] Documentation/devicetree/bindings/power/power-domain.yaml
1058c2ecf20Sopenharmony_ci[3] Documentation/devicetree/bindings/thermal/thermal*.yaml
1068c2ecf20Sopenharmony_ci[4] Documentation/devicetree/bindings/sram/sram.yaml
1078c2ecf20Sopenharmony_ci[5] Documentation/devicetree/bindings/reset/reset.txt
1088c2ecf20Sopenharmony_ci
1098c2ecf20Sopenharmony_ciExample:
1108c2ecf20Sopenharmony_ci
1118c2ecf20Sopenharmony_cisram@50000000 {
1128c2ecf20Sopenharmony_ci	compatible = "mmio-sram";
1138c2ecf20Sopenharmony_ci	reg = <0x0 0x50000000 0x0 0x10000>;
1148c2ecf20Sopenharmony_ci
1158c2ecf20Sopenharmony_ci	#address-cells = <1>;
1168c2ecf20Sopenharmony_ci	#size-cells = <1>;
1178c2ecf20Sopenharmony_ci	ranges = <0 0x0 0x50000000 0x10000>;
1188c2ecf20Sopenharmony_ci
1198c2ecf20Sopenharmony_ci	cpu_scp_lpri: scp-shmem@0 {
1208c2ecf20Sopenharmony_ci		compatible = "arm,scmi-shmem";
1218c2ecf20Sopenharmony_ci		reg = <0x0 0x200>;
1228c2ecf20Sopenharmony_ci	};
1238c2ecf20Sopenharmony_ci
1248c2ecf20Sopenharmony_ci	cpu_scp_hpri: scp-shmem@200 {
1258c2ecf20Sopenharmony_ci		compatible = "arm,scmi-shmem";
1268c2ecf20Sopenharmony_ci		reg = <0x200 0x200>;
1278c2ecf20Sopenharmony_ci	};
1288c2ecf20Sopenharmony_ci};
1298c2ecf20Sopenharmony_ci
1308c2ecf20Sopenharmony_cimailbox@40000000 {
1318c2ecf20Sopenharmony_ci	....
1328c2ecf20Sopenharmony_ci	#mbox-cells = <1>;
1338c2ecf20Sopenharmony_ci	reg = <0x0 0x40000000 0x0 0x10000>;
1348c2ecf20Sopenharmony_ci};
1358c2ecf20Sopenharmony_ci
1368c2ecf20Sopenharmony_cifirmware {
1378c2ecf20Sopenharmony_ci
1388c2ecf20Sopenharmony_ci	...
1398c2ecf20Sopenharmony_ci
1408c2ecf20Sopenharmony_ci	scmi {
1418c2ecf20Sopenharmony_ci		compatible = "arm,scmi";
1428c2ecf20Sopenharmony_ci		mboxes = <&mailbox 0 &mailbox 1>;
1438c2ecf20Sopenharmony_ci		mbox-names = "tx", "rx";
1448c2ecf20Sopenharmony_ci		shmem = <&cpu_scp_lpri &cpu_scp_hpri>;
1458c2ecf20Sopenharmony_ci		#address-cells = <1>;
1468c2ecf20Sopenharmony_ci		#size-cells = <0>;
1478c2ecf20Sopenharmony_ci
1488c2ecf20Sopenharmony_ci		scmi_devpd: protocol@11 {
1498c2ecf20Sopenharmony_ci			reg = <0x11>;
1508c2ecf20Sopenharmony_ci			#power-domain-cells = <1>;
1518c2ecf20Sopenharmony_ci		};
1528c2ecf20Sopenharmony_ci
1538c2ecf20Sopenharmony_ci		scmi_dvfs: protocol@13 {
1548c2ecf20Sopenharmony_ci			reg = <0x13>;
1558c2ecf20Sopenharmony_ci			#clock-cells = <1>;
1568c2ecf20Sopenharmony_ci		};
1578c2ecf20Sopenharmony_ci
1588c2ecf20Sopenharmony_ci		scmi_clk: protocol@14 {
1598c2ecf20Sopenharmony_ci			reg = <0x14>;
1608c2ecf20Sopenharmony_ci			#clock-cells = <1>;
1618c2ecf20Sopenharmony_ci		};
1628c2ecf20Sopenharmony_ci
1638c2ecf20Sopenharmony_ci		scmi_sensors0: protocol@15 {
1648c2ecf20Sopenharmony_ci			reg = <0x15>;
1658c2ecf20Sopenharmony_ci			#thermal-sensor-cells = <1>;
1668c2ecf20Sopenharmony_ci		};
1678c2ecf20Sopenharmony_ci
1688c2ecf20Sopenharmony_ci		scmi_reset: protocol@16 {
1698c2ecf20Sopenharmony_ci			reg = <0x16>;
1708c2ecf20Sopenharmony_ci			#reset-cells = <1>;
1718c2ecf20Sopenharmony_ci		};
1728c2ecf20Sopenharmony_ci	};
1738c2ecf20Sopenharmony_ci};
1748c2ecf20Sopenharmony_ci
1758c2ecf20Sopenharmony_cicpu@0 {
1768c2ecf20Sopenharmony_ci	...
1778c2ecf20Sopenharmony_ci	reg = <0 0>;
1788c2ecf20Sopenharmony_ci	clocks = <&scmi_dvfs 0>;
1798c2ecf20Sopenharmony_ci};
1808c2ecf20Sopenharmony_ci
1818c2ecf20Sopenharmony_cihdlcd@7ff60000 {
1828c2ecf20Sopenharmony_ci	...
1838c2ecf20Sopenharmony_ci	reg = <0 0x7ff60000 0 0x1000>;
1848c2ecf20Sopenharmony_ci	clocks = <&scmi_clk 4>;
1858c2ecf20Sopenharmony_ci	power-domains = <&scmi_devpd 1>;
1868c2ecf20Sopenharmony_ci	resets = <&scmi_reset 10>;
1878c2ecf20Sopenharmony_ci};
1888c2ecf20Sopenharmony_ci
1898c2ecf20Sopenharmony_cithermal-zones {
1908c2ecf20Sopenharmony_ci	soc_thermal {
1918c2ecf20Sopenharmony_ci		polling-delay-passive = <100>;
1928c2ecf20Sopenharmony_ci		polling-delay = <1000>;
1938c2ecf20Sopenharmony_ci					/* sensor ID */
1948c2ecf20Sopenharmony_ci		thermal-sensors = <&scmi_sensors0 3>;
1958c2ecf20Sopenharmony_ci		...
1968c2ecf20Sopenharmony_ci	};
1978c2ecf20Sopenharmony_ci};
198