11496be71SSudeep Holla# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
21496be71SSudeep Holla# Copyright 2021 ARM Ltd.
31496be71SSudeep Holla%YAML 1.2
41496be71SSudeep Holla---
51496be71SSudeep Holla$id: http://devicetree.org/schemas/firmware/arm,scpi.yaml#
61496be71SSudeep Holla$schema: http://devicetree.org/meta-schemas/core.yaml#
71496be71SSudeep Holla
8*84e85359SKrzysztof Kozlowskititle: System Control and Power Interface (SCPI) Message Protocol
91496be71SSudeep Holla
101496be71SSudeep Hollamaintainers:
111496be71SSudeep Holla  - Sudeep Holla <sudeep.holla@arm.com>
121496be71SSudeep Holla
131496be71SSudeep Holladescription: |
141496be71SSudeep Holla  Firmware implementing the SCPI described in ARM document number ARM DUI
151496be71SSudeep Holla  0922B ("ARM Compute Subsystem SCP: Message Interface Protocols")[0] can be
161496be71SSudeep Holla  used by Linux to initiate various system control and power operations.
171496be71SSudeep Holla
181496be71SSudeep Holla  This binding is intended to define the interface the firmware implementing
191496be71SSudeep Holla  the SCPI provide for OSPM in the device tree.
201496be71SSudeep Holla
211496be71SSudeep Holla  [0] http://infocenter.arm.com/help/topic/com.arm.doc.dui0922b/index.html
221496be71SSudeep Holla
231496be71SSudeep Hollaproperties:
241496be71SSudeep Holla  $nodename:
251496be71SSudeep Holla    const: scpi
261496be71SSudeep Holla
271496be71SSudeep Holla  compatible:
281496be71SSudeep Holla    description:
291496be71SSudeep Holla      SCPI compliant firmware complying to SCPI v1.0 and above OR
301496be71SSudeep Holla      SCPI compliant firmware complying to all unversioned releases
311496be71SSudeep Holla      prior to SCPI v1.0
321496be71SSudeep Holla    oneOf:
331496be71SSudeep Holla      - const: arm,scpi               # SCPI v1.0 and above
341496be71SSudeep Holla      - const: arm,scpi-pre-1.0       # Unversioned SCPI before v1.0
3501c70dfaSSudeep Holla      - items:
3601c70dfaSSudeep Holla          - enum:
3701c70dfaSSudeep Holla              - amlogic,meson-gxbb-scpi
3801c70dfaSSudeep Holla          - const: arm,scpi-pre-1.0
391496be71SSudeep Holla
401496be71SSudeep Holla  mboxes:
411496be71SSudeep Holla    description:
421496be71SSudeep Holla      List of phandle and mailbox channel specifiers. All the channels reserved
431496be71SSudeep Holla      by remote SCP firmware for use by SCPI message protocol should be
441496be71SSudeep Holla      specified in any order.
451496be71SSudeep Holla    minItems: 1
4617bf6b7cSGeert Uytterhoeven    maxItems: 4
471496be71SSudeep Holla
481496be71SSudeep Holla  shmem:
491496be71SSudeep Holla    description:
501496be71SSudeep Holla      List of phandle pointing to the shared memory(SHM) area between the
511496be71SSudeep Holla      processors using these mailboxes for IPC, one for each mailbox SHM can
521496be71SSudeep Holla      be any memory reserved for the purpose of this communication between the
531496be71SSudeep Holla      processors.
541496be71SSudeep Holla    minItems: 1
5517bf6b7cSGeert Uytterhoeven    maxItems: 4
561496be71SSudeep Holla
571496be71SSudeep Holla  power-controller:
581496be71SSudeep Holla    type: object
591496be71SSudeep Holla    description:
601496be71SSudeep Holla      This sub-node represents SCPI power domain controller.
611496be71SSudeep Holla
621496be71SSudeep Holla    properties:
631496be71SSudeep Holla      compatible:
641496be71SSudeep Holla        const: arm,scpi-power-domains
651496be71SSudeep Holla
661496be71SSudeep Holla      '#power-domain-cells':
671496be71SSudeep Holla        const: 1
681496be71SSudeep Holla
691496be71SSudeep Holla      num-domains:
701496be71SSudeep Holla        $ref: /schemas/types.yaml#/definitions/uint32
711496be71SSudeep Holla        description:
721496be71SSudeep Holla          Total number of power domains provided by SCPI. This is needed as
731496be71SSudeep Holla          the SCPI message protocol lacks a mechanism to query this
741496be71SSudeep Holla          information at runtime.
751496be71SSudeep Holla
761496be71SSudeep Holla    required:
771496be71SSudeep Holla      - compatible
781496be71SSudeep Holla      - '#power-domain-cells'
791496be71SSudeep Holla      - num-domains
801496be71SSudeep Holla
811496be71SSudeep Holla    additionalProperties: false
821496be71SSudeep Holla
831496be71SSudeep Holla  sensors:
841496be71SSudeep Holla    type: object
851496be71SSudeep Holla    description: |
861496be71SSudeep Holla      This sub-node represents SCPI sensors controller.
871496be71SSudeep Holla
881496be71SSudeep Holla    properties:
891496be71SSudeep Holla      compatible:
9001c70dfaSSudeep Holla        oneOf:
9101c70dfaSSudeep Holla          - const: arm,scpi-sensors
9201c70dfaSSudeep Holla          - items:
9301c70dfaSSudeep Holla              - enum:
9401c70dfaSSudeep Holla                  - amlogic,meson-gxbb-scpi-sensors
9501c70dfaSSudeep Holla              - const: arm,scpi-sensors
961496be71SSudeep Holla
971496be71SSudeep Holla      '#thermal-sensor-cells':
981496be71SSudeep Holla        const: 1
991496be71SSudeep Holla
1001496be71SSudeep Holla    required:
1011496be71SSudeep Holla      - compatible
1021496be71SSudeep Holla      - '#thermal-sensor-cells'
1031496be71SSudeep Holla
1041496be71SSudeep Holla    additionalProperties: false
1051496be71SSudeep Holla
1061496be71SSudeep Holla  clocks:
1071496be71SSudeep Holla    type: object
1081496be71SSudeep Holla    description:
1091496be71SSudeep Holla      This is the container node. Each sub-node represents one of the types
1101496be71SSudeep Holla      of clock controller - indexed or full range.
1111496be71SSudeep Holla
1121496be71SSudeep Holla    properties:
1131496be71SSudeep Holla      compatible:
1141496be71SSudeep Holla        const: arm,scpi-clocks
1151496be71SSudeep Holla
1161496be71SSudeep Holla    patternProperties:
1171496be71SSudeep Holla      "^clocks-[0-9a-f]+$":
1181496be71SSudeep Holla        type: object
1191496be71SSudeep Holla        description: |
1201496be71SSudeep Holla          This sub-node represents one of the types of clock controller
1211496be71SSudeep Holla          - indexed or full range.
1221496be71SSudeep Holla
1231496be71SSudeep Holla          "arm,scpi-dvfs-clocks" - all the clocks that are variable and index
1241496be71SSudeep Holla          based. These clocks don't provide an entire range of values between
1251496be71SSudeep Holla          the limits but only discrete points within the range. The firmware
1261496be71SSudeep Holla          provides the mapping for each such operating frequency and the index
1271496be71SSudeep Holla          associated with it. The firmware also manages the voltage scaling
1281496be71SSudeep Holla          appropriately with the clock scaling.
1291496be71SSudeep Holla
1301496be71SSudeep Holla          "arm,scpi-variable-clocks" - all the clocks that are variable and
1311496be71SSudeep Holla          provide full range within the specified range. The firmware provides
1321496be71SSudeep Holla          the range of values within a specified range.
1331496be71SSudeep Holla
1341496be71SSudeep Holla        properties:
1351496be71SSudeep Holla          compatible:
1361c3ac086SRob Herring            enum:
1371c3ac086SRob Herring              - arm,scpi-dvfs-clocks
1381c3ac086SRob Herring              - arm,scpi-variable-clocks
1391496be71SSudeep Holla
1401496be71SSudeep Holla          '#clock-cells':
1411496be71SSudeep Holla            const: 1
1421496be71SSudeep Holla
1431496be71SSudeep Holla          clock-output-names: true
1441496be71SSudeep Holla
1451496be71SSudeep Holla          clock-indices:
1461496be71SSudeep Holla            $ref: /schemas/types.yaml#/definitions/uint32-array
1471496be71SSudeep Holla            description:
1481496be71SSudeep Holla              The identifying number for the clocks(i.e.clock_id) in the node.
1491496be71SSudeep Holla              It can be non linear and hence provide the mapping of identifiers
1501496be71SSudeep Holla              into the clock-output-names array.
1511496be71SSudeep Holla
1521496be71SSudeep Holla        required:
1531496be71SSudeep Holla          - compatible
1541496be71SSudeep Holla          - '#clock-cells'
1551496be71SSudeep Holla          - clock-output-names
1561496be71SSudeep Holla          - clock-indices
1571496be71SSudeep Holla
1581496be71SSudeep Holla        additionalProperties: false
1591496be71SSudeep Holla
1601496be71SSudeep Holla    required:
1611496be71SSudeep Holla      - compatible
1621496be71SSudeep Holla
1631496be71SSudeep Holla    additionalProperties: false
1641496be71SSudeep Holla
1651496be71SSudeep HollaadditionalProperties: false
1661496be71SSudeep Holla
1671496be71SSudeep Hollarequired:
1681496be71SSudeep Holla  - compatible
1691496be71SSudeep Holla  - mboxes
1701496be71SSudeep Holla  - shmem
1711496be71SSudeep Holla
1721496be71SSudeep Hollaexamples:
1731496be71SSudeep Holla  - |
1741496be71SSudeep Holla    firmware {
1751496be71SSudeep Holla        scpi {
1761496be71SSudeep Holla            compatible = "arm,scpi";
1771496be71SSudeep Holla            mboxes = <&mhuA 1>;
1781496be71SSudeep Holla            shmem = <&cpu_scp_hpri>; /* HP-NonSecure */
1791496be71SSudeep Holla
1801496be71SSudeep Holla            scpi_devpd: power-controller {
1811496be71SSudeep Holla                compatible = "arm,scpi-power-domains";
1821496be71SSudeep Holla                num-domains = <2>;
1831496be71SSudeep Holla                #power-domain-cells = <1>;
1841496be71SSudeep Holla            };
1851496be71SSudeep Holla
1861496be71SSudeep Holla            clocks {
1871496be71SSudeep Holla                compatible = "arm,scpi-clocks";
1881496be71SSudeep Holla
1891496be71SSudeep Holla                scpi_dvfs: clocks-0 {
1901496be71SSudeep Holla                    compatible = "arm,scpi-dvfs-clocks";
1911496be71SSudeep Holla                    #clock-cells = <1>;
1921496be71SSudeep Holla                    clock-indices = <0>, <1>, <2>;
1931496be71SSudeep Holla                    clock-output-names = "atlclk", "aplclk","gpuclk";
1941496be71SSudeep Holla                };
1951496be71SSudeep Holla
1961496be71SSudeep Holla                scpi_clk: clocks-1 {
1971496be71SSudeep Holla                    compatible = "arm,scpi-variable-clocks";
1981496be71SSudeep Holla                    #clock-cells = <1>;
1991496be71SSudeep Holla                    clock-indices = <3>, <4>;
2001496be71SSudeep Holla                    clock-output-names = "pxlclk0", "pxlclk1";
2011496be71SSudeep Holla                };
2021496be71SSudeep Holla            };
2031496be71SSudeep Holla
2041496be71SSudeep Holla            scpi_sensors: sensors {
2051496be71SSudeep Holla                compatible = "arm,scpi-sensors";
2061496be71SSudeep Holla                #thermal-sensor-cells = <1>;
2071496be71SSudeep Holla            };
2081496be71SSudeep Holla
2091496be71SSudeep Holla        };
2101496be71SSudeep Holla    };
2111496be71SSudeep Holla
2121496be71SSudeep Holla    soc {
2131496be71SSudeep Holla        #address-cells = <2>;
2141496be71SSudeep Holla        #size-cells = <2>;
2151496be71SSudeep Holla
2161496be71SSudeep Holla        sram@50000000 {
2171496be71SSudeep Holla            compatible = "mmio-sram";
2181496be71SSudeep Holla            reg = <0x0 0x50000000 0x0 0x10000>;
2191496be71SSudeep Holla
2201496be71SSudeep Holla            #address-cells = <1>;
2211496be71SSudeep Holla            #size-cells = <1>;
2221496be71SSudeep Holla            ranges = <0 0x0 0x50000000 0x10000>;
2231496be71SSudeep Holla
2241496be71SSudeep Holla            cpu_scp_lpri: scp-sram-section@0 {
2251496be71SSudeep Holla                compatible = "arm,scp-shmem";
2261496be71SSudeep Holla                reg = <0x0 0x200>;
2271496be71SSudeep Holla            };
2281496be71SSudeep Holla
2291496be71SSudeep Holla            cpu_scp_hpri: scp-sram-section@200 {
2301496be71SSudeep Holla                compatible = "arm,scp-shmem";
2311496be71SSudeep Holla                reg = <0x200 0x200>;
2321496be71SSudeep Holla            };
2331496be71SSudeep Holla        };
2341496be71SSudeep Holla    };
2351496be71SSudeep Holla
23601c70dfaSSudeep Holla  - |
23701c70dfaSSudeep Holla    firmware {
23801c70dfaSSudeep Holla        scpi {
23901c70dfaSSudeep Holla            compatible = "amlogic,meson-gxbb-scpi", "arm,scpi-pre-1.0";
24017bf6b7cSGeert Uytterhoeven            mboxes = <&mailbox 1>, <&mailbox 2>;
24139bd2b6aSRob Herring            shmem = <&cpu_scp_lpri>, <&cpu_scp_hpri>;
24201c70dfaSSudeep Holla
24301c70dfaSSudeep Holla            scpi_sensors1: sensors {
24401c70dfaSSudeep Holla                compatible = "amlogic,meson-gxbb-scpi-sensors", "arm,scpi-sensors";
24501c70dfaSSudeep Holla                #thermal-sensor-cells = <1>;
24601c70dfaSSudeep Holla            };
24701c70dfaSSudeep Holla        };
24801c70dfaSSudeep Holla    };
2491496be71SSudeep Holla...
250