123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223 |
- 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"
- - 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.
- Required properties:
- - compatible : should be "arm,juno-sram-ns" for Non-secure SRAM on Juno
- The rest of the properties should follow the generic mmio-sram description
- found in ../../sram/sram.txt
- 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,juno-scp-shmem" for Non-secure SRAM based
- shared memory on Juno platforms
- 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 documentation for your
- implementation for the IDs to use. For Juno
- R0 and Juno R1 refer to [3].
- 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] http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0922b/apas03s22.html
- [4] Documentation/devicetree/bindings/power/power_domain.txt
- 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.
|