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
81496be71SSudeep Hollatitle: System Control and Power Interface (SCPI) Message Protocol bindings
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
461496be71SSudeep Holla
471496be71SSudeep Holla  shmem:
481496be71SSudeep Holla    description:
491496be71SSudeep Holla      List of phandle pointing to the shared memory(SHM) area between the
501496be71SSudeep Holla      processors using these mailboxes for IPC, one for each mailbox SHM can
511496be71SSudeep Holla      be any memory reserved for the purpose of this communication between the
521496be71SSudeep Holla      processors.
531496be71SSudeep Holla    minItems: 1
541496be71SSudeep Holla
551496be71SSudeep Holla  power-controller:
561496be71SSudeep Holla    type: object
571496be71SSudeep Holla    description:
581496be71SSudeep Holla      This sub-node represents SCPI power domain controller.
591496be71SSudeep Holla
601496be71SSudeep Holla    properties:
611496be71SSudeep Holla      compatible:
621496be71SSudeep Holla        const: arm,scpi-power-domains
631496be71SSudeep Holla
641496be71SSudeep Holla      '#power-domain-cells':
651496be71SSudeep Holla        const: 1
661496be71SSudeep Holla
671496be71SSudeep Holla      num-domains:
681496be71SSudeep Holla        $ref: /schemas/types.yaml#/definitions/uint32
691496be71SSudeep Holla        description:
701496be71SSudeep Holla          Total number of power domains provided by SCPI. This is needed as
711496be71SSudeep Holla          the SCPI message protocol lacks a mechanism to query this
721496be71SSudeep Holla          information at runtime.
731496be71SSudeep Holla
741496be71SSudeep Holla    required:
751496be71SSudeep Holla      - compatible
761496be71SSudeep Holla      - '#power-domain-cells'
771496be71SSudeep Holla      - num-domains
781496be71SSudeep Holla
791496be71SSudeep Holla    additionalProperties: false
801496be71SSudeep Holla
811496be71SSudeep Holla  sensors:
821496be71SSudeep Holla    type: object
831496be71SSudeep Holla    description: |
841496be71SSudeep Holla      This sub-node represents SCPI sensors controller.
851496be71SSudeep Holla
861496be71SSudeep Holla    properties:
871496be71SSudeep Holla      compatible:
8801c70dfaSSudeep Holla        oneOf:
8901c70dfaSSudeep Holla          - const: arm,scpi-sensors
9001c70dfaSSudeep Holla          - items:
9101c70dfaSSudeep Holla              - enum:
9201c70dfaSSudeep Holla                  - amlogic,meson-gxbb-scpi-sensors
9301c70dfaSSudeep Holla              - const: arm,scpi-sensors
941496be71SSudeep Holla
951496be71SSudeep Holla      '#thermal-sensor-cells':
961496be71SSudeep Holla        const: 1
971496be71SSudeep Holla
981496be71SSudeep Holla    required:
991496be71SSudeep Holla      - compatible
1001496be71SSudeep Holla      - '#thermal-sensor-cells'
1011496be71SSudeep Holla
1021496be71SSudeep Holla    additionalProperties: false
1031496be71SSudeep Holla
1041496be71SSudeep Holla  clocks:
1051496be71SSudeep Holla    type: object
1061496be71SSudeep Holla    description:
1071496be71SSudeep Holla      This is the container node. Each sub-node represents one of the types
1081496be71SSudeep Holla      of clock controller - indexed or full range.
1091496be71SSudeep Holla
1101496be71SSudeep Holla    properties:
1111496be71SSudeep Holla      compatible:
1121496be71SSudeep Holla        const: arm,scpi-clocks
1131496be71SSudeep Holla
1141496be71SSudeep Holla    patternProperties:
1151496be71SSudeep Holla      "^clocks-[0-9a-f]+$":
1161496be71SSudeep Holla        type: object
1171496be71SSudeep Holla        description: |
1181496be71SSudeep Holla          This sub-node represents one of the types of clock controller
1191496be71SSudeep Holla          - indexed or full range.
1201496be71SSudeep Holla
1211496be71SSudeep Holla          "arm,scpi-dvfs-clocks" - all the clocks that are variable and index
1221496be71SSudeep Holla          based. These clocks don't provide an entire range of values between
1231496be71SSudeep Holla          the limits but only discrete points within the range. The firmware
1241496be71SSudeep Holla          provides the mapping for each such operating frequency and the index
1251496be71SSudeep Holla          associated with it. The firmware also manages the voltage scaling
1261496be71SSudeep Holla          appropriately with the clock scaling.
1271496be71SSudeep Holla
1281496be71SSudeep Holla          "arm,scpi-variable-clocks" - all the clocks that are variable and
1291496be71SSudeep Holla          provide full range within the specified range. The firmware provides
1301496be71SSudeep Holla          the range of values within a specified range.
1311496be71SSudeep Holla
1321496be71SSudeep Holla        properties:
1331496be71SSudeep Holla          compatible:
1341c3ac086SRob Herring            enum:
1351c3ac086SRob Herring              - arm,scpi-dvfs-clocks
1361c3ac086SRob Herring              - arm,scpi-variable-clocks
1371496be71SSudeep Holla
1381496be71SSudeep Holla          '#clock-cells':
1391496be71SSudeep Holla            const: 1
1401496be71SSudeep Holla
1411496be71SSudeep Holla          clock-output-names: true
1421496be71SSudeep Holla
1431496be71SSudeep Holla          clock-indices:
1441496be71SSudeep Holla            $ref: /schemas/types.yaml#/definitions/uint32-array
1451496be71SSudeep Holla            description:
1461496be71SSudeep Holla              The identifying number for the clocks(i.e.clock_id) in the node.
1471496be71SSudeep Holla              It can be non linear and hence provide the mapping of identifiers
1481496be71SSudeep Holla              into the clock-output-names array.
1491496be71SSudeep Holla
1501496be71SSudeep Holla        required:
1511496be71SSudeep Holla          - compatible
1521496be71SSudeep Holla          - '#clock-cells'
1531496be71SSudeep Holla          - clock-output-names
1541496be71SSudeep Holla          - clock-indices
1551496be71SSudeep Holla
1561496be71SSudeep Holla        additionalProperties: false
1571496be71SSudeep Holla
1581496be71SSudeep Holla    required:
1591496be71SSudeep Holla      - compatible
1601496be71SSudeep Holla
1611496be71SSudeep Holla    additionalProperties: false
1621496be71SSudeep Holla
1631496be71SSudeep HollaadditionalProperties: false
1641496be71SSudeep Holla
1651496be71SSudeep Hollarequired:
1661496be71SSudeep Holla  - compatible
1671496be71SSudeep Holla  - mboxes
1681496be71SSudeep Holla  - shmem
1691496be71SSudeep Holla
1701496be71SSudeep Hollaexamples:
1711496be71SSudeep Holla  - |
1721496be71SSudeep Holla    firmware {
1731496be71SSudeep Holla        scpi {
1741496be71SSudeep Holla            compatible = "arm,scpi";
1751496be71SSudeep Holla            mboxes = <&mhuA 1>;
1761496be71SSudeep Holla            shmem = <&cpu_scp_hpri>; /* HP-NonSecure */
1771496be71SSudeep Holla
1781496be71SSudeep Holla            scpi_devpd: power-controller {
1791496be71SSudeep Holla                compatible = "arm,scpi-power-domains";
1801496be71SSudeep Holla                num-domains = <2>;
1811496be71SSudeep Holla                #power-domain-cells = <1>;
1821496be71SSudeep Holla            };
1831496be71SSudeep Holla
1841496be71SSudeep Holla            clocks {
1851496be71SSudeep Holla                compatible = "arm,scpi-clocks";
1861496be71SSudeep Holla
1871496be71SSudeep Holla                scpi_dvfs: clocks-0 {
1881496be71SSudeep Holla                    compatible = "arm,scpi-dvfs-clocks";
1891496be71SSudeep Holla                    #clock-cells = <1>;
1901496be71SSudeep Holla                    clock-indices = <0>, <1>, <2>;
1911496be71SSudeep Holla                    clock-output-names = "atlclk", "aplclk","gpuclk";
1921496be71SSudeep Holla                };
1931496be71SSudeep Holla
1941496be71SSudeep Holla                scpi_clk: clocks-1 {
1951496be71SSudeep Holla                    compatible = "arm,scpi-variable-clocks";
1961496be71SSudeep Holla                    #clock-cells = <1>;
1971496be71SSudeep Holla                    clock-indices = <3>, <4>;
1981496be71SSudeep Holla                    clock-output-names = "pxlclk0", "pxlclk1";
1991496be71SSudeep Holla                };
2001496be71SSudeep Holla            };
2011496be71SSudeep Holla
2021496be71SSudeep Holla            scpi_sensors: sensors {
2031496be71SSudeep Holla                compatible = "arm,scpi-sensors";
2041496be71SSudeep Holla                #thermal-sensor-cells = <1>;
2051496be71SSudeep Holla            };
2061496be71SSudeep Holla
2071496be71SSudeep Holla        };
2081496be71SSudeep Holla    };
2091496be71SSudeep Holla
2101496be71SSudeep Holla    soc {
2111496be71SSudeep Holla        #address-cells = <2>;
2121496be71SSudeep Holla        #size-cells = <2>;
2131496be71SSudeep Holla
2141496be71SSudeep Holla        sram@50000000 {
2151496be71SSudeep Holla            compatible = "mmio-sram";
2161496be71SSudeep Holla            reg = <0x0 0x50000000 0x0 0x10000>;
2171496be71SSudeep Holla
2181496be71SSudeep Holla            #address-cells = <1>;
2191496be71SSudeep Holla            #size-cells = <1>;
2201496be71SSudeep Holla            ranges = <0 0x0 0x50000000 0x10000>;
2211496be71SSudeep Holla
2221496be71SSudeep Holla            cpu_scp_lpri: scp-sram-section@0 {
2231496be71SSudeep Holla                compatible = "arm,scp-shmem";
2241496be71SSudeep Holla                reg = <0x0 0x200>;
2251496be71SSudeep Holla            };
2261496be71SSudeep Holla
2271496be71SSudeep Holla            cpu_scp_hpri: scp-sram-section@200 {
2281496be71SSudeep Holla                compatible = "arm,scp-shmem";
2291496be71SSudeep Holla                reg = <0x200 0x200>;
2301496be71SSudeep Holla            };
2311496be71SSudeep Holla        };
2321496be71SSudeep Holla    };
2331496be71SSudeep Holla
23401c70dfaSSudeep Holla  - |
23501c70dfaSSudeep Holla    firmware {
23601c70dfaSSudeep Holla        scpi {
23701c70dfaSSudeep Holla            compatible = "amlogic,meson-gxbb-scpi", "arm,scpi-pre-1.0";
23801c70dfaSSudeep Holla            mboxes = <&mailbox 1 &mailbox 2>;
239*39bd2b6aSRob Herring            shmem = <&cpu_scp_lpri>, <&cpu_scp_hpri>;
24001c70dfaSSudeep Holla
24101c70dfaSSudeep Holla            scpi_sensors1: sensors {
24201c70dfaSSudeep Holla                compatible = "amlogic,meson-gxbb-scpi-sensors", "arm,scpi-sensors";
24301c70dfaSSudeep Holla                #thermal-sensor-cells = <1>;
24401c70dfaSSudeep Holla            };
24501c70dfaSSudeep Holla        };
24601c70dfaSSudeep Holla    };
2471496be71SSudeep Holla...
248