Qualcomm Technologies, Inc. CPRh Regulator - KBSS Specific Bindings KBSS CPRh controllers each support one CPR thread that monitors the voltage of a single Kryo-B CPU subystem (KBSS) cluster that is 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 hardware thread managed by the controller. The third level describes one regulator handled by the 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: 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". 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: Definition: The initial temp band considering 0-based index at which the baseline target quotients are derived and fused. ================================================= 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: 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: 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: 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: 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: 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 Value type: 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: 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 Value type: 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: 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: 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>; }; }; }