blob: b1bb87c865ed343dc0a169f6540f0b0e1c2e7357 [file] [log] [blame]
Tom Rini53633a82024-02-29 12:33:36 -05001# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/opp/opp-v2-base.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Generic OPP (Operating Performance Points) Common Properties
8
9maintainers:
10 - Viresh Kumar <viresh.kumar@linaro.org>
11
12description: |
13 Devices work at voltage-current-frequency combinations and some implementations
14 have the liberty of choosing these. These combinations are called Operating
15 Performance Points aka OPPs. This document defines bindings for these OPPs
16 applicable across wide range of devices. For illustration purpose, this document
17 uses CPU as a device.
18
19 This describes the OPPs belonging to a device.
20
21select: false
22
23properties:
24 $nodename:
25 pattern: '^opp-table(-[a-z0-9]+)?$'
26
27 opp-shared:
28 description:
29 Indicates that device nodes using this OPP Table Node's phandle switch
30 their DVFS state together, i.e. they share clock/voltage/current lines.
31 Missing property means devices have independent clock/voltage/current
32 lines, but they share OPP tables.
33 type: boolean
34
35patternProperties:
36 '^opp(-?[0-9]+)*$':
37 type: object
38 description:
39 One or more OPP nodes describing voltage-current-frequency combinations.
40 Their name isn't significant but their phandle can be used to reference an
41 OPP. These are mandatory except for the case where the OPP table is
42 present only to indicate dependency between devices using the opp-shared
43 property.
44
45 properties:
46 opp-hz:
47 description:
48 Frequency in Hz, expressed as a 64-bit big-endian integer. This is a
49 required property for all device nodes, unless another "required"
50 property to uniquely identify the OPP nodes exists. Devices like power
51 domains must have another (implementation dependent) property.
52
53 Entries for multiple clocks shall be provided in the same field, as
54 array of frequencies. The OPP binding doesn't provide any provisions
55 to relate the values to their clocks or the order in which the clocks
56 need to be configured and that is left for the implementation
57 specific binding.
58 minItems: 1
59 maxItems: 32
Tom Rini53633a82024-02-29 12:33:36 -050060
61 opp-microvolt:
62 description: |
63 Voltage for the OPP
64
65 A single regulator's voltage is specified with an array of size one or three.
66 Single entry is for target voltage and three entries are for <target min max>
67 voltages.
68
69 Entries for multiple regulators shall be provided in the same field separated
70 by angular brackets <>. The OPP binding doesn't provide any provisions to
71 relate the values to their power supplies or the order in which the supplies
72 need to be configured and that is left for the implementation specific
73 binding.
74
75 Entries for all regulators shall be of the same size, i.e. either all use a
76 single value or triplets.
77 minItems: 1
78 maxItems: 8 # Should be enough regulators
79 items:
80 minItems: 1
81 maxItems: 3
82
83 opp-microamp:
84 description: |
85 The maximum current drawn by the device in microamperes considering
86 system specific parameters (such as transients, process, aging,
87 maximum operating temperature range etc.) as necessary. This may be
88 used to set the most efficient regulator operating mode.
89
90 Should only be set if opp-microvolt or opp-microvolt-<name> is set for
91 the OPP.
92
93 Entries for multiple regulators shall be provided in the same field
94 separated by angular brackets <>. If current values aren't required
95 for a regulator, then it shall be filled with 0. If current values
96 aren't required for any of the regulators, then this field is not
97 required. The OPP binding doesn't provide any provisions to relate the
98 values to their power supplies or the order in which the supplies need
99 to be configured and that is left for the implementation specific
100 binding.
101 minItems: 1
102 maxItems: 8 # Should be enough regulators
103
104 opp-microwatt:
105 description: |
106 The power for the OPP in micro-Watts.
107
108 Entries for multiple regulators shall be provided in the same field
109 separated by angular brackets <>. If power values aren't required
110 for a regulator, then it shall be filled with 0. If power values
111 aren't required for any of the regulators, then this field is not
112 required. The OPP binding doesn't provide any provisions to relate the
113 values to their power supplies or the order in which the supplies need
114 to be configured and that is left for the implementation specific
115 binding.
116 minItems: 1
117 maxItems: 8 # Should be enough regulators
118
119 opp-level:
120 description:
121 A value representing the performance level of the device.
122 $ref: /schemas/types.yaml#/definitions/uint32
123
124 opp-peak-kBps:
125 description:
126 Peak bandwidth in kilobytes per second, expressed as an array of
127 32-bit big-endian integers. Each element of the array represents the
128 peak bandwidth value of each interconnect path. The number of elements
129 should match the number of interconnect paths.
130 minItems: 1
131 maxItems: 32 # Should be enough
132
133 opp-avg-kBps:
134 description:
135 Average bandwidth in kilobytes per second, expressed as an array
136 of 32-bit big-endian integers. Each element of the array represents the
137 average bandwidth value of each interconnect path. The number of elements
138 should match the number of interconnect paths. This property is only
139 meaningful in OPP tables where opp-peak-kBps is present.
140 minItems: 1
141 maxItems: 32 # Should be enough
142
143 clock-latency-ns:
144 description:
145 Specifies the maximum possible transition latency (in nanoseconds) for
146 switching to this OPP from any other OPP.
147
148 turbo-mode:
149 description:
150 Marks the OPP to be used only for turbo modes. Turbo mode is available
151 on some platforms, where the device can run over its operating
152 frequency for a short duration of time limited by the device's power,
153 current and thermal limits.
154 type: boolean
155
156 opp-suspend:
157 description:
158 Marks the OPP to be used during device suspend. If multiple OPPs in
159 the table have this, the OPP with highest opp-hz will be used.
160 type: boolean
161
162 opp-supported-hw:
163 description: |
164 This property allows a platform to enable only a subset of the OPPs
165 from the larger set present in the OPP table, based on the current
166 version of the hardware (already known to the operating system).
167
168 Each block present in the array of blocks in this property, represents
169 a sub-group of hardware versions supported by the OPP. i.e. <sub-group
170 A>, <sub-group B>, etc. The OPP will be enabled if _any_ of these
171 sub-groups match the hardware's version.
172
173 Each sub-group is a platform defined array representing the hierarchy
174 of hardware versions supported by the platform. For a platform with
175 three hierarchical levels of version (X.Y.Z), this field shall look
176 like
177
178 opp-supported-hw = <X1 Y1 Z1>, <X2 Y2 Z2>, <X3 Y3 Z3>.
179
180 Each level (eg. X1) in version hierarchy is represented by a 32 bit
181 value, one bit per version and so there can be maximum 32 versions per
182 level. Logical AND (&) operation is performed for each level with the
183 hardware's level version and a non-zero output for _all_ the levels in
184 a sub-group means the OPP is supported by hardware. A value of
185 0xFFFFFFFF for each level in the sub-group will enable the OPP for all
186 versions for the hardware.
187 $ref: /schemas/types.yaml#/definitions/uint32-matrix
188 maxItems: 32
189 items:
190 minItems: 1
191 maxItems: 4
192
193 required-opps:
194 description:
195 This contains phandle to an OPP node in another device's OPP table. It
196 may contain an array of phandles, where each phandle points to an OPP
197 of a different device. It should not contain multiple phandles to the
198 OPP nodes in the same OPP table. This specifies the minimum required
199 OPP of the device(s), whose OPP's phandle is present in this property,
200 for the functioning of the current device at the current OPP (where
201 this property is present).
202 $ref: /schemas/types.yaml#/definitions/phandle-array
203 items:
204 maxItems: 1
205
206 patternProperties:
207 '^opp-microvolt-':
208 description:
209 Named opp-microvolt property. This is exactly similar to the above
210 opp-microvolt property, but allows multiple voltage ranges to be
211 provided for the same OPP. At runtime, the platform can pick a <name>
212 and matching opp-microvolt-<name> property will be enabled for all
213 OPPs. If the platform doesn't pick a specific <name> or the <name>
214 doesn't match with any opp-microvolt-<name> properties, then
215 opp-microvolt property shall be used, if present.
216 $ref: /schemas/types.yaml#/definitions/uint32-matrix
217 minItems: 1
218 maxItems: 8 # Should be enough regulators
219 items:
220 minItems: 1
221 maxItems: 3
222
223 '^opp-microamp-':
224 description:
225 Named opp-microamp property. Similar to opp-microvolt-<name> property,
226 but for microamp instead.
227 $ref: /schemas/types.yaml#/definitions/uint32-array
228 minItems: 1
229 maxItems: 8 # Should be enough regulators
230
231 '^opp-microwatt-':
232 description:
233 Named opp-microwatt property. Similar to opp-microamp-<name> property,
234 but for microwatt instead.
235 $ref: /schemas/types.yaml#/definitions/uint32-array
236 minItems: 1
237 maxItems: 8 # Should be enough regulators
238
239 dependencies:
240 opp-avg-kBps: [ opp-peak-kBps ]
241
242required:
243 - compatible
244
245additionalProperties: true
246
247...