System Control and Power Interface (SCPI) Message Protocol
----------------------------------------------------------

Firmware implementing the SCPI described in ARM document number ARM DUI 0922B
("ARM Compute Subsystem SCP: Message Interface Protocols")[0] can be used
by Linux to initiate various system control and power operations.

Required properties:

- compatible : should be
	* "arm,scpi" : For implementations complying to SCPI v1.0 or above
	* "arm,scpi-pre-1.0" : For implementations complying to all
		unversioned releases prior to SCPI v1.0
- mboxes: List of phandle and mailbox channel specifiers
	  All the channels reserved by remote SCP firmware for use by
	  SCPI message protocol should be specified in any order
- shmem : List of phandle pointing to the shared memory(SHM) area between the
	  processors using these mailboxes for IPC, one for each mailbox
	  SHM can be any memory reserved for the purpose of this communication
	  between the processors.

See Documentation/devicetree/bindings/mailbox/mailbox.txt
for more details about the generic mailbox controller and
client driver bindings.

Clock bindings for the clocks based on SCPI Message Protocol
------------------------------------------------------------

This binding uses the common clock binding[1].

Container Node
==============
Required properties:
- compatible : should be "arm,scpi-clocks"
	       All the clocks provided by SCP firmware via SCPI message
	       protocol much be listed as sub-nodes under this node.

Sub-nodes
=========
Required properties:
- compatible : shall include one of the following
	"arm,scpi-dvfs-clocks" - all the clocks that are variable and index based.
		These clocks don't provide an entire range of values between the
		limits but only discrete points within the range. The firmware
		provides the mapping for each such operating frequency and the
		index associated with it. The firmware also manages the
		voltage scaling appropriately with the clock scaling.
	"arm,scpi-variable-clocks" - all the clocks that are variable and provide full
		range within the specified range. The firmware provides the
		range of values within a specified range.

Other required properties for all clocks(all from common clock binding):
- #clock-cells : Should be 1. Contains the Clock ID value used by SCPI commands.
- clock-output-names : shall be the corresponding names of the outputs.
- clock-indices: The identifying number for the clocks(i.e.clock_id) in the
	node. It can be non linear and hence provide the mapping of identifiers
	into the clock-output-names array.

SRAM and Shared Memory for SCPI
-------------------------------

A small area of SRAM is reserved for SCPI communication between application
processors and SCP.

The properties should follow the generic mmio-sram description found in [3]

Each sub-node represents the reserved area for SCPI.

Required sub-node properties:
- reg : The base offset and size of the reserved area with the SRAM
- compatible : should be "arm,scp-shmem" for Non-secure SRAM based
	       shared memory

Sensor bindings for the sensors based on SCPI Message Protocol
--------------------------------------------------------------
SCPI provides an API to access the various sensors on the SoC.

Required properties:
- compatible : should be "arm,scpi-sensors".
- #thermal-sensor-cells: should be set to 1. This property follows the
			 thermal device tree bindings[2].

			 Valid cell values are raw identifiers (Sensor ID)
			 as used by the firmware. Refer to  platform details
			 for your implementation for the IDs to use.

Power domain bindings for the power domains based on SCPI Message Protocol
------------------------------------------------------------

This binding uses the generic power domain binding[4].

PM domain providers
===================

Required properties:
 - #power-domain-cells : Should be 1. Contains the device or the power
			 domain ID value used by SCPI commands.
 - num-domains: Total number of power domains provided by SCPI. This is
		needed as the SCPI message protocol lacks a mechanism to
		query this information at runtime.

PM domain consumers
===================

Required properties:
 - power-domains : A phandle and PM domain specifier as defined by bindings of
                   the power controller specified by phandle.

[0] http://infocenter.arm.com/help/topic/com.arm.doc.dui0922b/index.html
[1] Documentation/devicetree/bindings/clock/clock-bindings.txt
[2] Documentation/devicetree/bindings/thermal/thermal.txt
[3] Documentation/devicetree/bindings/sram/sram.yaml
[4] Documentation/devicetree/bindings/power/power-domain.yaml

Example:

sram: sram@50000000 {
	compatible = "arm,juno-sram-ns", "mmio-sram";
	reg = <0x0 0x50000000 0x0 0x10000>;

	#address-cells = <1>;
	#size-cells = <1>;
	ranges = <0 0x0 0x50000000 0x10000>;

	cpu_scp_lpri: scp-shmem@0 {
		compatible = "arm,juno-scp-shmem";
		reg = <0x0 0x200>;
	};

	cpu_scp_hpri: scp-shmem@200 {
		compatible = "arm,juno-scp-shmem";
		reg = <0x200 0x200>;
	};
};

mailbox: mailbox0@40000000 {
	....
	#mbox-cells = <1>;
};

scpi_protocol: scpi@2e000000 {
	compatible = "arm,scpi";
	mboxes = <&mailbox 0 &mailbox 1>;
	shmem = <&cpu_scp_lpri &cpu_scp_hpri>;

	clocks {
		compatible = "arm,scpi-clocks";

		scpi_dvfs: scpi_clocks@0 {
			compatible = "arm,scpi-dvfs-clocks";
			#clock-cells = <1>;
			clock-indices = <0>, <1>, <2>;
			clock-output-names = "atlclk", "aplclk","gpuclk";
		};
		scpi_clk: scpi_clocks@3 {
			compatible = "arm,scpi-variable-clocks";
			#clock-cells = <1>;
			clock-indices = <3>, <4>;
			clock-output-names = "pxlclk0", "pxlclk1";
		};
	};

	scpi_sensors0: sensors {
		compatible = "arm,scpi-sensors";
		#thermal-sensor-cells = <1>;
	};

	scpi_devpd: scpi-power-domains {
		compatible = "arm,scpi-power-domains";
		num-domains = <2>;
		#power-domain-cells = <1>;
	};
};

cpu@0 {
	...
	reg = <0 0>;
	clocks = <&scpi_dvfs 0>;
};

hdlcd@7ff60000 {
	...
	reg = <0 0x7ff60000 0 0x1000>;
	clocks = <&scpi_clk 4>;
	power-domains = <&scpi_devpd 1>;
};

thermal-zones {
	soc_thermal {
		polling-delay-passive = <100>;
		polling-delay = <1000>;

				/* sensor         ID */
		thermal-sensors = <&scpi_sensors0 3>;
		...
	};
};

In the above example, the #clock-cells is set to 1 as required.
scpi_dvfs has 3 output clocks namely: atlclk, aplclk, and gpuclk with 0,
1 and 2 as clock-indices. scpi_clk has 2 output clocks namely: pxlclk0
and pxlclk1 with 3 and 4 as clock-indices.

The first consumer in the example is cpu@0 and it has '0' as the clock
specifier which points to the first entry in the output clocks of
scpi_dvfs i.e. "atlclk".

Similarly the second example is hdlcd@7ff60000 and it has pxlclk1 as input
clock. '4' in the clock specifier here points to the second entry
in the output clocks of scpi_clocks  i.e. "pxlclk1"

The thermal-sensors property in the soc_thermal node uses the
temperature sensor provided by SCP firmware to setup a thermal
zone. The ID "3" is the sensor identifier for the temperature sensor
as used by the firmware.

The num-domains property in scpi-power-domains domain specifies that
SCPI provides 2 power domains. The hdlcd node uses the power domain with
domain ID 1.
