1*1496be71SSudeep Holla# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
2*1496be71SSudeep Holla# Copyright 2021 ARM Ltd.
3*1496be71SSudeep Holla%YAML 1.2
4*1496be71SSudeep Holla---
5*1496be71SSudeep Holla$id: http://devicetree.org/schemas/firmware/arm,scpi.yaml#
6*1496be71SSudeep Holla$schema: http://devicetree.org/meta-schemas/core.yaml#
7*1496be71SSudeep Holla
8*1496be71SSudeep Hollatitle: System Control and Power Interface (SCPI) Message Protocol bindings
9*1496be71SSudeep Holla
10*1496be71SSudeep Hollamaintainers:
11*1496be71SSudeep Holla  - Sudeep Holla <sudeep.holla@arm.com>
12*1496be71SSudeep Holla
13*1496be71SSudeep Holladescription: |
14*1496be71SSudeep Holla  Firmware implementing the SCPI described in ARM document number ARM DUI
15*1496be71SSudeep Holla  0922B ("ARM Compute Subsystem SCP: Message Interface Protocols")[0] can be
16*1496be71SSudeep Holla  used by Linux to initiate various system control and power operations.
17*1496be71SSudeep Holla
18*1496be71SSudeep Holla  This binding is intended to define the interface the firmware implementing
19*1496be71SSudeep Holla  the SCPI provide for OSPM in the device tree.
20*1496be71SSudeep Holla
21*1496be71SSudeep Holla  [0] http://infocenter.arm.com/help/topic/com.arm.doc.dui0922b/index.html
22*1496be71SSudeep Holla
23*1496be71SSudeep Hollaproperties:
24*1496be71SSudeep Holla  $nodename:
25*1496be71SSudeep Holla    const: scpi
26*1496be71SSudeep Holla
27*1496be71SSudeep Holla  compatible:
28*1496be71SSudeep Holla    description:
29*1496be71SSudeep Holla      SCPI compliant firmware complying to SCPI v1.0 and above OR
30*1496be71SSudeep Holla      SCPI compliant firmware complying to all unversioned releases
31*1496be71SSudeep Holla      prior to SCPI v1.0
32*1496be71SSudeep Holla    oneOf:
33*1496be71SSudeep Holla      - const: arm,scpi               # SCPI v1.0 and above
34*1496be71SSudeep Holla      - const: arm,scpi-pre-1.0       # Unversioned SCPI before v1.0
35*1496be71SSudeep Holla
36*1496be71SSudeep Holla  mboxes:
37*1496be71SSudeep Holla    description:
38*1496be71SSudeep Holla      List of phandle and mailbox channel specifiers. All the channels reserved
39*1496be71SSudeep Holla      by remote SCP firmware for use by SCPI message protocol should be
40*1496be71SSudeep Holla      specified in any order.
41*1496be71SSudeep Holla    minItems: 1
42*1496be71SSudeep Holla
43*1496be71SSudeep Holla  shmem:
44*1496be71SSudeep Holla    description:
45*1496be71SSudeep Holla      List of phandle pointing to the shared memory(SHM) area between the
46*1496be71SSudeep Holla      processors using these mailboxes for IPC, one for each mailbox SHM can
47*1496be71SSudeep Holla      be any memory reserved for the purpose of this communication between the
48*1496be71SSudeep Holla      processors.
49*1496be71SSudeep Holla    minItems: 1
50*1496be71SSudeep Holla
51*1496be71SSudeep Holla  power-controller:
52*1496be71SSudeep Holla    type: object
53*1496be71SSudeep Holla    description:
54*1496be71SSudeep Holla      This sub-node represents SCPI power domain controller.
55*1496be71SSudeep Holla
56*1496be71SSudeep Holla    properties:
57*1496be71SSudeep Holla      compatible:
58*1496be71SSudeep Holla        const: arm,scpi-power-domains
59*1496be71SSudeep Holla
60*1496be71SSudeep Holla      '#power-domain-cells':
61*1496be71SSudeep Holla        const: 1
62*1496be71SSudeep Holla
63*1496be71SSudeep Holla      num-domains:
64*1496be71SSudeep Holla        $ref: /schemas/types.yaml#/definitions/uint32
65*1496be71SSudeep Holla        description:
66*1496be71SSudeep Holla          Total number of power domains provided by SCPI. This is needed as
67*1496be71SSudeep Holla          the SCPI message protocol lacks a mechanism to query this
68*1496be71SSudeep Holla          information at runtime.
69*1496be71SSudeep Holla
70*1496be71SSudeep Holla    required:
71*1496be71SSudeep Holla      - compatible
72*1496be71SSudeep Holla      - '#power-domain-cells'
73*1496be71SSudeep Holla      - num-domains
74*1496be71SSudeep Holla
75*1496be71SSudeep Holla    additionalProperties: false
76*1496be71SSudeep Holla
77*1496be71SSudeep Holla  sensors:
78*1496be71SSudeep Holla    type: object
79*1496be71SSudeep Holla    description: |
80*1496be71SSudeep Holla      This sub-node represents SCPI sensors controller.
81*1496be71SSudeep Holla
82*1496be71SSudeep Holla    properties:
83*1496be71SSudeep Holla      compatible:
84*1496be71SSudeep Holla        const: arm,scpi-sensors
85*1496be71SSudeep Holla
86*1496be71SSudeep Holla      '#thermal-sensor-cells':
87*1496be71SSudeep Holla        const: 1
88*1496be71SSudeep Holla
89*1496be71SSudeep Holla    required:
90*1496be71SSudeep Holla      - compatible
91*1496be71SSudeep Holla      - '#thermal-sensor-cells'
92*1496be71SSudeep Holla
93*1496be71SSudeep Holla    additionalProperties: false
94*1496be71SSudeep Holla
95*1496be71SSudeep Holla  clocks:
96*1496be71SSudeep Holla    type: object
97*1496be71SSudeep Holla    description:
98*1496be71SSudeep Holla      This is the container node. Each sub-node represents one of the types
99*1496be71SSudeep Holla      of clock controller - indexed or full range.
100*1496be71SSudeep Holla
101*1496be71SSudeep Holla    properties:
102*1496be71SSudeep Holla      compatible:
103*1496be71SSudeep Holla        const: arm,scpi-clocks
104*1496be71SSudeep Holla
105*1496be71SSudeep Holla    patternProperties:
106*1496be71SSudeep Holla      "^clocks-[0-9a-f]+$":
107*1496be71SSudeep Holla        type: object
108*1496be71SSudeep Holla        description: |
109*1496be71SSudeep Holla          This sub-node represents one of the types of clock controller
110*1496be71SSudeep Holla          - indexed or full range.
111*1496be71SSudeep Holla
112*1496be71SSudeep Holla          "arm,scpi-dvfs-clocks" - all the clocks that are variable and index
113*1496be71SSudeep Holla          based. These clocks don't provide an entire range of values between
114*1496be71SSudeep Holla          the limits but only discrete points within the range. The firmware
115*1496be71SSudeep Holla          provides the mapping for each such operating frequency and the index
116*1496be71SSudeep Holla          associated with it. The firmware also manages the voltage scaling
117*1496be71SSudeep Holla          appropriately with the clock scaling.
118*1496be71SSudeep Holla
119*1496be71SSudeep Holla          "arm,scpi-variable-clocks" - all the clocks that are variable and
120*1496be71SSudeep Holla          provide full range within the specified range. The firmware provides
121*1496be71SSudeep Holla          the range of values within a specified range.
122*1496be71SSudeep Holla
123*1496be71SSudeep Holla        properties:
124*1496be71SSudeep Holla          compatible:
125*1496be71SSudeep Holla            oneOf:
126*1496be71SSudeep Holla              - const: arm,scpi-dvfs-clocks
127*1496be71SSudeep Holla              - const: arm,scpi-variable-clocks
128*1496be71SSudeep Holla
129*1496be71SSudeep Holla          '#clock-cells':
130*1496be71SSudeep Holla            const: 1
131*1496be71SSudeep Holla
132*1496be71SSudeep Holla          clock-output-names: true
133*1496be71SSudeep Holla
134*1496be71SSudeep Holla          clock-indices:
135*1496be71SSudeep Holla            $ref: /schemas/types.yaml#/definitions/uint32-array
136*1496be71SSudeep Holla            description:
137*1496be71SSudeep Holla              The identifying number for the clocks(i.e.clock_id) in the node.
138*1496be71SSudeep Holla              It can be non linear and hence provide the mapping of identifiers
139*1496be71SSudeep Holla              into the clock-output-names array.
140*1496be71SSudeep Holla
141*1496be71SSudeep Holla        required:
142*1496be71SSudeep Holla          - compatible
143*1496be71SSudeep Holla          - '#clock-cells'
144*1496be71SSudeep Holla          - clock-output-names
145*1496be71SSudeep Holla          - clock-indices
146*1496be71SSudeep Holla
147*1496be71SSudeep Holla        additionalProperties: false
148*1496be71SSudeep Holla
149*1496be71SSudeep Holla    required:
150*1496be71SSudeep Holla      - compatible
151*1496be71SSudeep Holla
152*1496be71SSudeep Holla    additionalProperties: false
153*1496be71SSudeep Holla
154*1496be71SSudeep HollaadditionalProperties: false
155*1496be71SSudeep Holla
156*1496be71SSudeep Hollarequired:
157*1496be71SSudeep Holla  - compatible
158*1496be71SSudeep Holla  - mboxes
159*1496be71SSudeep Holla  - shmem
160*1496be71SSudeep Holla
161*1496be71SSudeep Hollaexamples:
162*1496be71SSudeep Holla  - |
163*1496be71SSudeep Holla    firmware {
164*1496be71SSudeep Holla        scpi {
165*1496be71SSudeep Holla            compatible = "arm,scpi";
166*1496be71SSudeep Holla            mboxes = <&mhuA 1>;
167*1496be71SSudeep Holla            shmem = <&cpu_scp_hpri>; /* HP-NonSecure */
168*1496be71SSudeep Holla
169*1496be71SSudeep Holla            scpi_devpd: power-controller {
170*1496be71SSudeep Holla                compatible = "arm,scpi-power-domains";
171*1496be71SSudeep Holla                num-domains = <2>;
172*1496be71SSudeep Holla                #power-domain-cells = <1>;
173*1496be71SSudeep Holla            };
174*1496be71SSudeep Holla
175*1496be71SSudeep Holla            clocks {
176*1496be71SSudeep Holla                compatible = "arm,scpi-clocks";
177*1496be71SSudeep Holla
178*1496be71SSudeep Holla                scpi_dvfs: clocks-0 {
179*1496be71SSudeep Holla                    compatible = "arm,scpi-dvfs-clocks";
180*1496be71SSudeep Holla                    #clock-cells = <1>;
181*1496be71SSudeep Holla                    clock-indices = <0>, <1>, <2>;
182*1496be71SSudeep Holla                    clock-output-names = "atlclk", "aplclk","gpuclk";
183*1496be71SSudeep Holla                };
184*1496be71SSudeep Holla
185*1496be71SSudeep Holla                scpi_clk: clocks-1 {
186*1496be71SSudeep Holla                    compatible = "arm,scpi-variable-clocks";
187*1496be71SSudeep Holla                    #clock-cells = <1>;
188*1496be71SSudeep Holla                    clock-indices = <3>, <4>;
189*1496be71SSudeep Holla                    clock-output-names = "pxlclk0", "pxlclk1";
190*1496be71SSudeep Holla                };
191*1496be71SSudeep Holla            };
192*1496be71SSudeep Holla
193*1496be71SSudeep Holla            scpi_sensors: sensors {
194*1496be71SSudeep Holla                compatible = "arm,scpi-sensors";
195*1496be71SSudeep Holla                #thermal-sensor-cells = <1>;
196*1496be71SSudeep Holla            };
197*1496be71SSudeep Holla
198*1496be71SSudeep Holla        };
199*1496be71SSudeep Holla    };
200*1496be71SSudeep Holla
201*1496be71SSudeep Holla    soc {
202*1496be71SSudeep Holla        #address-cells = <2>;
203*1496be71SSudeep Holla        #size-cells = <2>;
204*1496be71SSudeep Holla
205*1496be71SSudeep Holla        sram@50000000 {
206*1496be71SSudeep Holla            compatible = "mmio-sram";
207*1496be71SSudeep Holla            reg = <0x0 0x50000000 0x0 0x10000>;
208*1496be71SSudeep Holla
209*1496be71SSudeep Holla            #address-cells = <1>;
210*1496be71SSudeep Holla            #size-cells = <1>;
211*1496be71SSudeep Holla            ranges = <0 0x0 0x50000000 0x10000>;
212*1496be71SSudeep Holla
213*1496be71SSudeep Holla            cpu_scp_lpri: scp-sram-section@0 {
214*1496be71SSudeep Holla                compatible = "arm,scp-shmem";
215*1496be71SSudeep Holla                reg = <0x0 0x200>;
216*1496be71SSudeep Holla            };
217*1496be71SSudeep Holla
218*1496be71SSudeep Holla            cpu_scp_hpri: scp-sram-section@200 {
219*1496be71SSudeep Holla                compatible = "arm,scp-shmem";
220*1496be71SSudeep Holla                reg = <0x200 0x200>;
221*1496be71SSudeep Holla            };
222*1496be71SSudeep Holla        };
223*1496be71SSudeep Holla    };
224*1496be71SSudeep Holla
225*1496be71SSudeep Holla...
226