Tirupathi Reddy | c3598b5 | 2017-12-18 13:31:12 +0530 | [diff] [blame] | 1 | QTI CPR (Core Power Reduction) Regulator |
| 2 | |
| 3 | CPR regulator device is for QTI RBCPR (RapidBridge CPR) on |
| 4 | application processor core. It takes voltage corner level |
| 5 | as input and converts it to actual voltage based on the |
| 6 | suggestions from factory production process. When CPR is |
| 7 | enabled for application processer core, it will suggest |
| 8 | scaling the voltage up or down for best performance and |
| 9 | power of the core. The scaling based on factory production |
| 10 | process is called PVS (Process Voltage Scaling) with efuse |
| 11 | bits to indicate what bin (and voltage range) a chip is in. |
| 12 | |
| 13 | Required properties: |
| 14 | - compatible: Must be "qcom,cpr-regulator" |
| 15 | - reg: Register addresses for RBCPR, RBCPR clock |
| 16 | select, PVS and CPR eFuse address |
| 17 | - reg-names: Register names. Must be "rbcpr" and "efuse_addr". |
| 18 | "rbcpr_clk" is optional. |
| 19 | - regulator-name: A string used to describe the regulator |
| 20 | - interrupts: Interrupt line from RBCPR to interrupt controller. |
| 21 | - qcom,cpr-fuse-corners: Number of fuse corners present. Many other properties |
| 22 | are sized based upon this value. |
| 23 | - regulator-min-microvolt: Minimum corner value which should be 1 to |
| 24 | represent the lowest supported corner. |
| 25 | - regulator-max-microvolt: Maximum corner value which should be equal to |
| 26 | qcom,cpr-fuse-corners if consumers request fuse |
| 27 | corners or the length of qcom,cpr-corner-map if |
| 28 | consumers request virtual corners. |
| 29 | - qcom,cpr-voltage-ceiling: Array of ceiling voltages in microvolts for fuse |
| 30 | corners ordered from lowest voltage corner to highest |
| 31 | voltage corner. This property must be of length |
| 32 | defined by qcom,cpr-fuse-corners. |
| 33 | - qcom,cpr-voltage-floor: Array of floor voltages in microvolts for fuse |
| 34 | corners ordered from lowest voltage corner to highest |
| 35 | voltage corner. This property must be of length |
| 36 | defined by qcom,cpr-fuse-corners. |
| 37 | - vdd-apc-supply: Regulator to supply VDD APC power |
| 38 | - qcom,vdd-apc-step-up-limit: Limit of vdd-apc-supply steps for scaling up. |
| 39 | - qcom,vdd-apc-step-down-limit: Limit of vdd-apc-supply steps for scaling down. |
| 40 | - qcom,cpr-ref-clk: The reference clock in kHz. |
| 41 | - qcom,cpr-timer-delay: The delay in microseconds for the timer interval. |
| 42 | - qcom,cpr-timer-cons-up: Consecutive number of timer interval (qcom,cpr-timer-delay) |
| 43 | occurred before issuing UP interrupt. |
| 44 | - qcom,cpr-timer-cons-down: Consecutive number of timer interval (qcom,cpr-timer-delay) |
| 45 | occurred before issuing DOWN interrupt. |
| 46 | - qcom,cpr-irq-line: Internal interrupt route signal of RBCPR, one of 0, 1 or 2. |
| 47 | - qcom,cpr-step-quotient: Defines the number of CPR quotient (i.e. Ring Oscillator(RO) |
| 48 | count) per vdd-apc-supply output voltage step. A single |
| 49 | integer value may be specified which is to be used for all |
| 50 | RO's. Alternatively, 8 integer values may be specified which |
| 51 | define the step quotients for RO0 to RO7 in order. |
| 52 | - qcom,cpr-up-threshold: The threshold for CPR to issue interrupt when |
| 53 | error_steps is greater than it when stepping up. |
| 54 | - qcom,cpr-down-threshold: The threshold for CPR to issue interrupt when |
| 55 | error_steps is greater than it when stepping down. |
| 56 | - qcom,cpr-idle-clocks: Idle clock cycles RO can be in. |
| 57 | - qcom,cpr-gcnt-time: The time for gate count in microseconds. |
| 58 | - qcom,cpr-apc-volt-step: The voltage in microvolt per CPR step, such as 5000uV. |
| 59 | - qcom,cpr-fuse-row: Array of row number of CPR fuse and method to read that row. It should have |
| 60 | index and value like this: |
| 61 | [0] => the fuse row number |
| 62 | [1] => fuse reading method, 0 for direct reading or 1 for SCM reading |
| 63 | - qcom,cpr-fuse-target-quot: Array of bit positions in the primary CPR fuse row defined |
| 64 | by qcom,cpr-fuse-row for the target quotients of each |
| 65 | fuse corner. Each bit position corresponds to the LSB |
| 66 | of the quotient parameter. The elements in the array |
| 67 | are ordered from lowest voltage corner to highest voltage |
| 68 | corner. This property must be of length defined by |
| 69 | qcom,cpr-fuse-corners. |
| 70 | - qcom,cpr-fuse-ro-sel: Array of bit positions in the primary CPR fuse row defined |
| 71 | by qcom,cpr-fuse-row for the ring oscillator selection for each |
| 72 | fuse corner. Each bit position corresponds to the LSB |
| 73 | of the RO select parameter. The elements in the array |
| 74 | are ordered from lowest voltage corner to highest voltage |
| 75 | corner. This property must be of length defined by |
| 76 | qcom,cpr-fuse-corners. |
| 77 | |
| 78 | Optional properties: |
| 79 | - vdd-mx-supply: Regulator to supply memory power as dependency |
| 80 | of VDD APC. |
| 81 | - qcom,vdd-mx-vmax: The maximum voltage in uV for vdd-mx-supply. This |
| 82 | is required when vdd-mx-supply is present. |
| 83 | - qcom,vdd-mx-vmin-method: The method to determine the minimum voltage for |
| 84 | vdd-mx-supply, which can be one of following |
| 85 | choices compared with VDD APC: |
| 86 | 0 => equal to the voltage(vmin) of VDD APC |
| 87 | 1 => equal to PVS corner ceiling voltage |
| 88 | 2 => equal to slow speed corner ceiling |
| 89 | 3 => equal to qcom,vdd-mx-vmax |
| 90 | 4 => equal to VDD_APC fuse corner mapped vdd-mx voltage |
| 91 | 5 => equal to VDD_APC virtual corner mapped vdd-mx voltage |
| 92 | This is required when vdd-mx-supply is present. |
| 93 | - qcom,vdd-mx-corner-map: Array of integers which defines the mapping from VDD_APC |
| 94 | voltage corners to vdd-mx-supply voltages. |
| 95 | Each element is a voltage to request from vdd-mx for the |
| 96 | corresponding fuse corner or virtual corner. The elements |
| 97 | in the array are ordered from lowest voltage corner |
| 98 | to highest voltage corner. The length of this property |
| 99 | depends on the value of qcom,vdd-mx-vmin-method property. |
| 100 | When qcom,vdd-mx-vmin-method property has a value of 4, the length |
| 101 | of this property must be equal to the value defined by qcom,cpr-fuse-corners. |
| 102 | When qcom,vdd-mx-vmin-method property has a value of 5, the length of |
| 103 | this property must be equal to the number of elements in the qcom,cpr-corner-map |
| 104 | property. |
| 105 | - qcom,pvs-voltage-table: Array of N-tuples in which each tuple specifies the |
| 106 | initial voltage in microvolts of the PVS bin for each |
| 107 | fuse voltage corner. The location or 0-based index |
| 108 | of a tuple in the list corresponds to the PVS bin number. |
| 109 | Each tuple must be of length defined by qcom,cpr-fuse-corners. |
| 110 | A given cpr-regulator device must have either |
| 111 | qcom,pvs-voltage-table specified or |
| 112 | qcom,cpr-fuse-init-voltage (and its associated properties). |
| 113 | - qcom,pvs-fuse-redun-sel: Array of 5 elements to indicate where to read the bits, what value to |
| 114 | compare with in order to decide if the redundant PVS fuse bits would be |
| 115 | used instead of the original bits and method to read fuse row, reading |
| 116 | register through SCM or directly. The 5 elements with index [0..4] are: |
| 117 | [0] => the fuse row number of the selector |
| 118 | [1] => LSB bit position of the bits |
| 119 | [2] => number of bits |
| 120 | [3] => the value to indicate redundant selection |
| 121 | [4] => fuse reading method, 0 for direct reading or 1 for SCM reading |
| 122 | When the value of the fuse bits specified by first 3 elements equals to |
| 123 | the value in 4th element, redundant PVS fuse bits should be selected. |
| 124 | Otherwise, the original PVS bits should be selected. If the 5th |
| 125 | element is 0, read the fuse row from register directly. Otherwise, |
| 126 | read it through SCM. |
| 127 | This property is required if qcom,pvs-voltage-table is present. |
| 128 | - qcom,pvs-fuse: Array of 4 elements to indicate the bits for PVS fuse and read method. |
| 129 | The array should have index and value like this: |
| 130 | [0] => the PVS fuse row number |
| 131 | [1] => LSB bit position of the bits |
| 132 | [2] => number of bits |
| 133 | [3] => fuse reading method, 0 for direct reading or 1 for SCM reading |
| 134 | This property is required if qcom,pvs-voltage-table is present. |
| 135 | - qcom,pvs-fuse-redun: Array of 4 elements to indicate the bits for redundant PVS fuse. |
| 136 | The array should have index and value like this: |
| 137 | [0] => the redundant PVS fuse row number |
| 138 | [1] => LSB bit position of the bits |
| 139 | [2] => number of bits |
| 140 | [3] => fuse reading method, 0 for direct reading or 1 for SCM reading |
| 141 | This property is required if qcom,pvs-voltage-table is present. |
| 142 | - qcom,cpr-fuse-redun-sel: Array of 5 elements to indicate where to read the bits, what value to |
| 143 | compare with in order to decide if the redundant CPR fuse bits would be |
| 144 | used instead of the original bits and method to read fuse row, using SCM |
| 145 | to read or read register directly. The 5 elements with index [0..4] are: |
| 146 | [0] => the fuse row number of the selector |
| 147 | [1] => LSB bit position of the bits |
| 148 | [2] => number of bits |
| 149 | [3] => the value to indicate redundant selection |
| 150 | [4] => fuse reading method, 0 for direct reading or 1 for SCM reading |
| 151 | When the value of the fuse bits specified by first 3 elements equals to |
| 152 | the value in 4th element, redundant CPR fuse bits should be selected. |
| 153 | Otherwise, the original CPR bits should be selected. If the 5th element |
| 154 | is 0, read the fuse row from register directly. Otherwise, read it through |
| 155 | SCM. |
| 156 | - qcom,cpr-fuse-redun-row: Array of row number of redundant CPR fuse and method to read that |
| 157 | row. It should have index and value like this: |
| 158 | [0] => the redundant fuse row number |
| 159 | [1] => the value to indicate reading the fuse row directly or using SCM |
| 160 | This property is required if qcom,cpr-fuse-redun-sel is present. |
| 161 | - qcom,cpr-fuse-redun-target-quot: Array of bit positions in the redundant CPR fuse row defined |
| 162 | by qcom,cpr-fuse-redun-row for the target quotients of each |
| 163 | fuse corner. Each bit position corresponds to the LSB |
| 164 | of the quotient parameter. The elements in the array |
| 165 | are ordered from lowest voltage corner to highest voltage corner. |
| 166 | This property must be of length defined by qcom,cpr-fuse-corners. |
| 167 | This property is required if qcom,cpr-fuse-redun-sel is present. |
| 168 | - qcom,cpr-fuse-redun-ro-sel: Array of bit positions in the redundant CPR fuse row defined |
| 169 | by qcom,cpr-fuse-redun-row for the ring oscillator select of each |
| 170 | fuse corner. Each bit position corresponds to the LSB of the RO |
| 171 | select parameter. The elements in the array are ordered from |
| 172 | lowest voltage corner to highest voltage corner. |
| 173 | This property must be of length defined by qcom,cpr-fuse-corners. |
| 174 | This property is required if qcom,cpr-fuse-redun-sel is present. |
| 175 | - qcom,cpr-fuse-redun-bp-cpr-disable: Redundant bit position of the bit to indicate if CPR should be disable |
| 176 | - qcom,cpr-fuse-redun-bp-scheme: Redundant bit position of the bit to indicate if it's a global/local scheme |
| 177 | This property is required if cpr-fuse-redun-bp-cpr-disable |
| 178 | is present, and vise versa. |
| 179 | - qcom,cpr-fuse-bp-cpr-disable: Bit position of the bit to indicate if CPR should be disabled |
| 180 | - qcom,cpr-fuse-bp-scheme: Bit position of the bit to indicate if it's a global/local scheme |
| 181 | - qcom,cpr-fuse-revision: Array of 4 integer elements which define the location of the bits for |
| 182 | the CPR fusing revision fuse parameter. The 4 elements are: |
| 183 | [0]: => the fuse row number of the bits |
| 184 | [1]: => LSB bit position of the bits |
| 185 | [2]: => the number of bits |
| 186 | [3]: => fuse reading method, 0 for direct reading or 1 for SCM reading |
| 187 | The fusing revision value is used to determine which specific adjustments |
| 188 | are required on some chips. |
| 189 | - qcom,cpr-fuse-target-quot-size: Array of target quotient parameter bit sizes in the primary |
| 190 | or redundant CPR fuse row for each fuse corner. The elements in the |
| 191 | array are ordered from lowest voltage corner to highest voltage corner. |
| 192 | If this property is not present, then all target quotient fuse values |
| 193 | are assumed to be the default length of 12 bits. |
| 194 | - qcom,cpr-fuse-target-quot-scale: Array of doubles which defines the scaling coefficients to decode |
| 195 | the target quotients of each fuse corner. The first element in each |
| 196 | double represents the offset to add to the scaled quotient. The second |
| 197 | element represents the multiplier to scale the quotient by. For example, |
| 198 | given a tuple <A B>, quot_decoded = A + (B * quot_raw). |
| 199 | The doubles in the array are ordered from lowest voltage corner to highest |
| 200 | voltage corner. This property must contain a number of doubles equal to |
| 201 | the value of qcom,cpr-fuse-corners. If this property is not present, |
| 202 | then all target quotient parameters are assumed to have an offset of 0 |
| 203 | and a multiplier of 1 (i.e. no decoding needed). |
| 204 | - qcom,cpr-enable: Present: CPR enabled by default. |
| 205 | Not Present: CPR disable by default. |
| 206 | - qcom,cpr-fuse-cond-min-volt-sel: Array of 5 elements to indicate where to read the bits, what value to |
| 207 | compare with in order to decide if the conditional minimum apc voltage needs |
| 208 | to be applied and the fuse reading method. |
| 209 | The 5 elements with index[0..4] are: |
| 210 | [0] => the fuse row number; |
| 211 | [1] => LSB bit position of the bits; |
| 212 | [2] => number of the bits; |
| 213 | [3] => the expected data to read; |
| 214 | [4] => fuse reading method, 0 for direct reading or 1 for SCM reading; |
| 215 | When the value of the fuse bits specified by first 3 elements is not equal to |
| 216 | the value in 4th element, then set the apc voltage for all parts running |
| 217 | at each voltage corner to be not lower than the voltage defined |
| 218 | using "qcom,cpr-cond-min-voltage". |
| 219 | - qcom,cpr-cond-min-voltage: Minimum voltage in microvolts allowed for cpr-regulator output if the fuse bits |
| 220 | defined in qcom,cpr-fuse-cond-min-volt-sel have not been programmed with the |
| 221 | expected data. This is required if cpr-fuse-cond-min-volt-sel is present. |
| 222 | - qcom,cpr-fuse-uplift-sel: Array of 5 elements to indicate where to read the bits, what value to |
| 223 | compare with in order to enable or disable the pvs voltage uplift workaround, |
| 224 | and the fuse reading method. |
| 225 | The 5 elements with index[0..4] are: |
| 226 | [0]: => the fuse row number of the selector; |
| 227 | [1]: => LSB bit position of the bits; |
| 228 | [2]: => number of the bits; |
| 229 | [3]: => the value to indicate if the apc pvs voltage uplift workaround will |
| 230 | be enabled; |
| 231 | [4]: => fuse reading method, 0 for direct reading or 1 for SCM reading. |
| 232 | When the value of the fuse bits specified by first 3 elements equals to the |
| 233 | value in 4th element, the pvs voltage uplift workaround will be enabled. |
| 234 | - qcom,speed-bin-fuse-sel: Array of 4 elements to indicate where to read the speed bin of the processor, |
| 235 | and the fuse reading method. |
| 236 | The 4 elements with index[0..3] are: |
| 237 | [0]: => the fuse row number of the selector; |
| 238 | [1]: => LSB bit position of the bits; |
| 239 | [2]: => number of the bits; |
| 240 | [3]: => fuse reading method, 0 for direct reading or 1 for SCM reading. |
| 241 | This is required if cpr-fuse-uplift-disable-sel is present. |
| 242 | - qcom,cpr-uplift-voltage: Uplift in microvolts used for increasing pvs init voltage. If this property is present, |
| 243 | This is required if cpr-fuse-uplift-disable-sel is present. |
| 244 | - qcom,cpr-uplift-max-volt: Maximum voltage in microvolts used for pvs voltage uplift workaround to limit |
| 245 | the maximum pvs voltage. |
| 246 | This is required if cpr-fuse-uplift-disable-sel is present. |
| 247 | - qcom,cpr-uplift-quotient: Array of target quotient increments to add to the fused quotients of each |
| 248 | fuse corner as part of the PVS voltage uplift workaround. |
| 249 | The elements in the array are ordered from lowest voltage |
| 250 | corner to highest voltage corner. This property must be of |
| 251 | length defined by qcom,cpr-fuse-corners. This is required |
| 252 | if cpr-fuse-uplift-disable-sel is present. |
| 253 | - qcom,cpr-uplift-speed-bin: The speed bin value corresponding to one type of processor which needs to apply the |
| 254 | pvs voltage uplift workaround. |
| 255 | This is required if cpr-fuse-uplift-disable-sel is present. |
| 256 | - qcom,cpr-fuse-version-map: Array of integer tuples which each match to a given combination of CPR |
| 257 | fuse parameter values. Each tuple consists of N + 3 elements. Where |
| 258 | N is the number of fuse corners defined by the qcom,cpr-fuse-corners |
| 259 | property. The elements in one tuple are: |
| 260 | [0]: => the speed bin of the CPU |
| 261 | [1]: => the PVS version of the CPU |
| 262 | [2]: => the CPR fuse revision |
| 263 | [3 - N+2]: => the ring oscillator select value of each fuse corner |
| 264 | ordered from lowest to highest |
| 265 | Any element in a tuple may use the value 0xffffffff as a wildcard |
| 266 | which will match against any fuse parameter value. The first tuple |
| 267 | that matches against the fuse values read from hardware will be used. |
| 268 | This property is used by several properties to provide an index into |
| 269 | their lists. |
| 270 | - qcom,cpr-allowed: Integer values that specifies whether the closed loop CPR is allowed or |
| 271 | not for a particular fuse revision. If the qcom,cpr-fuse-version-map |
| 272 | property is specified, then qcom,cpr-allowed must contain the same number |
| 273 | of integers as that of the number of tuples in qcom,cpr-fuse-version-map. |
| 274 | If the integer value has a value 0 for a particular fuse revision, then it |
| 275 | is treated as if the closed loop operation is disabled in the fuse. If the |
| 276 | integer value has a value 1 for a particular fuse revision, then the closed |
| 277 | loop operation is enabled for that fuse revision. If nothing is specified |
| 278 | for a particular fuse revision, then the closed loop operation is enabled |
| 279 | for that fuse revision by default. |
| 280 | - qcom,cpr-quotient-adjustment: Array of integer tuples of target quotient adjustments to add to the fused |
| 281 | quotients of each fuse corner. The elements in a tuple are ordered from |
| 282 | lowest voltage corner to highest voltage corner. Each tuple must be of |
| 283 | length defined by qcom,cpr-fuse-corners. If the qcom,cpr-fuse-version-map |
| 284 | property is specified, then qcom,cpr-quotient-adjustment must contain the |
| 285 | same number of tuples as qcom,cpr-fuse-version-map. These tuples are then |
| 286 | mapped one-to-one in the order specified. E.g. if the second |
| 287 | qcom,cpr-fuse-version-map tuple matches for a given device, then the quotient |
| 288 | adjustments defined in the second qcom,cpr-quotient-adjustment tuple will |
| 289 | be applied. If the qcom,cpr-fuse-version-map property is not specified, |
| 290 | then qcom,cpr-quotient-adjustment must contain a single tuple which is then |
| 291 | applied unconditionally. If this property is specified, then the quotient |
| 292 | adjustment values are added to the target quotient values read from fuses |
| 293 | before writing them into the CPR GCNT target control registers. |
| 294 | This property can be used to add or subtract static voltage margin from the |
| 295 | regulator managed by the CPR controller. |
| 296 | - qcom,cpr-init-voltage-adjustment: Array of integer tuples of initial voltage adjustments in microvolts to |
| 297 | add to the fused initial voltage values of each fuse corner. The elements |
| 298 | in a tuple are ordered from lowest voltage corner to highest voltage corner. |
| 299 | Each tuple must be of the length defined by qcom,cpr-fuse-corners. If the |
| 300 | qcom,cpr-fuse-version-map property is specified, then |
| 301 | qcom,cpr-init-voltage-adjustment must contain the same number of tuples as |
| 302 | qcom,cpr-fuse-version-map. These tuples are then mapped one-to-one in the |
| 303 | order specified. E.g. if the second qcom,cpr-fuse-version-map tuple matches |
| 304 | for a given device, then the initial voltage adjustments defined in the |
| 305 | second qcom,cpr-init-voltage-adjustment tuple will be applied. If the |
| 306 | qcom,cpr-fuse-version-map property is not specified, then |
| 307 | qcom,cpr-init-voltage-adjustment must contain a single tuple which is then |
| 308 | applied unconditionally. This property can be used to add or subtract |
| 309 | static initial voltage margin from the regulator managed by the CPR |
| 310 | controller. |
| 311 | - qcom,cpr-quot-offset-adjustment: Array of integer tuples of target quotient offset adjustments to add |
| 312 | to the fused quotient offsets of each fuse corner. The elements in a tuple |
| 313 | are ordered from lowest voltage corner to highest voltage corner. Each tuple |
| 314 | must be of length defined by qcom,cpr-fuse-corners. If the qcom,cpr-fuse-version-map |
| 315 | property is specified, then qcom,cpr-quot-offset-adjustment must contain the |
| 316 | same number of tuples as qcom,cpr-fuse-version-map. These tuples are then |
| 317 | mapped one-to-one in the order specified. E.g. if the second |
| 318 | qcom,cpr-fuse-version-map tuple matches for a given device, then the quotient |
| 319 | offset adjustments defined in the second qcom,cpr-quot-offset-adjustment tuple |
| 320 | will be applied. If the qcom,cpr-fuse-version-map property is not specified, |
| 321 | then qcom,cpr-quot-offset-adjustment must contain a single tuple which is then |
| 322 | applied unconditionally. If this property is specified, then the quotient |
| 323 | offset adjustment values are added to the target quotient offset values read |
| 324 | from fuses. |
| 325 | This property can be used to add or subtract static quotient offset margin from |
| 326 | the regulator managed by the CPR controller. |
| 327 | - qcom,cpr-clamp-timer-interval: The number of 64 reference clock cycle blocks to delay for whenever |
| 328 | the clamp signal, sensor mask registers or sensor bypass registers |
| 329 | change. The CPR controller loop is disabled during this delay. |
| 330 | Supported values are 0 to 255. If this property is not specified, |
| 331 | then a value of 0 is assumed. Note that if this property has a |
| 332 | value greater than 0, then software cannot accurately determine the |
| 333 | error_steps value that corresponds to a given CPR measurement |
| 334 | unless processor power collapsing is disabled. If this property |
| 335 | has a value of 0, then the CPR controller loop is not disabled and |
| 336 | re-enabled while idle if the clamp signal changes. Instead, it |
| 337 | will remain idle until software issues an ACK or NACK command. |
| 338 | This ensures that software can read the error_steps value which |
| 339 | resulted in the CPR up or down interrupt. Setting this property to |
| 340 | a value greater than 0 is useful for resetting the CPR sensors of a |
| 341 | processor that uses BHS type voltage switches in order to avoid |
| 342 | anomalous CPR up interrupts when exiting from power collapse. |
| 343 | - vdd-apc-optional-prim-supply: Present: Regulator of highest priority to supply VDD APC power |
| 344 | Not Present: No such regulator. |
| 345 | - vdd-apc-optional-sec-supply: Present: Regulator of second highest priority to supply VDD APC power. |
| 346 | Not Present: No such regulator. |
| 347 | - qcom,cpr-speed-bin-max-corners: Array of (N+2)-tuples in which each tuple maps a CPU speed bin and PVS version to |
| 348 | the maximum virtual voltage corner corresponding to each fuse corner. The value N |
| 349 | corresponds to the number of fuse corners specified by qcom,cpr-fuse-corners. |
| 350 | The elements in one tuple are: |
| 351 | [0]: => the speed bin of the CPU. It may use the value 0xffffffff as a |
| 352 | wildcard to match any speed bin values. |
| 353 | [1]: => the PVS version of the CPU. It may use the value 0xffffffff as |
| 354 | a wildcard to match any PVS version values. |
| 355 | [2 - N+1]: => the max virtual voltage corner value corresponding to each fuse corner |
| 356 | for this speed bin, ordered from lowest voltage corner to highest |
| 357 | voltage corner. |
| 358 | No CPR target quotient scaling is applied on chips which have a speed bin + PVS version |
| 359 | pair that does not appear in one of the tuples in this property. If the property is |
| 360 | specified, then quotient scaling is enabled for the highest voltage corner. If this property is |
| 361 | not specified, then no quotient scaling can take place. |
| 362 | - qcom,cpr-corner-map: Array of elements of fuse corner value for each virtual corner. |
| 363 | The location or 1-based index of an element in the list corresponds to |
| 364 | the virtual corner value. For example, the first element in the list is the fuse corner |
| 365 | value that virtual corner 1 maps to. |
| 366 | This property is required if qcom,cpr-speed-bin-max-corners is present. |
| 367 | - qcom,cpr-corner-frequency-map: Array of tuples in which a tuple describes a corner to application processor frequency |
| 368 | mapping. |
| 369 | The 2 elements in one tuple are: |
| 370 | [0]: => a virtual voltage corner. |
| 371 | [1]: => the application processor frequency in Hz corresponding to the virtual corner. |
| 372 | This property is required if qcom,cpr-speed-bin-max-corners is present. |
| 373 | - qcom,pvs-version-fuse-sel: Array of 4 elements to indicate where to read the pvs version of the processor, |
| 374 | and the fuse reading method. |
| 375 | The 4 elements with index[0..3] are: |
| 376 | [0]: => the fuse row number of the selector; |
| 377 | [1]: => LSB bit position of the bits; |
| 378 | [2]: => the number of bits; |
| 379 | [3]: => fuse reading method, 0 for direct reading or 1 for SCM reading. |
| 380 | - qcom,cpr-voltage-ceiling-override: Array of (N+2)-tuples in which each tuple maps a CPU speed bin and PVS version |
| 381 | to the ceiling voltage to apply for each virtual voltage corner. The value N |
| 382 | corresponds to the number of virtual corners as specified by the number of elements |
| 383 | in the qcom,cpr-corner-map property. |
| 384 | The elements in one tuple are: |
| 385 | [0]: => the speed bin of the CPU. It may use the value 0xffffffff as a |
| 386 | wildcard to match any speed bin values. |
| 387 | [1]: => the PVS version of the CPU. It may use the value 0xffffffff as a |
| 388 | wildcard to match any PVS version values. |
| 389 | [2 - N+1]: => the ceiling voltage value in microvolts corresponding to each virtual |
| 390 | corner for this speed bin, ordered from lowest voltage corner to |
| 391 | highest voltage corner. |
| 392 | No ceiling override is applied on chips which have a speed bin + PVS version |
| 393 | pair that does not appear in one of the tuples in this property. If the property is |
| 394 | specified and the speed bin + PVS version matches, then the per-virtual-corner ceiling |
| 395 | voltages will be used in place of the per-fuse-corner ceiling voltages defined in the |
| 396 | qcom,cpr-voltage-ceiling property. If this property is not specified, then the |
| 397 | per-fuse-corner ceiling voltages will always be used. |
| 398 | - qcom,cpr-voltage-floor-override: Array of (N+2)-tuples in which each tuple maps a CPU speed bin and PVS version |
| 399 | to the floor voltage to apply for each virtual voltage corner. The value N |
| 400 | corresponds to the number of virtual corners as specified by the number of elements |
| 401 | in the qcom,cpr-corner-map property. |
| 402 | The elements in one tuple are: |
| 403 | [0]: => the speed bin of the CPU. It may use the value 0xffffffff as a |
| 404 | wildcard to match any speed bin values. |
| 405 | [1]: => the PVS version of the CPU. It may use the value 0xffffffff as a |
| 406 | wildcard to match any PVS version values. |
| 407 | [2 - N+1]: => the floor voltage value in microvolts corresponding to each virtual |
| 408 | corner for this speed bin, ordered from lowest voltage corner to |
| 409 | highest voltage corner. |
| 410 | No floor override is applied on chips which have a speed bin + PVS version |
| 411 | pair that does not appear in one of the tuples in this property. If the property is |
| 412 | specified and the speed bin + PVS version matches, then the per-virtual-corner floor |
| 413 | voltages will be used in place of the per-fuse-corner floor voltages defined in the |
| 414 | qcom,cpr-voltage-floor property. If this property is not specified, then the |
| 415 | per-fuse-corner floor voltages will always be used. |
| 416 | - qcom,cpr-floor-to-ceiling-max-range: Array of integer tuples of floor-to-ceiling max range values in microvolts |
| 417 | to be subtracted from the ceiling voltage values of each virtual corner. |
| 418 | Supported values are those greater than or equal 0, or (-1). The value 0 for a corner |
| 419 | implies that the floor value for that corner has to equal to its ceiling value. |
| 420 | The value (-1) for a corner implies that no modification to the default floor voltage |
| 421 | is required. The elements in a tuple are ordered from lowest voltage corner to highest |
| 422 | voltage corner. Each tuple must be of the length equal to the number of virtual corners |
| 423 | as specified by the number of elements in the qcom,cpr-corner-map property. If the |
| 424 | qcom,cpr-fuse-version-map property is specified, then |
| 425 | qcom,cpr-dynamic-floor-override-adjustment must contain the same number of |
| 426 | tuples as qcom,cpr-fuse-version-map. These tuples are then mapped one-to-one in the |
| 427 | order specified. E.g. if the second qcom,cpr-fuse-version-map tuple matches |
| 428 | for a given device, then voltage adjustments defined in the second |
| 429 | qcom,cpr-dynamic-floor-override-adjustment tuple will be applied. If the |
| 430 | qcom,cpr-fuse-version-map property is not specified, then |
| 431 | qcom,cpr-dynamic-floor-override-adjustment must contain a single tuple which |
| 432 | is then applied unconditionally. |
| 433 | - qcom,cpr-virtual-corner-init-voltage-adjustment: Array of integer tuples of voltage adjustments in microvolts to be |
| 434 | added to the initial voltage values of each virtual corner. The elements |
| 435 | in a tuple are ordered from lowest voltage corner to highest voltage corner. |
| 436 | Each tuple must be of the length equal to the number of virtual corners as |
| 437 | specified by the number of elements in the qcom,cpr-corner-map property. If the |
| 438 | qcom,cpr-fuse-version-map property is specified, then |
| 439 | qcom,cpr-virtual-corner-init-voltage-adjustment must contain the same number of |
| 440 | tuples as qcom,cpr-fuse-version-map. These tuples are then mapped one-to-one in the |
| 441 | order specified. E.g. if the second qcom,cpr-fuse-version-map tuple matches |
| 442 | for a given device, then voltage adjustments defined in the second |
| 443 | qcom,cpr-virtual-corner-init-voltage-adjustment tuple will be applied. If the |
| 444 | qcom,cpr-fuse-version-map property is not specified, then |
| 445 | qcom,cpr-virtual-corner-init-voltage-adjustment must contain a single tuple which |
| 446 | is then applied unconditionally. |
| 447 | - qcom,cpr-virtual-corner-quotient-adjustment: Array of integer tuples of quotient offsets to be added to |
| 448 | the scaled target quotient of each virtual corner. The elements |
| 449 | in a tuple are ordered from lowest voltage corner to highest voltage corner. |
| 450 | Each tuple must be of the length equal to the number of virtual corners as |
| 451 | specified by the number of elements in the qcom,cpr-corner-map property. |
| 452 | If the qcom,cpr-fuse-version-map property is specified, then |
| 453 | qcom,cpr-virtual-corner-quotient-adjustment must contain the same number of tuples as |
| 454 | qcom,cpr-fuse-version-map. These tuples are then mapped one-to-one in the |
| 455 | order specified. E.g. if the second qcom,cpr-fuse-version-map tuple matches |
| 456 | for a given device, then quotient adjustments defined in the second |
| 457 | qcom,cpr-virtual-corner-quotient-adjustment tuple will be applied. If the |
| 458 | qcom,cpr-fuse-version-map property is not specified, then |
| 459 | qcom,cpr-virtual-corner-quotient-adjustment must contain a single tuple which is then |
| 460 | applied unconditionally. |
| 461 | - qcom,cpr-cpus: Array of CPU phandles which correspond to the cores that this cpr-regulator |
| 462 | device must monitor when adjusting the voltage and/or target quotient based |
| 463 | upon the number of online cores or make sure that one of them must be online |
| 464 | when performing de-aging measurements. This property must be specified in order to |
| 465 | utilize the qcom,cpr-online-cpu-virtual-corner-init-voltage-adjustment or |
| 466 | qcom,cpr-online-cpu-virtual-corner-quotient-adjustment or qcom,cpr-aging-sensor-id properties. |
| 467 | - qcom,cpr-online-cpu-virtual-corner-init-voltage-adjustment: Array of tuples where each tuple specifies |
| 468 | the voltage adjustment for each corner. These adjustments apply to the |
| 469 | initial voltage of each corner. The size of each tuple must be equal |
| 470 | to qcom,cpr-fuse-corners if consumers request fuse corners or the length of |
| 471 | qcom,cpr-corner-map if consumers request virtual corners. In each tuple, the |
| 472 | value corresponds to the voltage adjustment when running at that corner at |
| 473 | init, from lowest to highest. The tuples must be organized into 1 group if |
| 474 | qcom,cpr-fuse-version-map is not specified or the same number of groups as |
| 475 | the number of tuples in qcom,cpr-fuse-version-map. The i-th group of tuples |
| 476 | corresponds to the voltage adjustments for i-th fuse version map tuple. In |
| 477 | each group, there are 1 plus length of qcom,cpr-cpus tuples, each tuple |
| 478 | corresponds to the number of cores online, from 0 to the number of elements |
| 479 | in qcom,cpr-cpus. |
| 480 | - qcom,cpr-online-cpu-init-voltage-as-ceiling: Boolean which indicates that the ceiling voltage used for a |
| 481 | given virtual corner may be reduced to the per number of cores online, |
| 482 | per-virtual corner ceiling voltage value. This property takes precedence |
| 483 | over qcom,cpr-scaled-init-voltage-as-ceiling if both are specified. |
| 484 | - qcom,cpr-online-cpu-virtual-corner-quotient-adjustment: Array of tuples where each tuple specifies |
| 485 | the quotient adjustment for each corner. These adjustments will be applied |
| 486 | to each corner at run time. The size of each tuple must be equal to |
| 487 | qcom,cpr-fuse-corners if consumers request fuse corners or the length of |
| 488 | qcom,cpr-corner-map if consumers request virtual corners. In each tuple, |
| 489 | the value corresponds to the quotient adjustment when running at that corner, |
| 490 | from lowest to highest. The tuples must be organized into 1 group if |
| 491 | qcom,cpr-fuse-version-map is not specified or the same number of groups |
| 492 | as the number of tuples in qcom,cpr-fuse-version-map. The i-th group of |
| 493 | tuples corresponds to the quotient adjustments for i-th fuse version map |
| 494 | tuple. In each group, there are 1 plus length of qcom,cpr-cpus tuples, |
| 495 | each tuple corresponds to the number of cores online, from 0 to the |
| 496 | number of elements in qcom,cpr-cpus. |
| 497 | - qcom,cpr-init-voltage-as-ceiling: Boolean which indicates that the ceiling voltage used for a given virtual |
| 498 | corner may be reduced to the per-fuse-corner initial voltage fuse value. |
| 499 | - qcom,cpr-scaled-init-voltage-as-ceiling: Boolean which indicates that the ceiling voltage used for a given |
| 500 | virtual corner may be reduced to the interpolated, per-virtual-corner initial |
| 501 | voltage value. Note that if both qcom,cpr-init-voltage-as-ceiling and |
| 502 | qcom,cpr-scaled-init-voltage-as-ceiling are specified, then |
| 503 | qcom,cpr-scaled-init-voltage-as-ceiling will take precedence since the interpolated |
| 504 | voltages are necessarily less than or equal to the fused initial voltage values. |
| 505 | - qcom,cpr-voltage-scaling-factor-max: Array of values which define the maximum allowed scaling factor to apply |
| 506 | when calculating per-corner initial voltage values for each fuse corner. The |
| 507 | array must be of length equal to the value of the qcom,cpr-fuse-corners property. |
| 508 | Each element in the array maps to the fuse corners in increasing order. |
| 509 | The elements have units of uV/MHz. Each element corresponds to 'max_factor' in |
| 510 | the following equation: |
| 511 | init_voltage_min(f) = fuse_init_voltage(f) - (fuse_f_max - f) * max_factor |
| 512 | If this property is not specified, then the initial voltage for each virtual |
| 513 | corner will be set to the initial voltage of the associated fuse corner. |
| 514 | - qcom,cpr-quot-adjust-scaling-factor-max: Array of values which define the maximum allowed scaling factor to |
| 515 | apply when calculating per-virtual-corner target quotients for each fuse |
| 516 | corner. Two data formats are allowed for this property. The primary one |
| 517 | requires that the array be of length equal to the value of the |
| 518 | qcom,cpr-fuse-corners property. When using this format, each element in the |
| 519 | array maps to the fuse corners in increasing order. The second depreciated |
| 520 | format allows for only a single element to be specified which defines the |
| 521 | maximum scaling factor for the highest fuse corner. In this case, a value of |
| 522 | 0 is assumed for the lower fuse corners. The elements of this property have |
| 523 | units of QUOT/GHz. Each element corresponds to 'max_factor' in the following |
| 524 | equation: |
| 525 | quot_min(f) = fuse_quot(f) - (fuse_f_max - f) * max_factor / 1000 |
| 526 | where f and fuse_f_max have units of MHz. |
| 527 | This property is required if qcom,cpr-speed-bin-max-corners is present. |
| 528 | - qcom,cpr-fuse-init-voltage: Array of quadruples in which each quadruple specifies a fuse location to |
| 529 | read in order to get an initial voltage for a fuse corner. The fuse values |
| 530 | are encoded as voltage steps higher or lower than the voltages defined in |
| 531 | qcom,cpr-voltage-ceiling. Each step corresponds to the voltage defined by |
| 532 | the qcom,cpr-init-voltage-step property. |
| 533 | The 4 elements in one quadruple are: |
| 534 | [0]: => the fuse row number of the bits |
| 535 | [1]: => LSB bit position of the bits |
| 536 | [2]: => number of the bits |
| 537 | [3]: => fuse reading method, 0 for direct reading or 1 for SCM reading |
| 538 | The quadruples are ordered from the lowest voltage fuse corner to the |
| 539 | highest voltage fuse corner. |
| 540 | A given cpr-regulator device must have either qcom,cpr-fuse-init-voltage |
| 541 | specified or qcom,pvs-voltage-table (and its associated properties). |
| 542 | - qcom,cpr-fuse-redun-init-voltage: Array of quadruples in which each quadruple specifies a fuse location |
| 543 | to read in order to get the redundant initial voltage for a fuse corner. |
| 544 | This property is the same as qcom,cpr-fuse-init-voltage except that it is |
| 545 | only utilized if a chip is configured to use the redundant set of fuse |
| 546 | values. This property is required if qcom,cpr-fuse-redun-sel and |
| 547 | qcom,cpr-fuse-init-voltage are specified. |
| 548 | - qcom,cpr-init-voltage-ref: Array of reference voltages in microvolts used when decoding the initial |
| 549 | voltage fuse values. The elements in the array are ordered from lowest |
| 550 | voltage corner to highest voltage corner. This property must be of length |
| 551 | defined by qcom,cpr-fuse-corners. |
| 552 | This property is required if qcom,cpr-fuse-init-voltage is present. |
| 553 | - qcom,cpr-init-voltage-step: The voltage step size in microvolts of the CPR initial voltage fuses described by the |
| 554 | qcom,cpr-fuse-init-voltage property. |
| 555 | This property is required if qcom,cpr-fuse-init-voltage is present. |
| 556 | - mem-acc-supply: Regulator to vote for the memory accelerator configuration. |
| 557 | Not Present: memory accelerator configuration not supported. |
| 558 | - qcom,mem-acc-corner-map: Array of integer which defines the mapping from mem-acc corner value for each |
| 559 | virtual corner. Each element is a mem-acc state for the corresponding virtual corner. |
| 560 | The elements in the array are ordered from lowest voltage corner to highest voltage corner. |
| 561 | - qcom,fuse-remap-source: Array of quadruples in which each quadruple specifies a fuse location to |
| 562 | remap. The 4 elements in one quadruple are: |
| 563 | [0]: => the fuse row number of the bits |
| 564 | [1]: => LSB bit position of the bits |
| 565 | [2]: => the number of bits |
| 566 | [3]: => fuse reading method, 0 for direct reading or 1 for SCM reading |
| 567 | The fuse bits for all quadruples are packed together in the order specified |
| 568 | into 64-bit virtual fuse rows beginning at the row number defined in the |
| 569 | qcom,fuse-remap-base-row property. The remapped rows may be used by any |
| 570 | other properties. |
| 571 | Example: |
| 572 | qcom,fuse-remap-base-row = <1000>; |
| 573 | qcom,fuse-remap-source = |
| 574 | <13 57 2 0>, |
| 575 | <14 30 3 0>, |
| 576 | <20 1 7 0>, |
| 577 | <40 47 120 0>; |
| 578 | |
| 579 | This results in the following bit remapping: |
| 580 | |
| 581 | Row Bits Remap Row Remap Bits |
| 582 | 13 57..58 --> 1000 0..1 |
| 583 | 14 30..32 --> 1000 2..4 |
| 584 | 20 1..7 --> 1000 5..11 |
| 585 | 40 47..63 --> 1000 12..28 |
| 586 | 41 0..34 --> 1000 29..63 |
| 587 | 41 35..63 --> 1001 0..28 |
| 588 | 42 0..34 --> 1001 29..63 |
| 589 | 42 35..38 --> 1002 0..3 |
| 590 | |
| 591 | A tuple like this could then be used to reference some of the |
| 592 | concatenated bits from rows 13, 14, and 20: |
| 593 | |
| 594 | qcom,cpr-fuse-init-voltage = <1000 0 6 0>; |
| 595 | - qcom,fuse-remap-base-row: Integer which defines the virtual row number to use as a base when remapping |
| 596 | fuse bits. The remap base row number can be any value as long as it is |
| 597 | greater than all of the real row numbers addressed in other properties of |
| 598 | the cpr-regulator device node. This property is required if |
| 599 | qcom,fuse-remap-source is specified. |
| 600 | - qcom,cpr-quot-min-diff: Integer which defines the minimum target-quotient difference between |
| 601 | the highest and (highest - 1) fuse corner to keep CPR enabled. If this |
| 602 | property is not specified a default value of 50 is used. |
| 603 | - qcom,cpr-fuse-quot-offset: Array of quadruples in which each quadruple specifies a fuse location to |
| 604 | read in order to get the quotient offset for a fuse corner. The fuse values |
| 605 | are encoded as the difference between quotients of that fuse corner and its |
| 606 | adjacent lower fuse corner divided by an unpacking multiplier value defined |
| 607 | under qcom,cpr-fuse-quot-offset-scale property. |
| 608 | The 4 elements in one quadruple are: |
| 609 | [0]: => the fuse row number of the bits |
| 610 | [1]: => LSB bit position of the bits |
| 611 | [2]: => number of the bits |
| 612 | [3]: => fuse reading method, 0 for direct reading or 1 for SCM reading |
| 613 | The quadruples are ordered from the lowest fuse corner to the highest |
| 614 | fuse corner. |
| 615 | Quotient offset read from the fuse locations above can be overridden with |
| 616 | the property qcom,cpr-quot-adjust-scaling-factor-max. |
| 617 | - qcom,cpr-fuse-quot-offset-scale: Array of integer values which defines the multipliers to decode the quotient offsets |
| 618 | of each fuse corner. The elements in the array are ordered from the lowest voltage fuse corner |
| 619 | to the highest voltage fuse corner. If this property is not present, then all target quotient |
| 620 | parameters are assumed to have a multiplier of 1 (i.e. no decoding needed). |
| 621 | - qcom,cpr-redun-fuse-quot-offset: Array of quadruples in which each quadruple specifies a fuse location to |
| 622 | read in order to get the redundant quotient offset for a fuse corner. This |
| 623 | property is the same as qcom,cpr-fuse-quot-offset except that it is only |
| 624 | utilized if a chip is configured to use the redundant set of fuse values. |
| 625 | - qcom,cpr-fuse-min-quot-diff: Array of values which define the minimum difference allowed between the adjusted |
| 626 | quotients of the fuse corners. The length of the array should be equal to the value |
| 627 | of the qcom,cpr-fuse-corners property. Where each element in the array maps to the |
| 628 | fuse corners in increasing order. |
| 629 | - qcom,cpr-min-quot-diff-adjustment: Array of integer tuples of target quotient offsets to be added to |
| 630 | the adjusted target quotients of each fuse corner. When the quotient difference |
| 631 | between two adjacent fuse corners is insufficient, the quotient for the higher fuse corner is |
| 632 | replaced with that of the lower fuse corner plus the adjustment value. |
| 633 | The elements in a tuple are ordered from lowest voltage corner to highest voltage corner. |
| 634 | Each tuple must be of the length defined by qcom,cpr-fuse-corners. |
| 635 | If the qcom,cpr-fuse-version-map property is specified, then qcom,cpr-min-quot-diff-adjustment |
| 636 | must contain the same number of tuples as qcom,cpr-fuse-version-map. These tuples are then mapped |
| 637 | one-to-one in the order specified. E.g. if the second qcom,cpr-fuse-version-map tuple matches |
| 638 | for a given device, then the quotient adjustments defined in the |
| 639 | second qcom,cpr-min-quot-diff-adjustment tuple will be applied. If the |
| 640 | qcom,cpr-fuse-version-map property is not specified, then |
| 641 | qcom,cpr-min-quot-diff-adjustment must contain a single tuple which is then |
| 642 | applied unconditionally. The qcom,cpr-min-quot-diff-adjustment property must be specified |
| 643 | if the qcom,cpr-fuse-min-quot-diff property is specified. |
| 644 | - qcom,cpr-skip-voltage-change-during-suspend: Boolean property which indicates that the CPR voltage |
| 645 | should not be adjusted based upon the number of online cores while |
| 646 | entering or exiting system suspend. |
| 647 | - rpm-apc-supply: Regulator to notify RPM of the APC operating |
| 648 | corner |
| 649 | - qcom,rpm-apc-corner-map: Array of integers which define the mapping of |
| 650 | the RPM corner to the corresponding APC virtual |
| 651 | corner. This property must be defined if |
| 652 | 'rpm-apc-supply' is present. |
| 653 | - qcom,vsens-corner-map: Array of integers which define the mapping of the VSENS corner to the |
| 654 | corresponding APC fuse corner. The qcom,vsens-corner-map and |
| 655 | vdd-vsense-corner-supply properties must both be specified for a given |
| 656 | cpr-regulator device or neither must be specified. |
| 657 | - vdd-vsens-corner-supply: Regulator to specify the current operating fuse corner to the Voltage Sensor. |
| 658 | - vdd-vsens-voltage-supply: Regulator to specify the corner floor/ceiling voltages to the Voltage Sensor. |
| 659 | - qcom,cpr-aging-sensor-id: Array of CPR sensor IDs to be used in the CPR de-aging algorithm. The number |
| 660 | of values should be equal to number of sensors selected for age calibration. |
| 661 | If this property is not specified, then the de-aging procedure is not enabled. |
| 662 | - qcom,cpr-de-aging-allowed: Integer values that specify whether the CPR de-aging procedure is allowed or |
| 663 | not for a particular fuse revision. If the qcom,cpr-fuse-version-map |
| 664 | property is specified, then qcom,cpr-de-aging-allowed must contain the same number |
| 665 | of elements as there are tuples in qcom,cpr-fuse-version-map. If qcom,cpr-fuse-version-map |
| 666 | is not specified, then qcom,cpr-de-aging-allowed must contain a single value that |
| 667 | is used unconditionally. An element value of 1 means that the CPR de-aging procedure |
| 668 | can be performed for parts with the corresponding fuse revision. An element value of 0 |
| 669 | means that CPR de-aging cannot be performed. |
| 670 | This property is required if the qcom,cpr-aging-sensor-id property has been specified. |
| 671 | - qcom,cpr-aging-ref-corner: The vdd-apc-supply reference virtual voltage corner to be set during the CPR de-aging |
| 672 | measurements. This corner value is needed to set appropriate voltage on |
| 673 | the dependent voltage rails such as vdd-mx and mem-acc. |
| 674 | This property is required if the qcom,cpr-aging-sensor-id property has been specified. |
| 675 | - qcom,cpr-aging-ref-voltage: The vdd-apc-supply reference voltage in microvolts to be set during the |
| 676 | CPR de-aging measurements. |
| 677 | This property is required if the qcom,cpr-aging-sensor-id property has been specified. |
| 678 | - qcom,cpr-max-aging-margin: The maximum allowed aging voltage margin in microvolts. This is used to limit |
| 679 | the calculated aging voltage margin. |
| 680 | This property is required if the qcom,cpr-aging-sensor-id property has been specified. |
| 681 | - qcom,cpr-non-collapsible-sensors: Array of CPR sensor IDs which are in non-collapsible domain. The sensor IDs not |
| 682 | specified in the array should be bypassed for the de-aging procedure. The number of |
| 683 | elements should be less than or equal to 32. The values of the array elements should |
| 684 | be greater than or equal to 0 and less than or equal to 31. |
| 685 | This property is required for power-domains with bypass mux present in HW. |
| 686 | This property can be required if the qcom,cpr-aging-sensor-id property has been specified. |
| 687 | - qcom,cpr-aging-ro-scaling-factor: The aging ring oscillator (RO) scaling factor with units of QUOT/V. |
| 688 | This value is used for calculating a voltage margin from RO measurements. |
| 689 | This property is required if the qcom,cpr-aging-sensor-id property has been specified. |
| 690 | - qcom,cpr-ro-scaling-factor: Array of scaling factors with units of QUOT/V for each ring oscillator ordered |
| 691 | from the lowest to the highest RO. These values are used to calculate |
| 692 | the aging voltage margin adjustment for all of the ROs. Since CPR2 supports |
| 693 | exactly 8 ROs, the array must contain 8 elements corresponding to RO0 through RO7 in order. |
| 694 | If a given RO is unused for a fuse corner, then its scaling factor may be specified as 0. |
| 695 | This property is required if the qcom,cpr-aging-sensor-id property has been specified. |
| 696 | - qcom,cpr-aging-derate: Array of scaling factors which define the amount of derating to apply to the reference |
| 697 | aging voltage margin adjustment for each of the fuse corners. Each element has units |
| 698 | of uV/mV. This property must be of length defined by qcom,cpr-fuse-corners. |
| 699 | The elements are ordered from the lowest to the highest fuse corner. |
| 700 | This property is required if the qcom,cpr-aging-sensor-id property has been specified. |
| 701 | - qcom,cpr-fuse-aging-init-quot-diff: Array of quadruples in which each quadruple specifies a fuse location to read in |
| 702 | order to get an initial quotient difference. The difference between quot min and quot max |
| 703 | is fused as the initial quotient difference. |
| 704 | The 4 elements in one quadruple are: |
| 705 | [0]: => the fuse row number of the bits |
| 706 | [1]: => LSB bit position of the bits |
| 707 | [2]: => number of the bits |
| 708 | [3]: => fuse reading method, 0 for direct reading or 1 for SCM reading |
| 709 | The number of quadruples should be equal to the number of values specified in |
| 710 | the qcom,cpr-aging-sensor-id property. This property is required if |
| 711 | the qcom,cpr-aging-sensor-id property has been specified. |
| 712 | - qcom,cpr-thermal-sensor-id: TSENS hardware sensor-id of the sensor which |
| 713 | needs to be monitored. |
| 714 | - qcom,cpr-disable-temp-threshold: The TSENS temperature threshold in degrees Celsius at which CPR |
| 715 | closed-loop is disabled. CPR closed-loop will stay disabled as long as the |
| 716 | temperature is below this threshold. This property is required |
| 717 | only if 'qcom,cpr-thermal-sensor-id' is present. |
| 718 | - qcom,cpr-enable-temp-threshold: The TSENS temperature threshold in degrees Celsius at which CPR |
| 719 | closed-loop is enabled. CPR closed-loop will stay enabled above this |
| 720 | temperature threshold. This property is required only if |
| 721 | 'qcom,cpr-thermal-sensor-id' is present. |
| 722 | - qcom,disable-closed-loop-in-pc: Bool property to disable closed-loop CPR during |
| 723 | power-collapse. This can be enabled only for single core |
| 724 | designs. The property 'qcom,cpr-cpus' is required to enable this logic. |
| 725 | Example: |
| 726 | apc_vreg_corner: regulator@f9018000 { |
| 727 | status = "okay"; |
| 728 | compatible = "qcom,cpr-regulator"; |
| 729 | reg = <0xf9018000 0x1000>, <0xfc4b8000 0x1000>; |
| 730 | reg-names = "rbcpr", "efuse_addr"; |
| 731 | interrupts = <0 15 0>; |
| 732 | regulator-name = "apc_corner"; |
| 733 | qcom,cpr-fuse-corners = <3>; |
| 734 | regulator-min-microvolt = <1>; |
| 735 | regulator-max-microvolt = <12>; |
| 736 | |
| 737 | qcom,pvs-fuse = <22 6 5 1>; |
| 738 | qcom,pvs-fuse-redun-sel = <22 24 3 2 1>; |
| 739 | qcom,pvs-fuse-redun = <22 27 5 1>; |
| 740 | |
| 741 | qcom,pvs-voltage-table = |
| 742 | <1050000 1150000 1350000>, |
| 743 | <1050000 1150000 1340000>, |
| 744 | <1050000 1150000 1330000>, |
| 745 | <1050000 1150000 1320000>, |
| 746 | <1050000 1150000 1310000>, |
| 747 | <1050000 1150000 1300000>, |
| 748 | <1050000 1150000 1290000>, |
| 749 | <1050000 1150000 1280000>, |
| 750 | <1050000 1150000 1270000>, |
| 751 | <1050000 1140000 1260000>, |
| 752 | <1050000 1130000 1250000>, |
| 753 | <1050000 1120000 1240000>, |
| 754 | <1050000 1110000 1230000>, |
| 755 | <1050000 1100000 1220000>, |
| 756 | <1050000 1090000 1210000>, |
| 757 | <1050000 1080000 1200000>, |
| 758 | <1050000 1070000 1190000>, |
| 759 | <1050000 1060000 1180000>, |
| 760 | <1050000 1050000 1170000>, |
| 761 | <1050000 1050000 1160000>, |
| 762 | <1050000 1050000 1150000>, |
| 763 | <1050000 1050000 1140000>, |
| 764 | <1050000 1050000 1140000>, |
| 765 | <1050000 1050000 1140000>, |
| 766 | <1050000 1050000 1140000>, |
| 767 | <1050000 1050000 1140000>, |
| 768 | <1050000 1050000 1140000>, |
| 769 | <1050000 1050000 1140000>, |
| 770 | <1050000 1050000 1140000>, |
| 771 | <1050000 1050000 1140000>, |
| 772 | <1050000 1050000 1140000>, |
| 773 | <1050000 1050000 1140000>; |
| 774 | qcom,cpr-voltage-ceiling = <1050000 1150000 1280000>; |
| 775 | qcom,cpr-voltage-floor = <1050000 1050000 1100000>; |
| 776 | vdd-apc-supply = <&pm8226_s2>; |
| 777 | vdd-apc-optional-prim-supply = <&ncp6335d>; |
| 778 | vdd-apc-optional-sec-supply = <&fan53555>; |
| 779 | vdd-mx-supply = <&pm8226_l3_ao>; |
| 780 | qcom,vdd-mx-vmax = <1350000>; |
| 781 | qcom,vdd-mx-vmin-method = <1>; |
| 782 | qcom,vdd-apc-step-up-limit = <1>; |
| 783 | qcom,vdd-apc-step-down-limit = <1>; |
| 784 | qcom,cpr-ref-clk = <19200>; |
| 785 | qcom,cpr-timer-delay = <5000>; |
| 786 | qcom,cpr-timer-cons-up = <1>; |
| 787 | qcom,cpr-timer-cons-down = <2>; |
| 788 | qcom,cpr-irq-line = <0>; |
| 789 | qcom,cpr-step-quotient = <15>; |
| 790 | qcom,cpr-up-threshold = <1>; |
| 791 | qcom,cpr-down-threshold = <2>; |
| 792 | qcom,cpr-idle-clocks = <5>; |
| 793 | qcom,cpr-gcnt-time = <1>; |
| 794 | qcom,cpr-clamp-timer-interval = <1>; |
| 795 | qcom,cpr-apc-volt-step = <5000>; |
| 796 | |
| 797 | qcom,vsens-corner-map = <1 2 2>; |
| 798 | vdd-vsens-corner-supply = <&vsens_apc0_corner>; |
| 799 | vdd-vsens-voltage-supply = <&vsens_apc0_voltage>; |
| 800 | |
| 801 | rpm-apc-supply = <&rpm_apc_vreg>; |
| 802 | qcom,rpm-apc-corner-map = <4 4 5 5 7 7 7 7 7 7 7 7>; |
| 803 | |
| 804 | qcom,cpr-fuse-row = <138 1>; |
| 805 | qcom,cpr-fuse-bp-cpr-disable = <36>; |
| 806 | qcom,cpr-fuse-bp-scheme = <37>; |
| 807 | qcom,cpr-fuse-target-quot = <24 12 0>; |
| 808 | qcom,cpr-fuse-target-quot-size = <12 12 12>; |
| 809 | qcom,cpr-fuse-ro-sel = <54 38 41>; |
| 810 | qcom,cpr-fuse-revision = <140 26 2 0>; |
| 811 | qcom,cpr-fuse-redun-sel = <138 57 1 1 1>; |
| 812 | qcom,cpr-fuse-redun-row = <139 1>; |
| 813 | qcom,cpr-fuse-redun-target-quot = <24 12 0>; |
| 814 | qcom,cpr-fuse-redun-ro-sel = <46 36 39>; |
| 815 | qcom,cpr-fuse-cond-min-volt-sel = <54 42 6 7 1>; |
| 816 | qcom,cpr-cond-min-voltage = <1140000>; |
| 817 | qcom,cpr-fuse-uplift-sel = <22 53 1 0 0>; |
| 818 | qcom,cpr-uplift-voltage = <50000>; |
| 819 | qcom,cpr-uplift-quotient = <0 0 120>; |
| 820 | qcom,cpr-uplift-max-volt = <1350000>; |
| 821 | qcom,cpr-uplift-speed-bin = <1>; |
| 822 | qcom,speed-bin-fuse-sel = <22 0 3 0>; |
| 823 | qcom,cpr-corner-map = <1 1 2 2 3 3 3 3 3 3 3 3>; |
| 824 | qcom,cpr-corner-frequency-map = |
| 825 | <1 300000000>, |
| 826 | <2 384000000>, |
| 827 | <3 600000000>, |
| 828 | <4 787200000>, |
| 829 | <5 998400000>, |
| 830 | <6 1094400000>, |
| 831 | <7 1190400000>, |
| 832 | <8 1305600000>, |
| 833 | <9 1344000000>, |
| 834 | <10 1401600000>, |
| 835 | <11 1497600000>, |
| 836 | <12 1593600000>; |
| 837 | qcom,pvs-version-fuse-sel = <22 4 2 0>; |
| 838 | qcom,cpr-speed-bin-max-corners = |
| 839 | <0 1 2 4 7>, |
| 840 | <1 1 2 4 12>, |
| 841 | <2 1 2 4 10>, |
| 842 | <5 1 2 4 14>; |
| 843 | qcom,cpr-fuse-target-quot-scale = |
| 844 | <0 1>, |
| 845 | <0 1>, |
| 846 | <0 1>; |
| 847 | qcom,cpr-quot-adjust-scaling-factor-max = <0 650 650>; |
| 848 | qcom,cpr-fuse-quot-offset = |
| 849 | <138 53 5 0>, |
| 850 | <138 53 5 0>, |
| 851 | <138 48 5 0>, |
| 852 | <138 58 5 0>; |
| 853 | qcom,cpr-fuse-redun-quot-offset = |
| 854 | <200 53 5 0>, |
| 855 | <200 53 5 0>, |
| 856 | <200 48 5 0>, |
| 857 | <200 58 5 0>; |
| 858 | qcom,cpr-fuse-init-voltage = |
| 859 | <27 36 6 0>, |
| 860 | <27 18 6 0>, |
| 861 | <27 0 6 0>; |
| 862 | qcom,cpr-fuse-redun-init-voltage = |
| 863 | <140 36 6 0>, |
| 864 | <140 18 6 0>, |
| 865 | <140 0 6 0>; |
| 866 | qcom,cpr-init-voltage-ref = <1050000 1150000 1280000>; |
| 867 | qcom,cpr-init-voltage-step = <10000>; |
| 868 | qcom,cpr-voltage-ceiling-override = |
| 869 | <1 1 1050000 1050000 1150000 1150000 1280000 |
| 870 | 1280000 1280000 1280000 1280000 1280000 |
| 871 | 1280000 1280000>; |
| 872 | qcom,cpr-voltage-floor-override = |
| 873 | <1 1 1050000 1050000 1050000 1050000 1060000 |
| 874 | 1070000 1080000 1090000 1100000 1100000 |
| 875 | 1100000 1100000>; |
| 876 | qcom,cpr-scaled-init-voltage-as-ceiling; |
| 877 | |
| 878 | qcom,cpr-fuse-version-map = |
| 879 | <0xffffffff 0xffffffff 2 4 4 4>, |
| 880 | <0xffffffff 0xffffffff 2 6 6 6>, |
| 881 | <0xffffffff 0xffffffff 3 4 4 4>; |
| 882 | qcom,cpr-quotient-adjustment = |
| 883 | <0 0 (-210)>, |
| 884 | <0 0 (-60)>, |
| 885 | <0 0 (-94)>; |
| 886 | qcom,cpr-quot-offset-adjustment = |
| 887 | <0 0 (-5)>; |
| 888 | qcom,cpr-init-voltage-adjustment = |
| 889 | <0 0 (-100000)>, |
| 890 | <0 0 (-100000)>, |
| 891 | <0 0 (-45000)>; |
| 892 | qcom,cpr-fuse-min-quot-diff = <0 0 40>; |
| 893 | qcom,cpr-min-quot-diff-adjustment = |
| 894 | <0 0 0>, |
| 895 | <0 0 72>, |
| 896 | <0 0 104>; |
| 897 | qcom,cpr-floor-to-ceiling-max-range = |
| 898 | <(-1) (-1) (-1) (-1) (-1) (-1) (-1) (-1) (-1) (-1) (-1) (-1)>, |
| 899 | <(-1) (-1) (-1) (-1) (-1) (-1) (-1) (-1) (-1) (-1) (-1) (-1)>, |
| 900 | <(-1) (-1) (-1) (-1) (-1) (-1) (-1) 50000 50000 50000 50000 50000>; |
| 901 | qcom,cpr-virtual-corner-init-voltage-adjustment = |
| 902 | <0 0 0 (-10000) 0 0 0 0 0 0 0 0>, |
| 903 | <0 0 0 0 0 0 0 0 0 0 0 (-20000)>, |
| 904 | <0 0 0 0 0 0 0 0 0 0 0 (-30000)>; |
| 905 | qcom,cpr-virtual-corner-quotient-adjustment = |
| 906 | <0 0 0 100 0 0 0 0 0 0 0 0>, |
| 907 | <0 0 0 0 0 0 0 0 0 0 0 (-300)>, |
| 908 | <0 0 0 (-60) 0 0 0 0 0 0 0 0>; |
| 909 | qcom,cpr-cpus = <&CPU0 &CPU1 &CPU2 &CPU3>; |
| 910 | qcom,cpr-online-cpu-virtual-corner-init-voltage-adjustment = |
| 911 | /* 1st fuse version tuple matched */ |
| 912 | <0 0 0 (-10000) (-10000) (-10000) (-15000) (-15000) (-20000) 0 (-20000) (-30000) >, /* 0 CPUs online */ |
| 913 | <0 0 0 (-10000) (-10000) (-10000) (-15000) (-15000) (-20000) 0 (-20000) (-30000) >, /* 1 CPUs online */ |
| 914 | <0 0 0 (-5000) (-5000) (-5000) (-5000) (-5000) (-10000) 0 (-10000) (-10000) >, /* 2 CPUs online */ |
| 915 | <0 0 0 0 0 0 0 0 0 0 0 0>, /* 3 CPUs online */ |
| 916 | <0 0 0 0 0 0 0 0 0 0 0 0>, /* 4 CPUs online */ |
| 917 | /* 2nd fuse version tuple matched */ |
| 918 | <0 0 0 (-10000) (-10000) (-10000) (-15000) (-15000) (-20000) 0 (-20000) (-30000) >, /* 0 CPUs online */ |
| 919 | <0 0 0 (-10000) (-10000) (-10000) (-15000) (-15000) (-20000) 0 (-20000) (-30000) >, /* 1 CPUs online */ |
| 920 | <0 0 0 (-5000) (-5000) (-5000) (-5000) (-5000) (-10000) 0 (-10000) (-10000) >, /* 2 CPUs online */ |
| 921 | <0 0 0 0 0 0 0 0 0 0 0 0>, /* 3 CPUs online */ |
| 922 | <0 0 0 0 0 0 0 0 0 0 0 0>, /* 4 CPUs online */ |
| 923 | /* 3rd fuse version tuple matched */ |
| 924 | <0 0 0 (-10000) (-10000) (-10000) (-15000) (-15000) (-20000) 0 (-20000) (-30000) >, /* 0 CPUs online */ |
| 925 | <0 0 0 (-10000) (-10000) (-10000) (-15000) (-15000) (-20000) 0 (-20000) (-30000) >, /* 1 CPUs online */ |
| 926 | <0 0 0 (-5000) (-5000) (-5000) (-5000) (-5000) (-10000) 0 (-10000) (-10000) >, /* 2 CPUs online */ |
| 927 | <0 0 0 0 0 0 0 0 0 0 0 0>, /* 3 CPUs online */ |
| 928 | <0 0 0 0 0 0 0 0 0 0 0 0>; /* 4 CPUs online */ |
| 929 | qcom,cpr-online-cpu-virtual-corner-quotient-adjustment = |
| 930 | /* 1st fuse version tuple matched */ |
| 931 | <0 0 0 (-6) (-6) (-6) (-9) (-9) (-12) 0 (-12) (-18)>, /* 0 CPUs online */ |
| 932 | <0 0 0 (-6) (-6) (-6) (-9) (-9) (-12) 0 (-12) (-18)>, /* 1 CPUs online */ |
| 933 | <0 0 0 (-3) (-3) (-3) (-3) (-3) (-6) 0 (-6) (-6)>, /* 2 CPUs online */ |
| 934 | <0 0 0 0 0 0 0 0 0 0 0 0>, /* 3 CPUs online */ |
| 935 | <0 0 0 0 0 0 0 0 0 0 0 0>, /* 4 CPUs online */ |
| 936 | /* 2nd fuse version tuple matched */ |
| 937 | <0 0 0 (-6) (-6) (-6) (-9) (-9) (-12) 0 (-12) (-18)>, /* 0 CPUs online */ |
| 938 | <0 0 0 (-6) (-6) (-6) (-9) (-9) (-12) 0 (-12) (-18)>, /* 1 CPUs online */ |
| 939 | <0 0 0 (-3) (-3) (-3) (-3) (-3) (-6) 0 (-6) (-6)>, /* 2 CPUs online */ |
| 940 | <0 0 0 0 0 0 0 0 0 0 0 0>, /* 3 CPUs online */ |
| 941 | <0 0 0 0 0 0 0 0 0 0 0 0>, /* 4 CPUs online */ |
| 942 | /* 3rd fuse version tuple matched */ |
| 943 | <0 0 0 (-21) (-21) (-21) (-32) (-32) (-42) 0 (-42) (-63)>, /* 0 CPUs online */ |
| 944 | <0 0 0 (-21) (-21) (-21) (-32) (-32) (-42) 0 (-42) (-63)>, /* 1 CPUs online */ |
| 945 | <0 0 0 (-11) (-11) (-11) (-11) (-11) (-21) 0 (-21) (-21)>, /* 2 CPUs online */ |
| 946 | <0 0 0 0 0 0 0 0 0 0 0 0>, /* 3 CPUs online */ |
| 947 | <0 0 0 0 0 0 0 0 0 0 0 0>; /* 4 CPUs online */ |
| 948 | qcom,cpr-allowed = |
| 949 | <0>, |
| 950 | <1>, |
| 951 | <1>; |
| 952 | |
| 953 | qcom,fuse-remap-base-row = <1000>; |
| 954 | qcom,fuse-remap-source = |
| 955 | <140 7 3 0>, |
| 956 | <138 45 5 0>; |
| 957 | qcom,cpr-fuse-quot-offset-scale = <5 5 5>; |
| 958 | |
| 959 | qcom,cpr-aging-sensor-id = <17, 18>; |
| 960 | qcom,cpr-aging-ref-corner = <4>; |
| 961 | qcom,cpr-aging-ref-voltage = <1050000>; |
| 962 | qcom,cpr-max-aging-margin = <15000>; |
| 963 | qcom,cpr-de-aging-allowed = |
| 964 | <0>, |
| 965 | <0>, |
| 966 | <1>; |
| 967 | qcom,cpr-non-collapsible-sensors= <7 12 17 22>; |
| 968 | qcom,cpr-aging-ro-scaling-factor = <3500>; |
| 969 | qcom,cpr-ro-scaling-factor = <0 2500 2500 2500 0 0 0 0>; |
| 970 | qcom,cpr-aging-derate = <1000 1000 1250>; |
| 971 | qcom,cpr-fuse-aging-init-quot-diff = |
| 972 | <101 0 8 0>, |
| 973 | <101 8 8 0>; |
| 974 | |
| 975 | qcom,cpr-thermal-sensor-id = <9>; |
| 976 | qcom,cpr-disable-temp-threshold = <5>; |
| 977 | qcom,cpr-enable-temp-threshold = <10>; |
| 978 | }; |