1 # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
4 $id: http://devicetree.org/schemas/opp/opp-v2-base.yaml#
5 $schema: http://devicetree.org/meta-schemas/core.yaml#
7 title: Generic OPP (Operating Performance Points) Common Properties
10 - Viresh Kumar <viresh.kumar@linaro.org>
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
19 This describes the OPPs belonging to a device.
25 pattern: '^opp-table(-[a-z0-9]+)?$'
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.
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
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.
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
67 A single regulator's voltage is specified with an array of size one or three.
68 Single entry is for target voltage and three entries are for <target min max>
71 Entries for multiple regulators shall be provided in the same field separated
72 by angular brackets <>. The OPP binding doesn't provide any provisions to
73 relate the values to their power supplies or the order in which the supplies
74 need to be configured and that is left for the implementation specific
77 Entries for all regulators shall be of the same size, i.e. either all use a
78 single value or triplets.
80 maxItems: 8 # Should be enough regulators
87 The maximum current drawn by the device in microamperes considering
88 system specific parameters (such as transients, process, aging,
89 maximum operating temperature range etc.) as necessary. This may be
90 used to set the most efficient regulator operating mode.
92 Should only be set if opp-microvolt or opp-microvolt-<name> is set for
95 Entries for multiple regulators shall be provided in the same field
96 separated by angular brackets <>. If current values aren't required
97 for a regulator, then it shall be filled with 0. If current values
98 aren't required for any of the regulators, then this field is not
99 required. The OPP binding doesn't provide any provisions to relate the
100 values to their power supplies or the order in which the supplies need
101 to be configured and that is left for the implementation specific
104 maxItems: 8 # Should be enough regulators
108 The power for the OPP in micro-Watts.
110 Entries for multiple regulators shall be provided in the same field
111 separated by angular brackets <>. If power values aren't required
112 for a regulator, then it shall be filled with 0. If power values
113 aren't required for any of the regulators, then this field is not
114 required. The OPP binding doesn't provide any provisions to relate the
115 values to their power supplies or the order in which the supplies need
116 to be configured and that is left for the implementation specific
119 maxItems: 8 # Should be enough regulators
123 A value representing the performance level of the device.
124 $ref: /schemas/types.yaml#/definitions/uint32
128 Peak bandwidth in kilobytes per second, expressed as an array of
129 32-bit big-endian integers. Each element of the array represents the
130 peak bandwidth value of each interconnect path. The number of elements
131 should match the number of interconnect paths.
133 maxItems: 32 # Should be enough
137 Average bandwidth in kilobytes per second, expressed as an array
138 of 32-bit big-endian integers. Each element of the array represents the
139 average bandwidth value of each interconnect path. The number of elements
140 should match the number of interconnect paths. This property is only
141 meaningful in OPP tables where opp-peak-kBps is present.
143 maxItems: 32 # Should be enough
147 Specifies the maximum possible transition latency (in nanoseconds) for
148 switching to this OPP from any other OPP.
152 Marks the OPP to be used only for turbo modes. Turbo mode is available
153 on some platforms, where the device can run over its operating
154 frequency for a short duration of time limited by the device's power,
155 current and thermal limits.
160 Marks the OPP to be used during device suspend. If multiple OPPs in
161 the table have this, the OPP with highest opp-hz will be used.
166 This property allows a platform to enable only a subset of the OPPs
167 from the larger set present in the OPP table, based on the current
168 version of the hardware (already known to the operating system).
170 Each block present in the array of blocks in this property, represents
171 a sub-group of hardware versions supported by the OPP. i.e. <sub-group
172 A>, <sub-group B>, etc. The OPP will be enabled if _any_ of these
173 sub-groups match the hardware's version.
175 Each sub-group is a platform defined array representing the hierarchy
176 of hardware versions supported by the platform. For a platform with
177 three hierarchical levels of version (X.Y.Z), this field shall look
180 opp-supported-hw = <X1 Y1 Z1>, <X2 Y2 Z2>, <X3 Y3 Z3>.
182 Each level (eg. X1) in version hierarchy is represented by a 32 bit
183 value, one bit per version and so there can be maximum 32 versions per
184 level. Logical AND (&) operation is performed for each level with the
185 hardware's level version and a non-zero output for _all_ the levels in
186 a sub-group means the OPP is supported by hardware. A value of
187 0xFFFFFFFF for each level in the sub-group will enable the OPP for all
188 versions for the hardware.
189 $ref: /schemas/types.yaml#/definitions/uint32-matrix
197 This contains phandle to an OPP node in another device's OPP table. It
198 may contain an array of phandles, where each phandle points to an OPP
199 of a different device. It should not contain multiple phandles to the
200 OPP nodes in the same OPP table. This specifies the minimum required
201 OPP of the device(s), whose OPP's phandle is present in this property,
202 for the functioning of the current device at the current OPP (where
203 this property is present).
204 $ref: /schemas/types.yaml#/definitions/phandle-array
211 Named opp-microvolt property. This is exactly similar to the above
212 opp-microvolt property, but allows multiple voltage ranges to be
213 provided for the same OPP. At runtime, the platform can pick a <name>
214 and matching opp-microvolt-<name> property will be enabled for all
215 OPPs. If the platform doesn't pick a specific <name> or the <name>
216 doesn't match with any opp-microvolt-<name> properties, then
217 opp-microvolt property shall be used, if present.
218 $ref: /schemas/types.yaml#/definitions/uint32-matrix
220 maxItems: 8 # Should be enough regulators
227 Named opp-microamp property. Similar to opp-microvolt-<name> property,
228 but for microamp instead.
229 $ref: /schemas/types.yaml#/definitions/uint32-array
231 maxItems: 8 # Should be enough regulators
235 Named opp-microwatt property. Similar to opp-microamp-<name> property,
236 but for microwatt instead.
237 $ref: /schemas/types.yaml#/definitions/uint32-array
239 maxItems: 8 # Should be enough regulators
242 opp-avg-kBps: [ opp-peak-kBps ]
247 additionalProperties: true