1# 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 Binding 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 opp-microvolt: 54 description: | 55 Voltage for the OPP 56 57 A single regulator's voltage is specified with an array of size one or three. 58 Single entry is for target voltage and three entries are for <target min max> 59 voltages. 60 61 Entries for multiple regulators shall be provided in the same field separated 62 by angular brackets <>. The OPP binding doesn't provide any provisions to 63 relate the values to their power supplies or the order in which the supplies 64 need to be configured and that is left for the implementation specific 65 binding. 66 67 Entries for all regulators shall be of the same size, i.e. either all use a 68 single value or triplets. 69 minItems: 1 70 maxItems: 8 # Should be enough regulators 71 items: 72 minItems: 1 73 maxItems: 3 74 75 opp-microamp: 76 description: | 77 The maximum current drawn by the device in microamperes considering 78 system specific parameters (such as transients, process, aging, 79 maximum operating temperature range etc.) as necessary. This may be 80 used to set the most efficient regulator operating mode. 81 82 Should only be set if opp-microvolt or opp-microvolt-<name> is set for 83 the OPP. 84 85 Entries for multiple regulators shall be provided in the same field 86 separated by angular brackets <>. If current values aren't required 87 for a regulator, then it shall be filled with 0. If current values 88 aren't required for any of the regulators, then this field is not 89 required. The OPP binding doesn't provide any provisions to relate the 90 values to their power supplies or the order in which the supplies need 91 to be configured and that is left for the implementation specific 92 binding. 93 minItems: 1 94 maxItems: 8 # Should be enough regulators 95 96 opp-level: 97 description: 98 A value representing the performance level of the device. 99 $ref: /schemas/types.yaml#/definitions/uint32 100 101 opp-peak-kBps: 102 description: 103 Peak bandwidth in kilobytes per second, expressed as an array of 104 32-bit big-endian integers. Each element of the array represents the 105 peak bandwidth value of each interconnect path. The number of elements 106 should match the number of interconnect paths. 107 minItems: 1 108 maxItems: 32 # Should be enough 109 110 opp-avg-kBps: 111 description: 112 Average bandwidth in kilobytes per second, expressed as an array 113 of 32-bit big-endian integers. Each element of the array represents the 114 average bandwidth value of each interconnect path. The number of elements 115 should match the number of interconnect paths. This property is only 116 meaningful in OPP tables where opp-peak-kBps is present. 117 minItems: 1 118 maxItems: 32 # Should be enough 119 120 clock-latency-ns: 121 description: 122 Specifies the maximum possible transition latency (in nanoseconds) for 123 switching to this OPP from any other OPP. 124 125 turbo-mode: 126 description: 127 Marks the OPP to be used only for turbo modes. Turbo mode is available 128 on some platforms, where the device can run over its operating 129 frequency for a short duration of time limited by the device's power, 130 current and thermal limits. 131 type: boolean 132 133 opp-suspend: 134 description: 135 Marks the OPP to be used during device suspend. If multiple OPPs in 136 the table have this, the OPP with highest opp-hz will be used. 137 type: boolean 138 139 opp-supported-hw: 140 description: | 141 This property allows a platform to enable only a subset of the OPPs 142 from the larger set present in the OPP table, based on the current 143 version of the hardware (already known to the operating system). 144 145 Each block present in the array of blocks in this property, represents 146 a sub-group of hardware versions supported by the OPP. i.e. <sub-group 147 A>, <sub-group B>, etc. The OPP will be enabled if _any_ of these 148 sub-groups match the hardware's version. 149 150 Each sub-group is a platform defined array representing the hierarchy 151 of hardware versions supported by the platform. For a platform with 152 three hierarchical levels of version (X.Y.Z), this field shall look 153 like 154 155 opp-supported-hw = <X1 Y1 Z1>, <X2 Y2 Z2>, <X3 Y3 Z3>. 156 157 Each level (eg. X1) in version hierarchy is represented by a 32 bit 158 value, one bit per version and so there can be maximum 32 versions per 159 level. Logical AND (&) operation is performed for each level with the 160 hardware's level version and a non-zero output for _all_ the levels in 161 a sub-group means the OPP is supported by hardware. A value of 162 0xFFFFFFFF for each level in the sub-group will enable the OPP for all 163 versions for the hardware. 164 $ref: /schemas/types.yaml#/definitions/uint32-matrix 165 maxItems: 32 166 items: 167 minItems: 1 168 maxItems: 4 169 170 required-opps: 171 description: 172 This contains phandle to an OPP node in another device's OPP table. It 173 may contain an array of phandles, where each phandle points to an OPP 174 of a different device. It should not contain multiple phandles to the 175 OPP nodes in the same OPP table. This specifies the minimum required 176 OPP of the device(s), whose OPP's phandle is present in this property, 177 for the functioning of the current device at the current OPP (where 178 this property is present). 179 $ref: /schemas/types.yaml#/definitions/phandle-array 180 181 patternProperties: 182 '^opp-microvolt-': 183 description: 184 Named opp-microvolt property. This is exactly similar to the above 185 opp-microvolt property, but allows multiple voltage ranges to be 186 provided for the same OPP. At runtime, the platform can pick a <name> 187 and matching opp-microvolt-<name> property will be enabled for all 188 OPPs. If the platform doesn't pick a specific <name> or the <name> 189 doesn't match with any opp-microvolt-<name> properties, then 190 opp-microvolt property shall be used, if present. 191 $ref: /schemas/types.yaml#/definitions/uint32-matrix 192 minItems: 1 193 maxItems: 8 # Should be enough regulators 194 items: 195 minItems: 1 196 maxItems: 3 197 198 '^opp-microamp-': 199 description: 200 Named opp-microamp property. Similar to opp-microvolt-<name> property, 201 but for microamp instead. 202 $ref: /schemas/types.yaml#/definitions/uint32-array 203 minItems: 1 204 maxItems: 8 # Should be enough regulators 205 206 dependencies: 207 opp-avg-kBps: [ opp-peak-kBps ] 208 209required: 210 - compatible 211 212additionalProperties: true 213 214... 215