Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d25fbcec authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "ARM: dts: msm: enable CPUSS LDO mode on MSM8996v2 platforms"

parents 60f13c98 1a2fc927
Loading
Loading
Loading
Loading
+205 −129
Original line number Diff line number Diff line
@@ -20,9 +20,10 @@ This document describes the HMSS specific CPR3 bindings.
Required Node Structure
=======================

CPR3 regulators must be described in two levels of devices nodes.  The first
CPR3 regulators must be described in three levels of devices nodes.  The first
level describes the CPR3 controller.  The second level describes one or more
hardware threads managed by the controller.
hardware threads managed by the controller.  The third level describes one or
more logical regulators handled by each CPR thread.

All platform independent cpr3-regulator binding guidelines defined in
cpr3-regulator.txt also apply to cpr3-hmss-regulator devices.
@@ -112,21 +113,28 @@ HMSS specific properties:
	Usage:      optional
	Value type: <phandle>
	Definition: phandle of the regulator device which manages LDO and BHS
		    modes for the clusters per CPR thread. 'N' must match with the
		    hardware thread ID of the thread it controls.
		    modes for the clusters per CPR thread. 'N' must match with
		    the hardware thread ID of the thread it controls.

- qcom,vdd-threadN-ldo-ret-supply
	Usage:      required if qcom,vdd-threadN-ldo-supply is specified for this
		    CPR thread.
	Usage:      required if qcom,vdd-threadN-ldo-supply is specified for
		    this CPR thread.
	Value type: <phandle>
	Definition: phandle of the regulator device which manages LDO retention
		    modes for the clusters per CPR thread. 'N' must match with the
		    hardware thread ID of the thread it controls.
		    modes for the clusters per CPR thread. 'N' must match with
		    the hardware thread ID of the thread it controls.

=================================================
Second Level Nodes - CPR Threads for a Controller
=================================================

HMSS specific properties:
N/A

===============================================
Third Level Nodes - CPR Regulators for a Thread
===============================================

HMSS specific properties:
- qcom,cpr-fuse-corners
	Usage:      required
@@ -149,33 +157,32 @@ HMSS specific properties:
		    supported value is 1.

- qcom,ldo-headroom-voltage
	Usage:      required if qcom,vdd-threadN-ldo-supply is specified for this
		    CPR thread.
	Usage:      required if qcom,vdd-threadN-ldo-supply is specified for the
		    CPR3 thread containing this CPR3 regulator and this CPR3
		    regulator needs to manage the cluster LDO state.
	Value type: <u32>
	Definition: Voltage in microvolts required between the VDD_APCC voltage
		    and the LDO output in order for the LDO to be operational.

- qcom,ldo-adjust-voltage
	Usage:      optional if qcom,vdd-threadN-ldo-supply is specified for this
		    CPR thread.
	Usage:      optional
	Value type: <u32>
	Definition: Voltage in microvolts used to offset margins between PMIC output
		    and CPU.
	Definition: Voltage in microvolts used to offset margins between PMIC
		    output and CPU.

- qcom,ldo-max-voltage
	Usage:      required if qcom,vdd-threadN-ldo-supply is specified for this
		    CPR thread.
	Usage:      required if qcom,ldo-headroom-voltage is specified for this
		    CPR3 regulator.
	Value type: <u32>
	Definition: Voltage in microvolts which represents the maximum physically
		    supported voltage output of the LDO hardware.
	Definition: Voltage in microvolts which represents the maximum
		    physically supported voltage output of the LDO hardware.

- qcom,ldo-disable
	Usage:      optional if qcom,vdd-threadN-ldo-supply is specified for this
		    CPR thread.
	Usage:      optional
	Value type: <empty>
	Definition: Boolean flag which indicates that LDO mode usage is disallowed.
		    If such flag is present, the vdd-threadN-ldo-supply mode will
		    not be modified.
	Definition: Boolean flag which indicates that LDO mode usage is
		    disallowed.  If this flag is present, then the
		    vdd-threadN-ldo-supply mode will not be modified.

- qcom,allow-quotient-interpolation
	Usage:      optional
@@ -184,6 +191,20 @@ HMSS specific properties:
		    interpolated CPR target quotient values.  These values are
		    interpolated between the target quotient Fmax fuse values.

- qcom,cpr-pd-bypass-mask
	Usage:      required
	Value type: <u32>
	Definition: Specifies the power domains associated with this CPR3
		    regulator.  The following bits may be set:
			BIT(0) - Power cluster L2 cache
			BIT(1) - Power cluster core 1
			BIT(2) - Power cluster core 0
			BIT(3) - CBF
			BIT(4) - L3 cache
			BIT(5) - Performance cluster L2 cache
			BIT(6) - Performance cluster core 1
			BIT(7) - Performance cluster core 0

=======
Example
=======
@@ -211,6 +232,7 @@ apcc_cpr: cpr3-ctrl@99e8000 {
	qcom,apm-hysteresis-voltage = <5000>;

	vdd-supply = <&pm8994_s11>;
	qcom,voltage-step = <5000>;
	vdd-limit-supply = <&pm8994_s11_limit>;
	vdd-thread0-ldo-supply = <&kryo0_vreg>;
	vdd-thread1-ldo-supply = <&kryo1_vreg>;
@@ -219,46 +241,48 @@ apcc_cpr: cpr3-ctrl@99e8000 {

	qcom,cpr-enable;
	qcom,cpr-hw-closed-loop;
	qcom,cpr-clock-throttling = <0x20>;

	apc0_vreg: regulator@0 {
	thread@0 {
		qcom,cpr-thread-id = <0>;
		regulator-name = "apc0_corner";
		regulator-min-microvolt = <1>;
		regulator-max-microvolt = <19>;

		qcom,voltage-step = <5000>;

		qcom,cpr-consecutive-up = <0>;
		qcom,cpr-consecutive-down = <2>;
		qcom,cpr-up-threshold = <0>;
		qcom,cpr-down-threshold = <2>;

		apc0_pwrcl_vreg: regulator-pwrcl {
			regulator-name = "apc0_pwrcl_corner";
			regulator-min-microvolt = <1>;
			regulator-max-microvolt = <19>;

			qcom,cpr-pd-bypass-mask = <0x07>;
			qcom,cpr-fuse-corners = <5>;
			qcom,cpr-fuse-combos = <1>;
			qcom,cpr-corners = <19>;

			qcom,ldo-headroom-voltage = <150000>;
		qcom,ldo-max-voltage = <819000>;
			qcom,ldo-max-voltage = <805000>;

			qcom,cpr-corner-fmax-map = <1 2 6 11 19>;

			qcom,cpr-voltage-ceiling =
			<605000  670000  745000  745000  745000  745000
			 905000  905000  905000  905000  905000 1015000
			1015000 1015000 1015000 1015000 1015000 1015000
			1015000>;
				<670000  670000  745000  745000  745000
				 745000  905000  905000  905000  905000
				 905000 1015000 1015000 1015000 1015000
				1015000 1015000 1015000 1015000>;
			qcom,cpr-voltage-floor =
			<520000  545000  625000  625000  625000  625000
			 755000  755000  755000  755000  755000  855000
			 855000  855000  855000  855000  855000  855000
			 855000>;

				<520000  550000  555000  565000  585000
				 615000  635000  655000  690000  720000
				 740000  750000  760000  770000  780000
				 790000  815000  840000  850000>;
			qcom,corner-frequencies =
			<192000000  268800000  300000000  345600000
			 403200000  480000000  576000000  633600000
			 729600000  806400000  883200000  960000000
			1017600000 1113600000 1190400000 1267200000
			1344000000 1420800000 1459200000>;
				<192000000  268800000  307200000
				 345600000  403200000  480000000
				 576000000  633600000  729600000
				 806400000  883200000  960000000
				1017600000 1113600000 1190400000
				1267200000 1344000000 1420800000
				1459200000>;

			qcom,cpr-ro-scaling-factor =
			      <   0    0    0    0 2222 2275 2506 2491
@@ -282,43 +306,94 @@ apcc_cpr: cpr3-ctrl@99e8000 {
			qcom,cpr-scaled-open-loop-voltage-as-ceiling;
		};

	apc1_vreg: regulator@1 {
		qcom,cpr-thread-id = <1>;
		regulator-name = "apc1_corner";
		apc0_cbf_vreg: regulator-cbf {
			regulator-name = "apc0_cbf_corner";
			regulator-min-microvolt = <1>;
		regulator-max-microvolt = <18>;
			regulator-max-microvolt = <10>;

		qcom,voltage-step = <5000>;
			qcom,cpr-pd-bypass-mask = <0x18>;
			qcom,cpr-fuse-corners = <5>;
			qcom,cpr-fuse-combos = <1>;
			qcom,cpr-corners = <10>;

			qcom,cpr-corner-fmax-map = <1 2 5 9 10>;

			qcom,cpr-voltage-ceiling =
			       <605000  670000  745000  745000  745000
				905000  905000  905000  905000 1015000>;
			qcom,cpr-voltage-floor =
			       <520000  545000  565000  595000  635000
				660000  690000  730000  750000  850000>;

			qcom,corner-frequencies =
				<150000000  307200000  384000000
				 499200000  595200000  691200000
				 787200000  883200000  960000000
				1036800000>;

			qcom,cpr-ro-scaling-factor =
			      <   0    0    0    0 2222 2275 2506 2491
			       2649 2640 2886 2866    0    0    0    0>,
			      <   0    0    0    0 2222 2275 2506 2491
			       2649 2640 2886 2866    0    0    0    0>,
			      <   0    0    0    0 2222 2275 2506 2491
			       2649 2640 2886 2866    0    0    0    0>,
			      <   0    0    0    0 2147 2226 2310 2312
			       2450 2447 2603 2600    0    0    0    0>,
			      <   0    0    0    0 1989 2079 2066 2083
			       2193 2201 2283 2296    0    0    0    0>;

			qcom,cpr-open-loop-voltage-fuse-adjustment =
				<0 0 0 0 0>;
			qcom,cpr-closed-loop-voltage-fuse-adjustment =
				<0 0 0 0 0>;

			qcom,allow-voltage-interpolation;
			qcom,allow-quotient-interpolation;
			qcom,cpr-scaled-open-loop-voltage-as-ceiling;
		};
	};

	thread@1 {
		qcom,cpr-thread-id = <1>;
		qcom,cpr-consecutive-up = <0>;
		qcom,cpr-consecutive-down = <2>;
		qcom,cpr-up-threshold = <0>;
		qcom,cpr-down-threshold = <2>;

		apc1_vreg: regulator {
			regulator-name = "apc1_corner";
			regulator-min-microvolt = <1>;
			regulator-max-microvolt = <18>;

			qcom,cpr-pd-bypass-mask = <0xe0>;
			qcom,cpr-fuse-corners = <5>;
			qcom,cpr-fuse-combos = <1>;
			qcom,cpr-corners = <18>;

			qcom,ldo-headroom-voltage = <150000>;
		qcom,ldo-max-voltage = <812000>;
			qcom,ldo-max-voltage = <805000>;

			qcom,cpr-corner-fmax-map = <1 3 5 11 18>;

			qcom,cpr-voltage-ceiling =
			<605000  670000  670000  745000  745000  905000
			 905000  905000  905000  905000  905000 1015000
			1015000 1015000 1015000 1015000 1015000 1015000>;
				<670000  670000  670000  745000  745000
				 905000  905000  905000  905000  905000
				 905000 1015000 1015000 1015000 1015000
				1015000 1015000 1015000>;
			qcom,cpr-voltage-floor =
			<520000  545000  545000  625000  625000  755000
			 755000  755000  755000  755000  755000  855000
			 855000  855000  855000  855000  855000  940000>;
				<520000  530000  545000  590000  620000
				 635000  660000  685000  700000  730000
				 740000  750000  765000  790000  805000
				 815000  830000  850000>;

			qcom,corner-frequencies =
			<300000000  345600000  403200000  480000000
			 576000000  633600000  729600000  806400000
			 883200000  960000000 1017600000 1113600000
			1190400000 1267200000 1344000000 1420800000
			1497600000 1593600000>;
				<307200000  345600000  403200000
				 480000000  576000000  633600000
				 729600000  806400000  883200000
				 960000000 1017600000 1113600000
				1190400000 1267200000 1344000000
				1420800000 1497600000 1593600000>;

			qcom,cpr-ro-scaling-factor =
			      <   0    0    0    0 2212 2273 2517 2506
@@ -342,3 +417,4 @@ apcc_cpr: cpr3-ctrl@99e8000 {
			qcom,cpr-scaled-open-loop-voltage-as-ceiling;
		};
	};
};
+64 −44
Original line number Diff line number Diff line
@@ -11,9 +11,10 @@ This document describes the MMSS specific CPR3 bindings.
Required Node Structure
=======================

CPR3 regulators must be described in two levels of devices nodes.  The first
level describes the CPR3 controller.  The second level describes one or more
hardware threads managed by the controller.
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.
@@ -47,7 +48,14 @@ MMSS specific properties:
Second Level Nodes - CPR Threads for a Controller
=================================================

HMSS specific properties:
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>
@@ -100,8 +108,8 @@ HMSS specific properties:
		    property.

Note that the qcom,cpr-closed-loop-voltage-fuse-adjustment property is not
meaningful for MMSS CPR3 thread nodes since target quotients are not defined in
fuses.
meaningful for MMSS CPR3 regulator nodes since target quotients are not defined
in fuses.

=======
Example
@@ -127,45 +135,56 @@ gfx_cpr: cpr3-ctrl@838000 {
	qcom,cpr-count-mode = <2>;

	vdd-supply = <&pmi8994_s2>;
	qcom,voltage-step = <5000>;

	qcom,cpr-enable;

	gfx_vreg: regulator@0 {
	thread@0 {
		qcom,cpr-thread-id = <0>;
		regulator-name = "gfx_corner";
		regulator-min-microvolt = <1>;
		regulator-max-microvolt = <4>;

		qcom,voltage-step = <5000>;

		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,cpr-voltage-ceiling =
				<670000  745000  905000 1015000>;
			qcom,cpr-voltage-floor =
				<545000  625000  755000  855000>;

			qcom,corner-frequencies =
			<120000000 205000000 360000000 480000000>;
				<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>;
			      <   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>;
			      <   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>;
@@ -176,3 +195,4 @@ gfx_cpr: cpr3-ctrl@838000 {
			qcom,cpr-scaled-open-loop-voltage-as-ceiling;
		};
	};
};
+32 −26
Original line number Diff line number Diff line
@@ -15,9 +15,10 @@ to all CPR3 controllers.
Required Node Structure
=======================

CPR3 regulators must be described in two levels of devices nodes.  The first
CPR3 regulators must be described in three levels of devices nodes.  The first
level describes the CPR3 controller.  The second level describes one or more
hardware threads managed by the controller.
hardware threads managed by the controller.  The third level describes one or
more logical regulators handled by each CPR thread.

====================================
First Level Nodes - CPR3 Controllers
@@ -104,6 +105,12 @@ Platform independent properties:
		    to wait in transitional states.
		    Supported values: 0 - 31.

- qcom,voltage-step
	Usage:      required
	Value type: <u32>
	Definition: The voltage in microvolts of a single step of the VDD supply
		    regulator being controlled by CPR.

- qcom,cpr-step-quot-init-min
	Usage:      required
	Value type: <u32>
@@ -155,29 +162,6 @@ Platform independent properties:
	Definition: Specifies the hardware thread ID of this thread within the
		    CPR controller.

- regulator-name
	Usage:      required
	Value type: <string>
	Definition: Specifies the name for this thread of the CPR controller.

- regulator-min-microvolt
	Usage:      required
	Value type: <u32>
	Definition: Minimum corner value which should be 1 to represent the
		    lowest supported corner.

- regulator-max-microvolt
	Usage:      required
	Value type: <u32>
	Definition: Maximum corner value which should be equal to largest value
		    listed in qcom,cpr-corners.

- qcom,voltage-step
	Usage:      required
	Value type: <u32>
	Definition: The voltage in microvolts of a single step of the VDD supply
		    regulator being controlled by CPR.

- qcom,cpr-consecutive-up
	Usage:      required
	Value type: <u32>
@@ -202,6 +186,28 @@ Platform independent properties:
	Definition: The number CPR error steps required to generate a down
		    event.  Supported values: 0 - 31.

===============================================
Third Level Nodes - CPR Regulators for a Thread
===============================================

Platform independent properties:
- regulator-name
	Usage:      required
	Value type: <string>
	Definition: Specifies the name for this CPR3 regulator.

- regulator-min-microvolt
	Usage:      required
	Value type: <u32>
	Definition: Minimum corner value which should be 1 to represent the
		    lowest supported corner.

- regulator-max-microvolt
	Usage:      required
	Value type: <u32>
	Definition: Maximum corner value which should be equal to largest value
		    listed in qcom,cpr-corners.

- qcom,cpr-fuse-corners
	Usage:      required
	Value type: <u32>
@@ -414,7 +420,7 @@ Platform independent properties:
		    scaling factor in this property.

All properties specified within the core regulator framework can also be used in
second level nodes.  These bindings can be found in:
third level nodes.  These bindings can be found in:
Documentation/devicetree/bindings/regulator/regulator.txt.

See platform specific cpr3-regulator binding documentation files for examples.
Loading