xref: /freebsd/sys/contrib/device-tree/Bindings/arm/psci.yaml (revision 84943d6f38e936ac3b7a3947ca26eeb27a39f938)
1c66ec88fSEmmanuel Vadot# SPDX-License-Identifier: GPL-2.0
2c66ec88fSEmmanuel Vadot%YAML 1.2
3c66ec88fSEmmanuel Vadot---
4c66ec88fSEmmanuel Vadot$id: http://devicetree.org/schemas/arm/psci.yaml#
5c66ec88fSEmmanuel Vadot$schema: http://devicetree.org/meta-schemas/core.yaml#
6c66ec88fSEmmanuel Vadot
7c66ec88fSEmmanuel Vadottitle: Power State Coordination Interface (PSCI)
8c66ec88fSEmmanuel Vadot
9c66ec88fSEmmanuel Vadotmaintainers:
10c66ec88fSEmmanuel Vadot  - Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
11c66ec88fSEmmanuel Vadot
12c66ec88fSEmmanuel Vadotdescription: |+
13c66ec88fSEmmanuel Vadot  Firmware implementing the PSCI functions described in ARM document number
14c66ec88fSEmmanuel Vadot  ARM DEN 0022A ("Power State Coordination Interface System Software on ARM
15c66ec88fSEmmanuel Vadot  processors") can be used by Linux to initiate various CPU-centric power
16c66ec88fSEmmanuel Vadot  operations.
17c66ec88fSEmmanuel Vadot
18c66ec88fSEmmanuel Vadot  Issue A of the specification describes functions for CPU suspend, hotplug
19c66ec88fSEmmanuel Vadot  and migration of secure software.
20c66ec88fSEmmanuel Vadot
21c66ec88fSEmmanuel Vadot  Functions are invoked by trapping to the privilege level of the PSCI
22c66ec88fSEmmanuel Vadot  firmware (specified as part of the binding below) and passing arguments
23c66ec88fSEmmanuel Vadot  in a manner similar to that specified by AAPCS:
24c66ec88fSEmmanuel Vadot
25c66ec88fSEmmanuel Vadot     r0       => 32-bit Function ID / return value
26c66ec88fSEmmanuel Vadot    {r1 - r3}	=> Parameters
27c66ec88fSEmmanuel Vadot
28c66ec88fSEmmanuel Vadot  Note that the immediate field of the trapping instruction must be set
29c66ec88fSEmmanuel Vadot  to #0.
30c66ec88fSEmmanuel Vadot
31c66ec88fSEmmanuel Vadot  [2] Power State Coordination Interface (PSCI) specification
32c66ec88fSEmmanuel Vadot    http://infocenter.arm.com/help/topic/com.arm.doc.den0022c/DEN0022C_Power_State_Coordination_Interface.pdf
33c66ec88fSEmmanuel Vadot
34c66ec88fSEmmanuel Vadotproperties:
35c66ec88fSEmmanuel Vadot  $nodename:
36c66ec88fSEmmanuel Vadot    const: psci
37c66ec88fSEmmanuel Vadot
38c66ec88fSEmmanuel Vadot  compatible:
39c66ec88fSEmmanuel Vadot    oneOf:
40c66ec88fSEmmanuel Vadot      - description:
41c66ec88fSEmmanuel Vadot          For implementations complying to PSCI versions prior to 0.2.
42c66ec88fSEmmanuel Vadot        const: arm,psci
43c66ec88fSEmmanuel Vadot
44c66ec88fSEmmanuel Vadot      - description:
45c66ec88fSEmmanuel Vadot          For implementations complying to PSCI 0.2.
46c66ec88fSEmmanuel Vadot          Function IDs are not required and should be ignored by an OS with
47c66ec88fSEmmanuel Vadot          PSCI 0.2 support, but are permitted to be present for compatibility
48c66ec88fSEmmanuel Vadot          with existing software when "arm,psci" is later in the compatible
49c66ec88fSEmmanuel Vadot          list.
507ef62cebSEmmanuel Vadot        minItems: 1
51c66ec88fSEmmanuel Vadot        items:
52c66ec88fSEmmanuel Vadot          - const: arm,psci-0.2
53c66ec88fSEmmanuel Vadot          - const: arm,psci
54c66ec88fSEmmanuel Vadot
55c66ec88fSEmmanuel Vadot      - description:
56c66ec88fSEmmanuel Vadot          For implementations complying to PSCI 1.0.
57c66ec88fSEmmanuel Vadot          PSCI 1.0 is backward compatible with PSCI 0.2 with minor
58c66ec88fSEmmanuel Vadot          specification updates, as defined in the PSCI specification[2].
597ef62cebSEmmanuel Vadot        minItems: 1
60c66ec88fSEmmanuel Vadot        items:
61c66ec88fSEmmanuel Vadot          - const: arm,psci-1.0
62c66ec88fSEmmanuel Vadot          - const: arm,psci-0.2
637ef62cebSEmmanuel Vadot          - const: arm,psci
64c66ec88fSEmmanuel Vadot
65c66ec88fSEmmanuel Vadot  method:
66c66ec88fSEmmanuel Vadot    description: The method of calling the PSCI firmware.
67c66ec88fSEmmanuel Vadot    $ref: /schemas/types.yaml#/definitions/string-array
68c66ec88fSEmmanuel Vadot    enum:
69c66ec88fSEmmanuel Vadot      - smc
70c66ec88fSEmmanuel Vadot      # HVC #0, with the register assignments specified in this binding.
71c66ec88fSEmmanuel Vadot      - hvc
72c66ec88fSEmmanuel Vadot
73c66ec88fSEmmanuel Vadot  cpu_suspend:
74c66ec88fSEmmanuel Vadot    $ref: /schemas/types.yaml#/definitions/uint32
75c66ec88fSEmmanuel Vadot    description: Function ID for CPU_SUSPEND operation
76c66ec88fSEmmanuel Vadot
77c66ec88fSEmmanuel Vadot  cpu_off:
78c66ec88fSEmmanuel Vadot    $ref: /schemas/types.yaml#/definitions/uint32
79c66ec88fSEmmanuel Vadot    description: Function ID for CPU_OFF operation
80c66ec88fSEmmanuel Vadot
81c66ec88fSEmmanuel Vadot  cpu_on:
82c66ec88fSEmmanuel Vadot    $ref: /schemas/types.yaml#/definitions/uint32
83c66ec88fSEmmanuel Vadot    description: Function ID for CPU_ON operation
84c66ec88fSEmmanuel Vadot
85c66ec88fSEmmanuel Vadot  migrate:
86c66ec88fSEmmanuel Vadot    $ref: /schemas/types.yaml#/definitions/uint32
87c66ec88fSEmmanuel Vadot    description: Function ID for MIGRATE operation
88c66ec88fSEmmanuel Vadot
89c66ec88fSEmmanuel Vadot  arm,psci-suspend-param:
90c66ec88fSEmmanuel Vadot    $ref: /schemas/types.yaml#/definitions/uint32
91c66ec88fSEmmanuel Vadot    description: |
92c66ec88fSEmmanuel Vadot      power_state parameter to pass to the PSCI suspend call.
93c66ec88fSEmmanuel Vadot
94c66ec88fSEmmanuel Vadot      Device tree nodes that require usage of PSCI CPU_SUSPEND function (ie
95c66ec88fSEmmanuel Vadot      idle state nodes with entry-method property is set to "psci", as per
96c66ec88fSEmmanuel Vadot      bindings in [1]) must specify this property.
97c66ec88fSEmmanuel Vadot
98c66ec88fSEmmanuel Vadot      [1] Kernel documentation - ARM idle states bindings
99c9ccf3a3SEmmanuel Vadot        Documentation/devicetree/bindings/cpu/idle-states.yaml
100c66ec88fSEmmanuel Vadot
101c66ec88fSEmmanuel VadotpatternProperties:
102c66ec88fSEmmanuel Vadot  "^power-domain-":
103f126890aSEmmanuel Vadot    $ref: /schemas/power/power-domain.yaml#
104*84943d6fSEmmanuel Vadot    unevaluatedProperties: false
105c66ec88fSEmmanuel Vadot
106c66ec88fSEmmanuel Vadot    type: object
107c66ec88fSEmmanuel Vadot    description: |
108c66ec88fSEmmanuel Vadot      ARM systems can have multiple cores, sometimes in an hierarchical
109c66ec88fSEmmanuel Vadot      arrangement. This often, but not always, maps directly to the processor
110c66ec88fSEmmanuel Vadot      power topology of the system. Individual nodes in a topology have their
111c66ec88fSEmmanuel Vadot      own specific power states and can be better represented hierarchically.
112c66ec88fSEmmanuel Vadot
113c66ec88fSEmmanuel Vadot      For these cases, the definitions of the idle states for the CPUs and the
114c66ec88fSEmmanuel Vadot      CPU topology, must conform to the binding in [3]. The idle states
115c66ec88fSEmmanuel Vadot      themselves must conform to the binding in [4] and must specify the
116c66ec88fSEmmanuel Vadot      arm,psci-suspend-param property.
117c66ec88fSEmmanuel Vadot
118c66ec88fSEmmanuel Vadot      It should also be noted that, in PSCI firmware v1.0 the OS-Initiated
119c66ec88fSEmmanuel Vadot      (OSI) CPU suspend mode is introduced. Using a hierarchical representation
120c66ec88fSEmmanuel Vadot      helps to implement support for OSI mode and OS implementations may choose
121c66ec88fSEmmanuel Vadot      to mandate it.
122c66ec88fSEmmanuel Vadot
123c66ec88fSEmmanuel Vadot      [3] Documentation/devicetree/bindings/power/power-domain.yaml
124c66ec88fSEmmanuel Vadot      [4] Documentation/devicetree/bindings/power/domain-idle-state.yaml
125c66ec88fSEmmanuel Vadot
126c66ec88fSEmmanuel Vadotrequired:
127c66ec88fSEmmanuel Vadot  - compatible
128c66ec88fSEmmanuel Vadot  - method
129c66ec88fSEmmanuel Vadot
130c66ec88fSEmmanuel VadotallOf:
131c66ec88fSEmmanuel Vadot  - if:
132c66ec88fSEmmanuel Vadot      properties:
133c66ec88fSEmmanuel Vadot        compatible:
134c66ec88fSEmmanuel Vadot          contains:
135c66ec88fSEmmanuel Vadot            const: arm,psci
136c66ec88fSEmmanuel Vadot    then:
137c66ec88fSEmmanuel Vadot      required:
138c66ec88fSEmmanuel Vadot        - cpu_off
139c66ec88fSEmmanuel Vadot        - cpu_on
140c66ec88fSEmmanuel Vadot
141c66ec88fSEmmanuel VadotadditionalProperties: false
142c66ec88fSEmmanuel Vadot
143c66ec88fSEmmanuel Vadotexamples:
144c66ec88fSEmmanuel Vadot  - |+
145c66ec88fSEmmanuel Vadot
146c66ec88fSEmmanuel Vadot    // Case 1: PSCI v0.1 only.
147c66ec88fSEmmanuel Vadot
148c66ec88fSEmmanuel Vadot    psci {
149c66ec88fSEmmanuel Vadot      compatible      = "arm,psci";
150c66ec88fSEmmanuel Vadot      method          = "smc";
151c66ec88fSEmmanuel Vadot      cpu_suspend     = <0x95c10000>;
152c66ec88fSEmmanuel Vadot      cpu_off         = <0x95c10001>;
153c66ec88fSEmmanuel Vadot      cpu_on          = <0x95c10002>;
154c66ec88fSEmmanuel Vadot      migrate         = <0x95c10003>;
155c66ec88fSEmmanuel Vadot    };
156c66ec88fSEmmanuel Vadot
157c66ec88fSEmmanuel Vadot  - |+
158c66ec88fSEmmanuel Vadot
159c66ec88fSEmmanuel Vadot    // Case 2: PSCI v0.2 only
160c66ec88fSEmmanuel Vadot
161c66ec88fSEmmanuel Vadot    psci {
162c66ec88fSEmmanuel Vadot      compatible      = "arm,psci-0.2";
163c66ec88fSEmmanuel Vadot      method          = "smc";
164c66ec88fSEmmanuel Vadot    };
165c66ec88fSEmmanuel Vadot
166c66ec88fSEmmanuel Vadot
167c66ec88fSEmmanuel Vadot  - |+
168c66ec88fSEmmanuel Vadot
169c66ec88fSEmmanuel Vadot    // Case 3: PSCI v0.2 and PSCI v0.1.
170c66ec88fSEmmanuel Vadot
171c66ec88fSEmmanuel Vadot    /*
172c66ec88fSEmmanuel Vadot     * A DTB may provide IDs for use by kernels without PSCI 0.2 support,
173c66ec88fSEmmanuel Vadot     * enabling firmware and hypervisors to support existing and new kernels.
174c66ec88fSEmmanuel Vadot     * These IDs will be ignored by kernels with PSCI 0.2 support, which will
175c66ec88fSEmmanuel Vadot     * use the standard PSCI 0.2 IDs exclusively.
176c66ec88fSEmmanuel Vadot     */
177c66ec88fSEmmanuel Vadot
178c66ec88fSEmmanuel Vadot    psci {
179c66ec88fSEmmanuel Vadot      compatible = "arm,psci-0.2", "arm,psci";
180c66ec88fSEmmanuel Vadot      method = "hvc";
181c66ec88fSEmmanuel Vadot
182c66ec88fSEmmanuel Vadot      cpu_on = <0x95c10002>;
183c66ec88fSEmmanuel Vadot      cpu_off = <0x95c10001>;
184c66ec88fSEmmanuel Vadot    };
185c66ec88fSEmmanuel Vadot
186c66ec88fSEmmanuel Vadot  - |+
187c66ec88fSEmmanuel Vadot
188c66ec88fSEmmanuel Vadot    // Case 4: CPUs and CPU idle states described using the hierarchical model.
189c66ec88fSEmmanuel Vadot
190c66ec88fSEmmanuel Vadot    cpus {
191c66ec88fSEmmanuel Vadot      #size-cells = <0>;
192c66ec88fSEmmanuel Vadot      #address-cells = <1>;
193c66ec88fSEmmanuel Vadot
194c66ec88fSEmmanuel Vadot      CPU0: cpu@0 {
195c66ec88fSEmmanuel Vadot        device_type = "cpu";
196c66ec88fSEmmanuel Vadot        compatible = "arm,cortex-a53";
197c66ec88fSEmmanuel Vadot        reg = <0x0>;
198c66ec88fSEmmanuel Vadot        enable-method = "psci";
199c66ec88fSEmmanuel Vadot        power-domains = <&CPU_PD0>;
200c66ec88fSEmmanuel Vadot        power-domain-names = "psci";
201c66ec88fSEmmanuel Vadot      };
202c66ec88fSEmmanuel Vadot
203c66ec88fSEmmanuel Vadot      CPU1: cpu@1 {
204c66ec88fSEmmanuel Vadot        device_type = "cpu";
205c66ec88fSEmmanuel Vadot        compatible = "arm,cortex-a53";
206c66ec88fSEmmanuel Vadot        reg = <0x100>;
207c66ec88fSEmmanuel Vadot        enable-method = "psci";
208c66ec88fSEmmanuel Vadot        power-domains = <&CPU_PD1>;
209c66ec88fSEmmanuel Vadot        power-domain-names = "psci";
210c66ec88fSEmmanuel Vadot      };
211c66ec88fSEmmanuel Vadot
212c66ec88fSEmmanuel Vadot      idle-states {
213c66ec88fSEmmanuel Vadot
214c66ec88fSEmmanuel Vadot        CPU_PWRDN: cpu-power-down {
215c66ec88fSEmmanuel Vadot          compatible = "arm,idle-state";
216c66ec88fSEmmanuel Vadot          arm,psci-suspend-param = <0x0000001>;
217c66ec88fSEmmanuel Vadot          entry-latency-us = <10>;
218c66ec88fSEmmanuel Vadot          exit-latency-us = <10>;
219c66ec88fSEmmanuel Vadot          min-residency-us = <100>;
220c66ec88fSEmmanuel Vadot        };
221c66ec88fSEmmanuel Vadot      };
222c66ec88fSEmmanuel Vadot
223c66ec88fSEmmanuel Vadot      domain-idle-states {
224c66ec88fSEmmanuel Vadot
225c66ec88fSEmmanuel Vadot        CLUSTER_RET: cluster-retention {
226c66ec88fSEmmanuel Vadot          compatible = "domain-idle-state";
227c66ec88fSEmmanuel Vadot          arm,psci-suspend-param = <0x1000011>;
228c66ec88fSEmmanuel Vadot          entry-latency-us = <500>;
229c66ec88fSEmmanuel Vadot          exit-latency-us = <500>;
230c66ec88fSEmmanuel Vadot          min-residency-us = <2000>;
231c66ec88fSEmmanuel Vadot        };
232c66ec88fSEmmanuel Vadot
233c66ec88fSEmmanuel Vadot        CLUSTER_PWRDN: cluster-power-down {
234c66ec88fSEmmanuel Vadot          compatible = "domain-idle-state";
235c66ec88fSEmmanuel Vadot          arm,psci-suspend-param = <0x1000031>;
236c66ec88fSEmmanuel Vadot          entry-latency-us = <2000>;
237c66ec88fSEmmanuel Vadot          exit-latency-us = <2000>;
238c66ec88fSEmmanuel Vadot          min-residency-us = <6000>;
239c66ec88fSEmmanuel Vadot        };
240c66ec88fSEmmanuel Vadot      };
241c66ec88fSEmmanuel Vadot    };
242c66ec88fSEmmanuel Vadot
243c66ec88fSEmmanuel Vadot    psci {
244c66ec88fSEmmanuel Vadot      compatible = "arm,psci-1.0";
245c66ec88fSEmmanuel Vadot      method = "smc";
246c66ec88fSEmmanuel Vadot
247c66ec88fSEmmanuel Vadot      CPU_PD0: power-domain-cpu0 {
248c66ec88fSEmmanuel Vadot        #power-domain-cells = <0>;
249c66ec88fSEmmanuel Vadot        domain-idle-states = <&CPU_PWRDN>;
250c66ec88fSEmmanuel Vadot        power-domains = <&CLUSTER_PD>;
251c66ec88fSEmmanuel Vadot      };
252c66ec88fSEmmanuel Vadot
253c66ec88fSEmmanuel Vadot      CPU_PD1: power-domain-cpu1 {
254c66ec88fSEmmanuel Vadot        #power-domain-cells = <0>;
255c66ec88fSEmmanuel Vadot        domain-idle-states =  <&CPU_PWRDN>;
256c66ec88fSEmmanuel Vadot        power-domains = <&CLUSTER_PD>;
257c66ec88fSEmmanuel Vadot      };
258c66ec88fSEmmanuel Vadot
259c66ec88fSEmmanuel Vadot      CLUSTER_PD: power-domain-cluster {
260c66ec88fSEmmanuel Vadot        #power-domain-cells = <0>;
261c66ec88fSEmmanuel Vadot        domain-idle-states = <&CLUSTER_RET>, <&CLUSTER_PWRDN>;
262c66ec88fSEmmanuel Vadot      };
263c66ec88fSEmmanuel Vadot    };
264c66ec88fSEmmanuel Vadot...
265