blob: baa0cd2d6f1aa05f5650eaf362994a35ac7d2f3b [file] [log] [blame]
Qualcomm Technologies, Inc. CPR3 Regulator - MMSS Specific Bindings
MMSS CPR3 controllers each support one CPR thread that monitors the voltage of
the graphics processor (MMSS) supply regulator. The CPR open-loop voltages are
stored in hardware fuses for MMSS CPR3 controllers. However, the CPR target
quotients must be defined in device tree.
This document describes the MMSS specific CPR3 bindings.
=======================
Required Node Structure
=======================
CPR3 regulators must be described in three levels of devices nodes. The first
level describes the CPR3 controller. The second level describes exacly one
hardware thread managed by the controller. The third level describes one or
more logical regulators handled by the CPR thread.
All platform independent cpr3-regulator binding guidelines defined in
cpr3-regulator.txt also apply to cpr3-hmss-regulator devices.
====================================
First Level Nodes - CPR3 Controllers
====================================
MMSS specific properties:
- compatible
Usage: required
Value type: <string>
Definition: should be one of the following:
"qcom,cpr3-msm8996-v1-mmss-regulator",
"qcom,cpr3-msm8996-v2-mmss-regulator",
"qcom,cpr3-msm8996-v3-mmss-regulator",
"qcom,cpr3-msm8996-mmss-regulator",
"qcom,cpr3-msm8996pro-mmss-regulator",
"qcom,cpr4-msm8998-v1-mmss-regulator",
"qcom,cpr4-msm8998-v2-mmss-regulator",
"qcom,cpr4-msm8998-mmss-regulator".
If the SoC revision is not specified, then it is assumed to
be the most recent revision (i.e v3 for MSM8996 and v2
for MSM8998).
- clocks
Usage: required
Value type: <prop-encoded-array>
Definition: Array of clock tuples in which each tuple consists of a
phandle to a clock device and a clock ID number. The
following clocks must be specified: MMSS RBCPR, MMSS RBCPR
AHB, and MMSS MMAGIC AHB.
- clock-names
Usage: required
Value type: <stringlist>
Definition: Clock names. This list must match up 1-to-1 with the clocks
specified in the 'clocks' property. "core_clk", "iface_clk",
and "bus_clk" must be specified. Note that "iface_clk" is
not required for devices with compatible =
"qcom,cpr4-msm8998-mmss-regulator".
- qcom,cpr-temp-point-map
Usage: Required if qcom,corner-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). 1 to 3
temperature points should be specified.
- qcom,cpr-initial-temp-band
Usage: Required if qcom,cpr-temp-point-map is specified.
Value type: <u32>
Definition: The initial temp band considering 0-based index at which
the baseline target quotients are derived and fused.
Supported values: 0 to number of elements in
qcom,cpr-temp-point-map.
- qcom,cpr-step-quot-fixed
Usage: Optional for controllers with compatible =
"qcom,cpr4-msm8998-mmss-regulator"; unsupported for
all others.
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.
=================================================
Second Level Nodes - CPR Threads for a Controller
=================================================
MMSS specific properties:
N/A
===============================================
Third Level Nodes - CPR Regulators for a Thread
===============================================
MMSS specific properties:
- qcom,cpr-fuse-corners
Usage: required
Value type: <u32>
Definition: Specifies the number of fuse corners. This value must be 4
for MMSS.
- 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 MMSS the maximum
supported value is 8. These combos correspond to CPR
revision fuse values from 0 to 7 in order.
- qcom,cpr-speed-bins
Usage: optional
Value type: <u32>
Definition: Specifies the number of speed bins 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 MMSS the maximum supported value
is 1.
- qcom,mem-acc-voltage
Usage: required if mem-acc-supply is specified for the CPR3 controller
containing this CPR3 regulator
Value type: <prop-encoded-array>
Definition: A list of integer tuples which each define the mem-acc-supply
corner for each voltage corner in order from lowest to highest.
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-corners property or
the qcom,cpr-speed-bins property. A single tuple may only
be specified if all of the corner counts in qcom,cpr-corners
are the same.
- qcom,cpr-target-quotients
Usage: required
Value type: <prop-encoded-array>
Definition: A grouping of integer tuple lists. Each tuple defines the
CPR target quotient for each ring oscillator (RO) for a
given corner. Since CPR3 supports exactly 16 ROs, each
tuple must contain 16 elements corresponding to RO0 through
RO15 in order. If a given RO is unused for a corner, then
its target quotient should be specified as 0.
Each tuple list in the grouping must meet the same size
requirements as those specified for qcom,mem-acc-voltage
above. The tuples in a given list are ordered from the
lowest corner to the highest corner.
- qcom,cpr-ro-scaling-factor
Usage: required if qcom,cpr-closed-loop-voltage-adjustment is
specified
Value type: <prop-encoded-array>
Definition: The common definition of this property in cpr3-regulator.txt
is accurate for MMSS CPR3 controllers except for this
modification:
Each tuple list must contain the number of tuples defined in
the corresponding element of the qcom,cpr-corners property
or the qcom,cpr-speed-bins property as opposed to the value
of the qcom,cpr-fuse-corners property.
- qcom,cpr-fused-closed-loop-voltage-adjustment-map
Usage: optional
Value type: <prop-encoded-array>
Definition: A list of integer tuples which each define the CPR fused
corner closed-loop offset adjustment fuse to utilize for
each voltage corner in order from lowest to highest.
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-corners property or
the qcom,cpr-speed-bins property. A single tuple may only
be specified if all of the corner counts in qcom,cpr-corners
are the same.
Each tuple element must be either 0 or in the range 1 to
qcom,cpr-fuse-corners. A value of 0 signifies that no fuse
based adjustment should be applied to the fuse corner.
Values 1 to qcom,cpr-fuse-corners denote the specific fuse
corner that should be used by a given voltage corner.
- qcom,corner-allow-temp-adjustment
Usage: Optional for controllers with compatible =
"qcom,cpr4-msm8998-mmss-regulator"; unsupported for
all others.
Value type: <prop-encoded-array>
Definition: A list of integer tuples which each define the CPR
temperature adjustment feature enable state for each voltage
corner in order from lowest to highest. Each element in the
tuple should be either 0 (temperature adjustment not
allowed) or 1 (temperature adjustment allowed).
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-corners property or
the qcom,cpr-speed-bin-corners property. A single tuple may
only be specified if all of the corner counts in
qcom,cpr-corners are the same.
- qcom,cpr-cornerX-temp-core-voltage-adjustment
Usage: Required if qcom,corner-allow-temp-adjustment is specified
for this CPR3 regulator.
Value type: <prop-encoded-array>
Definition: A list of integer tuples for cornerX. The possible values
for X are 1 to the max value specified in qcom,cpr-corners.
Each tuple defines the temperature based voltage adjustment
in microvolts for each temperature band from lowest to
highest. Each tuple must have a number of elements equal to
(the number of elements in qcom,cpr-ctrl-temp-point-map + 1)
The tuple 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 list which is used regardless of the fuse
combination and speed bin found on a given chip.
Note that the qcom,cpr-closed-loop-voltage-fuse-adjustment property is not
meaningful for MMSS CPR3 regulator nodes since target quotients are not defined
in fuses.
=======
Example
=======
gfx_cpr: cpr3-ctrl@838000 {
compatible = "qcom,cpr3-msm8996-mmss-regulator";
reg = <0x00838000 0x4000>, <0x00074000 0x1000>;
reg-names = "cpr_ctrl", "fuse_base";
clocks = <&clock_mmss clk_mmss_rbcpr_clk>,
<&clock_mmss clk_mmss_rbcpr_ahb_clk>,
<&clock_mmss clk_mmss_mmagic_ahb_clk>;
clock-names = "core_clk", "iface_clk", "bus_clk";
interrupts = <0 166 0>;
interrupt-names = "cpr";
qcom,cpr-ctrl-name = "gfx";
qcom,cpr-sensor-time = <1000>;
qcom,cpr-loop-time = <5000000>;
qcom,cpr-idle-cycles = <15>;
qcom,cpr-step-quot-init-min = <13>;
qcom,cpr-step-quot-init-max = <13>;
qcom,cpr-count-mode = <2>;
vdd-supply = <&pmi8994_s2>;
qcom,voltage-step = <5000>;
qcom,cpr-enable;
qcom,cpr-aging-ref-voltage = <905000>;
thread@0 {
qcom,cpr-thread-id = <0>;
qcom,cpr-consecutive-up = <0>;
qcom,cpr-consecutive-down = <2>;
qcom,cpr-up-threshold = <0>;
qcom,cpr-down-threshold = <2>;
gfx_vreg: regulator {
regulator-name = "gfx_corner";
regulator-min-microvolt = <1>;
regulator-max-microvolt = <4>;
qcom,cpr-fuse-corners = <4>;
qcom,cpr-fuse-combos = <1>;
qcom,cpr-corners = <4>;
qcom,cpr-corner-fmax-map = <1 2 3 4>;
qcom,cpr-voltage-ceiling =
<670000 745000 905000 1015000>;
qcom,cpr-voltage-floor =
<545000 625000 755000 855000>;
qcom,mem-acc-voltage = <1 1 2 2>;
qcom,corner-frequencies =
<120000000 205000000 360000000
480000000>;
qcom,cpr-target-quotients =
< 0 0 0 0 249 232 0 394
0 422 0 0 0 0 0 0>,
< 0 0 0 0 400 363 0 565
0 603 0 0 0 0 0 0>,
< 0 0 0 0 669 601 0 851
0 905 0 0 0 0 0 0>,
< 0 0 0 0 899 806 0 1084
0 1149 0 0 0 0 0 0>;
qcom,cpr-ro-scaling-factor =
< 0 0 0 0 2268 2004 0 2408
0 2539 0 0 0 0 0 0>,
< 0 0 0 0 2268 2004 0 2408
0 2539 0 0 0 0 0 0>,
< 0 0 0 0 2268 2004 0 2408
0 2539 0 0 0 0 0 0>,
< 0 0 0 0 2268 2004 0 2408
0 2539 0 0 0 0 0 0>;
qcom,cpr-open-loop-voltage-fuse-adjustment =
<35000 0 0 0>;
qcom,cpr-closed-loop-voltage-adjustment =
<45000 0 0 0>;
qcom,cpr-fused-closed-loop-voltage-adjustment-map =
<2 2 0 4>;
qcom,allow-voltage-interpolation;
qcom,cpr-scaled-open-loop-voltage-as-ceiling;
qcom,cpr-aging-max-voltage-adjustment = <25000>;
qcom,cpr-aging-ref-corner = <3>;
qcom,cpr-aging-ro-scaling-factor = <2950>;
qcom,cpr-aging-derate =
<1000 1000 1000 1000>;
qcom,allow-aging-voltage-adjustment = <1>;
};
};
};