# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
# Copyright 2021 ARM Ltd.
%YAML 1.2
---
$id: http://devicetree.org/schemas/firmware/arm,scpi.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: System Control and Power Interface (SCPI) Message Protocol

maintainers:
  - Sudeep Holla <sudeep.holla@arm.com>

description: |
  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.

  This binding is intended to define the interface the firmware implementing
  the SCPI provide for OSPM in the device tree.

  [0] http://infocenter.arm.com/help/topic/com.arm.doc.dui0922b/index.html

properties:
  $nodename:
    const: scpi

  compatible:
    description:
      SCPI compliant firmware complying to SCPI v1.0 and above OR
      SCPI compliant firmware complying to all unversioned releases
      prior to SCPI v1.0
    oneOf:
      - const: arm,scpi               # SCPI v1.0 and above
      - const: arm,scpi-pre-1.0       # Unversioned SCPI before v1.0
      - items:
          - enum:
              - amlogic,meson-gxbb-scpi
          - const: arm,scpi-pre-1.0

  mboxes:
    description:
      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.
    minItems: 1
    maxItems: 4

  shmem:
    description:
      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.
    minItems: 1
    maxItems: 4

  power-controller:
    type: object
    description:
      This sub-node represents SCPI power domain controller.

    properties:
      compatible:
        const: arm,scpi-power-domains

      '#power-domain-cells':
        const: 1

      num-domains:
        $ref: /schemas/types.yaml#/definitions/uint32
        description:
          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.

    required:
      - compatible
      - '#power-domain-cells'
      - num-domains

    additionalProperties: false

  sensors:
    type: object
    description: |
      This sub-node represents SCPI sensors controller.

    properties:
      compatible:
        oneOf:
          - const: arm,scpi-sensors
          - items:
              - enum:
                  - amlogic,meson-gxbb-scpi-sensors
              - const: arm,scpi-sensors

      '#thermal-sensor-cells':
        const: 1

    required:
      - compatible
      - '#thermal-sensor-cells'

    additionalProperties: false

  clocks:
    type: object
    description:
      This is the container node. Each sub-node represents one of the types
      of clock controller - indexed or full range.

    properties:
      compatible:
        const: arm,scpi-clocks

    patternProperties:
      "^clocks-[0-9a-f]+$":
        type: object
        description: |
          This sub-node represents one of the types of clock controller
          - indexed or full range.

          "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.

        properties:
          compatible:
            enum:
              - arm,scpi-dvfs-clocks
              - arm,scpi-variable-clocks

          '#clock-cells':
            const: 1

          clock-output-names: true

          clock-indices:
            $ref: /schemas/types.yaml#/definitions/uint32-array
            description:
              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.

        required:
          - compatible
          - '#clock-cells'
          - clock-output-names
          - clock-indices

        additionalProperties: false

    required:
      - compatible

    additionalProperties: false

additionalProperties: false

required:
  - compatible
  - mboxes
  - shmem

examples:
  - |
    firmware {
        scpi {
            compatible = "arm,scpi";
            mboxes = <&mhuA 1>;
            shmem = <&cpu_scp_hpri>; /* HP-NonSecure */

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

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

                scpi_dvfs: clocks-0 {
                    compatible = "arm,scpi-dvfs-clocks";
                    #clock-cells = <1>;
                    clock-indices = <0>, <1>, <2>;
                    clock-output-names = "atlclk", "aplclk","gpuclk";
                };

                scpi_clk: clocks-1 {
                    compatible = "arm,scpi-variable-clocks";
                    #clock-cells = <1>;
                    clock-indices = <3>, <4>;
                    clock-output-names = "pxlclk0", "pxlclk1";
                };
            };

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

        };
    };

    soc {
        #address-cells = <2>;
        #size-cells = <2>;

        sram@50000000 {
            compatible = "mmio-sram";
            reg = <0x0 0x50000000 0x0 0x10000>;

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

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

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

  - |
    firmware {
        scpi {
            compatible = "amlogic,meson-gxbb-scpi", "arm,scpi-pre-1.0";
            mboxes = <&mailbox 1>, <&mailbox 2>;
            shmem = <&cpu_scp_lpri>, <&cpu_scp_hpri>;

            scpi_sensors1: sensors {
                compatible = "amlogic,meson-gxbb-scpi-sensors", "arm,scpi-sensors";
                #thermal-sensor-cells = <1>;
            };
        };
    };
...
