| Qualcomm Technologies, Inc. CPRh Regulator - KBSS Specific Bindings |
| |
| KBSS CPRh controllers each support one or more CPR threads that monitor the |
| voltage of Kryo-B CPU subystem (KBSS) clusters that are powered by a single |
| regulator supply. The DCVSh block interacts with the CPRh controller for full |
| hardware DCVS support. |
| |
| Both CPR open-loop voltages and CPR target quotients are stored in hardware |
| fuses for KBSS CPRh controllers. |
| |
| This document describes the KBSS specific CPRh bindings. |
| |
| ======================= |
| Required Node Structure |
| ======================= |
| |
| CPRh regulators must be described in three levels of devices nodes. The first |
| level describes the CPRh controller. The second level describes one or more |
| hardware threads managed by the controller. The third level describes one |
| regulator handled by each CPR thread. |
| |
| All platform independent cpr3-regulator binding guidelines defined in |
| cpr3-regulator.txt also apply to cprh-kbss-regulator devices. |
| |
| ==================================== |
| First Level Nodes - CPR3 Controllers |
| ==================================== |
| |
| KBSS specific properties: |
| - compatible |
| Usage: required |
| Value type: <string> |
| Definition: should be one of the following: |
| "qcom,cprh-msm8998-v1-kbss-regulator", |
| "qcom,cprh-msm8998-v2-kbss-regulator", |
| "qcom,cprh-msm8998-kbss-regulator", |
| "qcom,cprh-sdm660-kbss-regulator", |
| "qcom,cprh-sdm845-v1-kbss-regulator", |
| "qcom,cprh-sdm845-v2-kbss-regulator", |
| "qcom,cprh-sdm845-kbss-regulator". |
| If the SoC revision is not specified, then it is assumed to |
| be the most recent revision of MSM8998, i.e. v2. |
| |
| - qcom,cpr-controller-id |
| Usage: required |
| Value type: <u32> |
| Definition: Identifies the controller number for subsystems that are managed |
| by multiple CPR controllers. For KBSS, the supported values are 0 |
| and 1, corresponding to each cluster. |
| |
| - qcom,apm-threshold-voltage |
| Usage: optional |
| Value type: <u32> |
| Definition: Specifies the APM threshold voltage in microvolts. The |
| floor to ceiling range for every corner is adjusted to ensure |
| it does not intersect this voltage. The value of this property |
| must match with the APM threshold voltage defined in the OSM |
| device to ensure that if the VDD_APCC supply voltage is above |
| this level, then the APM is switched to use VDD_APCC and if |
| VDD_APCC is below this level, then the APM is switched to use |
| VDD_MX. |
| |
| - qcom,apm-crossover-voltage |
| Usage: required if qcom,apm-threshold-voltage is specified |
| Value type: <u32> |
| Definition: Specifies the APM crossover voltage in microvolts which |
| corresponds to the voltage the VDD supply must be set at |
| during an APM switch transition. |
| |
| - qcom,apm-hysteresis-voltage |
| Usage: optional |
| Value type: <u32> |
| Definition: Specifies the voltage in microvolts used to adjust floor |
| voltages with respect to the APM threshold voltage. This |
| voltage is used to reduce the number of corners whose floor |
| must be raised to ensure stable operation with manual APM |
| switching. If this property is not specified, then a value |
| of 0 is assumed. |
| |
| - qcom,mem-acc-threshold-voltage |
| Usage: optional |
| Value type: <u32> |
| Definition: Specifies the highest memory accelerator (MEM ACC) threshold |
| voltage in microvolts. The floor to ceiling voltage range |
| for every corner is adjusted to ensure that it does not |
| intersect this voltage. The value of this property must |
| match with the MEM ACC threshold voltage defined in the OSM |
| device to ensure that MEM ACC settings are switched |
| appropriately. |
| |
| - qcom,mem-acc-crossover-voltage |
| Usage: required if qcom,mem-acc-threshold-voltage is specified |
| Value type: <u32> |
| Definition: Specifies the MEM ACC crossover voltage in microvolts which |
| corresponds to the voltage the VDD supply must be set to |
| when switching the MEM ACC configuration. |
| |
| - qcom,voltage-base |
| Usage: required |
| Value type: <u32> |
| Definition: Specifies the voltage in microvolts used by the CRR controller |
| to resolve open-loop and floor voltages. In particular, this |
| voltage is added to the programmed open-loop and floor voltages |
| and it corresponds to the minimum supported setpoint of the |
| vdd-supply. |
| |
| - qcom,cpr-saw-use-unit-mV |
| Usage: optional |
| Value type: <empty> |
| Definition: Boolean flag which indicates that the unit used in SAW PVC |
| interface is mV. Use this for vdd-supply regulators which |
| do not use PMIC voltage control register LSBs per actually |
| unique PMIC regulator output voltage. |
| |
| - qcom,cpr-up-down-delay-time |
| Usage: required |
| Value type: <u32> |
| Definition: The time to delay in nanoseconds between consecutive CPR |
| measurements when the last measurement recommended |
| increasing or decreasing the vdd-supply voltage. |
| |
| - qcom,cpr-down-error-step-limit |
| Usage: required |
| Value type: <u32> |
| Definition: CPRh hardware closed-loop down error step limit which |
| defines the maximum number of vdd-supply regulator steps |
| that the voltage may be reduced as the result of a single |
| CPR measurement. |
| |
| - qcom,cpr-up-error-step-limit |
| Usage: required |
| Value type: <u32> |
| Definition: CPRh hardware closed-loop up error step limit which defines |
| the maximum number of vdd-supply regulator steps that the |
| voltage may be increased as the result of a single |
| CPR measurement. |
| |
| - qcom,cpr-step-quot-fixed |
| Usage: optional |
| Value type: <u32> |
| Definition: Fixed step quotient value used by controller for applying |
| the SDELTA margin adjustments on the programmed target |
| quotient values. The step quotient is the number of |
| additional ring oscillator ticks observed for each |
| qcom,voltage-step increase in vdd-supply output voltage. |
| Supported values: 0 - 63. |
| |
| - qcom,cpr-voltage-settling-time |
| Usage: optional |
| Value type: <u32> |
| The time in nanoseconds that it takes for the vdd-supply |
| voltage to settle after being increased or decreased by |
| qcom,voltage-step microvolts. This is used as the wait |
| time after applying SDELTA voltage margin adjustments. |
| |
| - qcom,cpr-corner-switch-delay-time |
| Usage: optional |
| Value type: <u32> |
| The time in nanoseconds that the CPR controller must delay |
| to allow voltage settling per 1 mV of voltage change after a |
| corner change. |
| |
| - qcom,cpr-hw-closed-loop |
| Usage: optional |
| Value type: <empty> |
| Definition: Boolean flag which indicates that the KBSS CPRh controller |
| should operate in hardware closed-loop mode as opposed to |
| open-loop. |
| |
| - qcom,cpr-temp-point-map |
| Usage: required if qcom,corner-band-allow-temp-adjustment is specified |
| for at least one of the CPR3 regulators. |
| Value type: <prop-encoded-array> |
| Definition: The temperature points in decidegrees Celsius which indicate |
| the range of temperature bands supported. If t1, t2, and t3 |
| are the temperature points, then the temperature bands are: |
| (-inf, t1], (t1, t2], (t2, t3], and (t3, inf). A maximum of |
| three temperature points can be specified to define a total |
| of four different temperature bands. |
| |
| - qcom,cpr-initial-temp-band |
| Usage: required if qcom,corner-band-allow-temp-adjustment is specified |
| for at least one of the CPR3 regulators. |
| Value type: <u32> |
| Definition: The initial temp band considering 0-based index at which |
| the baseline target quotients are derived and fused. |
| |
| - qcom,cpr-acd-adj-down-step-limit |
| Usage: required if qcom,cpr-acd-avg-enable is specified. |
| Value type: <u32> |
| Definition: The maximum number of PMIC steps to go down within a given |
| corner due to all ACD adjustment recommendations. Valid |
| values are 0 through 31. |
| |
| - qcom,cpr-acd-adj-up-step-limit |
| Usage: required if qcom,cpr-acd-avg-enable is specified. |
| Value type: <u32> |
| Definition: The maximum number of PMIC steps to go up within a given |
| corner due to all ACD adjustment recommendations. Valid |
| values are 0 through 7 |
| |
| - qcom,cpr-acd-adj-down-step-size |
| Usage: required if qcom,cpr-acd-avg-enable is specified. |
| Value type: <u32> |
| Definition: Defines the step size in units of PMIC steps used for |
| target quotient adjustment due to an ACD down recommendation. |
| Valid values are 0 through 3. |
| |
| - qcom,cpr-acd-adj-up-step-size |
| Usage: required if qcom,cpr-acd-avg-enable is specified. |
| Value type: <u32> |
| Definition: Defines the step size in units of PMIC steps used for |
| target quotient adjustment due to an ACD up recommendation. |
| Valid values are 0 through 3. |
| |
| - qcom,cpr-acd-notwait-for-cl-settled |
| Usage: optional; meaningful only if qcom,cpr-acd-avg-enable is specified. |
| Value type: <empty> |
| Definition: Boolean flag which indicates ACD down recommendations do not |
| need to wait for CPR closed-loop to settle. |
| |
| - qcom,cpr-acd-avg-fast-update |
| Usage: optional; meaningful only if qcom,cpr-acd-avg-enable is specified. |
| Value type: <empty> |
| Definition: Boolean flag which indicates CPR should issue immediate |
| voltage updates following ACD requests. |
| |
| - qcom,cpr-acd-avg-enable |
| Usage: optional |
| Value type: <empty> |
| Definition: Boolean flag which indicates that the CPRh controller |
| should enable the ACD AVG feature. |
| |
| ================================================= |
| Second Level Nodes - CPR Threads for a Controller |
| ================================================= |
| |
| KBSS specific properties: |
| N/A |
| |
| =============================================== |
| Third Level Nodes - CPR Regulators for a Thread |
| =============================================== |
| |
| KBSS specific properties: |
| - qcom,cpr-fuse-corners |
| Usage: required |
| Value type: <u32> |
| Definition: Specifies the number of fuse corners. This value must be 4 |
| for KBSS. These fuse corners are: LowSVS, SVS, Nominal, |
| and Turbo. |
| |
| - qcom,cpr-fuse-combos |
| Usage: required |
| Value type: <u32> |
| Definition: Specifies the number of fuse combinations being supported by |
| the device. This value is utilized by several other |
| properties. Supported values are 1 up to the maximum |
| possible for a given regulator type. For KBSS the maximum |
| supported value is 8. These combos correspond to CPR |
| revision fuse values 0 to 7 in order. |
| |
| - qcom,allow-quotient-interpolation |
| Usage: optional |
| Value type: <empty> |
| Definition: Boolean flag which indicates that it is acceptable to use |
| interpolated CPR target quotient values. These values are |
| interpolated between the target quotient Fmax fuse values. |
| |
| - qcom,cpr-corner-bands |
| Usage: required if qcom,corner-band-allow-core-count-adjustment |
| or qcom,corner-band-allow-temp-adjustment is specified |
| for this CPR3 regulator. |
| Value type: <prop-encoded-array> |
| Definition: A list of integers which defines how many corner bands |
| exist for each fuse combination. Supported values are 1 to 4. |
| The list must contain either qcom,cpr-fuse-combos number of |
| elements in which case the corner band counts are applied to |
| fuse combinations 1-to-1 or the list must contain exactly 1 |
| element which is used regardless of the fuse combination |
| found on a given chip. |
| |
| - qcom,cpr-speed-bin-corner-bands |
| Usage: required if qcom,cpr-speed-bins and |
| qcom,corner-band-allow-core-count-adjustment or |
| qcom,corner-band-allow-temp-adjustment are specified for |
| this CPR3 regulator. |
| Value type: <prop-encded-array> |
| Definition: A list of integers which defines how many corner bands |
| are to be used for each speed bin. The list must contain |
| qcom,cpr-speed-bins number of elements. |
| |
| - qcom,corner-band-allow-core-count-adjustment |
| Usage: optional; only allowed for CPRh thread 0 |
| Value type: <prop-encoded-array> |
| Definition: A list of integer tuples which each define the CPR core |
| count adjustment feature enable state for each corner band |
| in order from lowest to highest. Each element in the tuple |
| should be either 0 (per-core-count adjustment not allowed) |
| or 1 (per-core-count adjustment allowed). A maximum of four |
| corner bands may be used to partition the corner space into |
| contiguous corner ranges. For all corners within a corner band, |
| the same per-core-count adjustments are applied. |
| |
| The list must contain qcom,cpr-fuse-combos number of tuples |
| in which case the tuples are matched to fuse combinations |
| 1-to-1 or qcom,cpr-speed-bins number of tuples in which case |
| the tuples are matched to speed bins 1-to-1 or exactly 1 |
| tuple which is used regardless of the fuse combination and |
| speed bin found on a given chip. |
| |
| Each tuple must be of the length defined in the corresponding |
| element of the qcom,cpr-corner-bands property. |
| |
| - qcom,max-core-count |
| Usage: required if qcom,corner-band-allow-core-count-adjustment is |
| specified for this CPR3 regulator. |
| Value type: <u32> |
| Definition: The maximum number of cores considered for core-count vmin |
| adjustments specified for this regulator's corner bands. |
| |
| - qcom,corner-band-allow-temp-adjustment |
| Usage: optional; only allowed for CPRh thread 0 |
| Value type: <prop-encoded-array> |
| Definition: A list of integer tuples which each define the temperature |
| adjustment feature enable state for each corner band |
| in order from lowest to highest. Each element in the tuple |
| should be either 0 (temperature adjustment not allowed) |
| or 1 (temperature adjustment allowed). A maximum of four |
| corner bands may be used to partition the corner space into |
| contiguous corner ranges. For all corners within a corner band, |
| the same temperature adjustments are applied. |
| |
| The list must contain qcom,cpr-fuse-combos number of tuples |
| in which case the tuples are matched to fuse combinations |
| 1-to-1 or qcom,cpr-speed-bins number of tuples in which case |
| the tuples are matched to speed bins 1-to-1 or exactly 1 |
| tuple which is used regardless of the fuse combination and |
| speed bin found on a given chip. |
| |
| Each tuple must be of the length defined in the corresponding |
| element of the qcom,cpr-corner-bands property. |
| |
| - qcom,cpr-corner-band-map |
| Usage: required if qcom,corner-band-allow-core-count-adjustment |
| or qcom,corner-band-allow-temp-adjustment is specified |
| for this CPR3 regulator. |
| Value type: <prop-encoded-array> |
| Definition: A list of integer tuples which correspond to corner numbers |
| and define the corner bands to be used for temperature or |
| per-core-count adjustments. The corner numbers must be specified |
| in increasing order to result in partitioning the corner space |
| into contiguous corner ranges. The supported tuple size is 1 |
| to 4 elements. For example, a tuple with corners defined as |
| c1, c2, c3, c4 results in the following corner band mapping: |
| |
| [c1, c2) -> Corner Band 1 |
| [c2, c3) -> Corner Band 2 |
| [c3, c4) -> Corner Band 3 |
| [c4, inf)-> Corner Band 4 |
| |
| Corners less than c1 will have no per-core-count or temperature |
| adjustments. Adjustments associated with each corner band X are |
| defined in the corresponding |
| qcom,cpr-corner-bandX-temp-core-voltage-adjustment property. |
| |
| The list must contain qcom,cpr-fuse-combos number of tuples |
| in which case the tuples are matched to fuse combinations |
| 1-to-1 or qcom,cpr-speed-bins number of tuples in which case |
| the tuples are matched to speed bins 1-to-1 or exactly 1 |
| tuple which is used regardless of the fuse combination and |
| speed bin found on a given chip. |
| |
| Each tuple must be of the length defined in the corresponding |
| element of the qcom,cpr-corner-bands property. |
| |
| - qcom,cpr-corner-bandX-temp-core-voltage-adjustment |
| Usage: required if qcom,corner-band-allow-core-count-adjustment |
| is specified for this CPR3 regulator. |
| Value type: <prop-encoded-array> |
| Definition: A grouping of integer tuple lists for corner bandX. The possible |
| values for X are 1 to 4. Each tuple defines the temperature based |
| voltage adjustment in microvolts for each temperature band |
| from lowest to highest for a given number of online cores. Each |
| tuple must have a number of elements equal to either (the number |
| of elements in qcom,cpr-temp-point-map + 1), if |
| qcom,cpr-temp-point-map is specified, or 1. |
| |
| Each tuple list must contain a number of tuples equal to |
| either qcom,max-core-count, if qcom,max-core-count is |
| specified, or 1. The tuples should be ordered from lowest |
| to highest core count. |
| |
| The tuple list grouping must contain qcom,cpr-fuse-combos |
| number of tuple lists in which case the lists are matched to |
| fuse combinations 1-to-1 or qcom,cpr-speed-bins number of |
| tuple lists in which case the lists are matched to |
| speed bins 1-to-1 or exactly 1 list which is used regardless |
| of the fuse combination and speed bin found on a given chip. |
| |
| ======= |
| Example |
| ======= |
| |
| apc0_cpr: cprh-ctrl@179c8000 { |
| compatible = "qcom,cprh-msm8998-kbss-regulator"; |
| reg = <0x179c8000 0x4000>, <0x00784000 0x1000>; |
| reg-names = "cpr_ctrl", "fuse_base"; |
| clocks = <&clock_gcc clk_gcc_hmss_rbcpr_clk>; |
| clock-names = "core_clk"; |
| qcom,cpr-ctrl-name = "apc0"; |
| qcom,cpr-controller-id = <0>; |
| |
| qcom,cpr-sensor-time = <1000>; |
| qcom,cpr-loop-time = <5000000>; |
| qcom,cpr-idle-cycles = <15>; |
| qcom,cpr-up-down-delay-time = <3000>; |
| qcom,cpr-step-quot-init-min = <11>; |
| qcom,cpr-step-quot-init-max = <13>; |
| qcom,cpr-count-mode = <2>; /* Staggered */ |
| qcom,cpr-down-error-step-limit = <1>; |
| qcom,cpr-up-error-step-limit = <1>; |
| qcom,cpr-corner-switch-delay-time = <1600>; |
| qcom,cpr-voltage-settling-time = <1600>; |
| |
| qcom,apm-threshold-voltage = <800000>; |
| qcom,apm-hysteresis-voltage = <4000>; |
| qcom,voltage-step = <4000>; |
| qcom,voltage-base = <352000>; |
| qcom,cpr-saw-use-unit-mV; |
| |
| qcom,cpr-enable; |
| qcom,cpr-hw-closed-loop; |
| |
| qcom,cpr-initial-temp-band = <3>; |
| qcom,cpr-temp-point-map = <0 25 85>; |
| |
| thread@0 { |
| qcom,cpr-thread-id = <0>; |
| qcom,cpr-consecutive-up = <2>; |
| qcom,cpr-consecutive-down = <2>; |
| qcom,cpr-up-threshold = <0>; |
| qcom,cpr-down-threshold = <0>; |
| |
| apc0_pwrcl_vreg: regulator-pwrcl { |
| regulator-name = "apc0_pwrcl_corner"; |
| regulator-min-microvolt = <1>; |
| regulator-max-microvolt = <24>; |
| |
| qcom,cpr-fuse-corners = <4>; |
| qcom,cpr-fuse-combos = <1>; |
| qcom,cpr-corners = <23>; |
| |
| qcom,cpr-corner-fmax-map = <7 10 17 23>; |
| |
| qcom,cpr-voltage-ceiling = |
| <632000 632000 632000 632000 632000 |
| 632000 632000 700000 700000 700000 |
| 828000 828000 828000 828000 828000 |
| 828000 828000 1024000 1024000 1024000 |
| 1024000 1024000 1024000>; |
| |
| qcom,cpr-voltage-floor = |
| <572000 572000 572000 572000 572000 |
| 572000 572000 568000 568000 568000 |
| 684000 684000 684000 684000 684000 |
| 684000 684000 856000 856000 856000 |
| 856000 856000 856000>; |
| |
| qcom,corner-frequencies = |
| <300000000 345600000 422400000 |
| 499200000 576000000 633600000 |
| 710400000 806400000 883200000 |
| 960000000 1036800000 1113600000 |
| 1190400000 1248000000 1324800000 |
| 1401600000 1478400000 1497600000 |
| 1574400000 1651200000 1728000000 |
| 1804800000 1881600000>; |
| }; |
| |
| qcom,cpr-corner-bands = <4>; |
| qcom,corner-band-allow-core-count-adjustment = <1 1 1 1>; |
| qcom,corner-band-allow-temp-adjustment = <1 0 0 0>; |
| qcom,cpr-corner-band-map = <7 14 18 20>; |
| qcom,max-core-count = <4>; |
| qcom,cpr-corner-band1-temp-core-voltage-adjustment = |
| <(-24000) (-20000) (-20000) (-16000)>, |
| <(-16000) (-16000) (-12000) (-8000)>, |
| <(-8000) (-8000) (-4000) (-4000)>, |
| <0 0 0 0>; |
| qcom,cpr-corner-band2-temp-core-voltage-adjustment = |
| <(-36000) 0 0 0>, |
| <(-32000) 0 0 0>, |
| <(-24000) 0 0 0>, |
| < 0 0 0 0>; |
| qcom,cpr-corner-band3-temp-core-voltage-adjustment = |
| <(-40000) 0 0 0>, |
| <(-36000) 0 0 0>, |
| <(-32000) 0 0 0>, |
| < 0 0 0 0>; |
| qcom,cpr-corner-band4-temp-core-voltage-adjustment = |
| <(-44000) 0 0 0>, |
| <(-32000) 0 0 0>, |
| <(-24000) 0 0 0>, |
| < 0 0 0 0>; |
| }; |
| }; |
| } |