diff mbox

[v6,15/15] dt-bindings: cpufreq: Document operating-points-v2-krait-cpu

Message ID 1517890108-8140-16-git-send-email-sricharan@codeaurora.org (mailing list archive)
State New, archived
Headers show

Commit Message

Sricharan Ramabadhran Feb. 6, 2018, 4:08 a.m. UTC
In Certain QCOM SoCs like ipq8064, apq8064, msm8960, msm8974
that has KRAIT processors the voltage/current value of each OPP
varies based on the silicon variant in use.
operating-points-v2-krait-cpu specifies the phandle to nvmem efuse cells
and the operating-points-v2 table for each opp. The qcom-cpufreq driver
reads the efuse value from the SoC to provide the required information
that is used to determine the voltage and current value for each OPP of
operating-points-v2 table when it is parsed by the OPP framework.

Signed-off-by: Sricharan R <sricharan@codeaurora.org>
---
 .../devicetree/bindings/cpufreq/krait-cpufreq.txt  | 363 +++++++++++++++++++++
 1 file changed, 363 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/cpufreq/krait-cpufreq.txt

Comments

Viresh Kumar Feb. 6, 2018, 4:27 a.m. UTC | #1
On 06-02-18, 09:38, Sricharan R wrote:
> In Certain QCOM SoCs like ipq8064, apq8064, msm8960, msm8974
> that has KRAIT processors the voltage/current value of each OPP
> varies based on the silicon variant in use.
> operating-points-v2-krait-cpu specifies the phandle to nvmem efuse cells
> and the operating-points-v2 table for each opp. The qcom-cpufreq driver
> reads the efuse value from the SoC to provide the required information
> that is used to determine the voltage and current value for each OPP of
> operating-points-v2 table when it is parsed by the OPP framework.
> 
> Signed-off-by: Sricharan R <sricharan@codeaurora.org>
> ---
>  .../devicetree/bindings/cpufreq/krait-cpufreq.txt  | 363 +++++++++++++++++++++
>  1 file changed, 363 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/cpufreq/krait-cpufreq.txt

You can add my Ack if Rob also finds everything to be fine here.

Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
Sricharan Ramabadhran Feb. 6, 2018, 4:44 a.m. UTC | #2
Hi Viresh,

On 2/6/2018 9:57 AM, Viresh Kumar wrote:
> On 06-02-18, 09:38, Sricharan R wrote:
>> In Certain QCOM SoCs like ipq8064, apq8064, msm8960, msm8974
>> that has KRAIT processors the voltage/current value of each OPP
>> varies based on the silicon variant in use.
>> operating-points-v2-krait-cpu specifies the phandle to nvmem efuse cells
>> and the operating-points-v2 table for each opp. The qcom-cpufreq driver
>> reads the efuse value from the SoC to provide the required information
>> that is used to determine the voltage and current value for each OPP of
>> operating-points-v2 table when it is parsed by the OPP framework.
>>
>> Signed-off-by: Sricharan R <sricharan@codeaurora.org>
>> ---
>>  .../devicetree/bindings/cpufreq/krait-cpufreq.txt  | 363 +++++++++++++++++++++
>>  1 file changed, 363 insertions(+)
>>  create mode 100644 Documentation/devicetree/bindings/cpufreq/krait-cpufreq.txt
> 
> You can add my Ack if Rob also finds everything to be fine here.
> 
> Acked-by: Viresh Kumar <viresh.kumar@linaro.org>

 Thanks !!

Regards,
 Sricharan
Rob Herring (Arm) Feb. 9, 2018, 2:54 a.m. UTC | #3
On Tue, Feb 06, 2018 at 09:38:28AM +0530, Sricharan R wrote:
> In Certain QCOM SoCs like ipq8064, apq8064, msm8960, msm8974
> that has KRAIT processors the voltage/current value of each OPP
> varies based on the silicon variant in use.
> operating-points-v2-krait-cpu specifies the phandle to nvmem efuse cells
> and the operating-points-v2 table for each opp. The qcom-cpufreq driver
> reads the efuse value from the SoC to provide the required information
> that is used to determine the voltage and current value for each OPP of
> operating-points-v2 table when it is parsed by the OPP framework.
> 
> Signed-off-by: Sricharan R <sricharan@codeaurora.org>
> ---
>  .../devicetree/bindings/cpufreq/krait-cpufreq.txt  | 363 +++++++++++++++++++++
>  1 file changed, 363 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/cpufreq/krait-cpufreq.txt
> 
> diff --git a/Documentation/devicetree/bindings/cpufreq/krait-cpufreq.txt b/Documentation/devicetree/bindings/cpufreq/krait-cpufreq.txt
> new file mode 100644
> index 0000000..e7351f7
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/cpufreq/krait-cpufreq.txt
> @@ -0,0 +1,363 @@
> +QCOM KRAIT CPUFreq and OPP bindings
> +===================================
> +
> +In Certain QCOM SoCs like ipq8064, apq8064, msm8960, msm8974
> +that has KRAIT processors the voltage value of each OPP varies
> +based on the silicon variant in use. Qualcomm Process Voltage Scaling Tables
> +defines the voltage and current value based on the speed/pvs/version
> +combination blown in the efuse. The qcom-cpufreq driver reads the efuse
> +value from the SoC to provide the OPP framework with required information.
> +This is used to determine the voltage and current value for each OPP of
> +operating-points-v2 table when it is parsed by the OPP framework.
> +
> +Required properties:
> +--------------------
> +In 'cpus' nodes:
> +- operating-points-v2: Phandle to the operating-points-v2 table to use.
> +
> +In 'operating-points-v2' table:
> +- compatible: Should be
> +	- 'operating-points-v2-krait-cpu' for ipq8064, apq8064, msm8960,
> +					      msm8974.
> +- nvmem-cells: A phandle pointing to a nvmem-cells node representing the
> +		efuse registers that has information about the
> +		speedbin/pvs/version that is used to select the right
> +		voltage/current value pair. Note that the length field of the
> +		nvmem-cell is used to differentiate between format 'A' or 'B'
> +		efuse settings. len of '4' bytes is for format 'A' and '8'
> +		bytes for format 'B'. Please refer the for nvmem-cells
> +		bindings Documentation/devicetree/bindings/nvmem/nvmem.txt
> +		and also examples below for both the cases.
> +Example 1:
> +---------
> +
> +/* For arch/arm/boot/dts/apq8064.dtsi --> format 'A' */
> +cpus {
> +	#address-cells = <1>;
> +	#size-cells = <0>;
> +
> +	CPU0: cpu@0 {
> +		compatible = "qcom,krait";
> +		enable-method = "qcom,kpss-acc-v1";
> +		device_type = "cpu";
> +		reg = <0>;
> +		next-level-cache = <&L2>;
> +		qcom,acc = <&acc0>;
> +		qcom,saw = <&saw0>;
> +		cpu-idle-states = <&CPU_SPC>;
> +		operating-points-v2 = <&cpu_opp_table>;
> +	};
> +};
> +
> +qfprom: qfprom@700000 {
> +	  compatible      = "qcom,qfprom";
> +	  reg	      = <0x00700000 0x1000>;
> +	  #address-cells  = <1>;
> +	  #size-cells     = <1>;
> +	  ranges;
> +	  pvs_efuse: pvs {
> +		reg = <0xc0 0x4>;
> +	};
> +};
> +
> +cpu_opp_table: opp-table {
> +	compatible = "operating-points-v2-krait-cpu";
> +	nvmem-cells = <&pvs_efuse>;
> +
> +		/*
> +		 * Missing opp-shared property means CPUs switch DVFS states
> +		 * independently.
> +		 */
> +
> +	       opp-918000000 {
> +			opp-hz = /bits/ 64 <918000000>;
> +			opp-microvolt-speed0-pvs0-v0 = <1100000>;

Where is this property defined? I'm not that happy with it, but don't 
have a better suggestion. Maybe make pvsN be an array of values with 0 
for any skipped indexes? The '-v0' seems pointless. 

> +			opp-microvolt-speed0-pvs1-v0 = <1050000>;
> +			opp-microvolt-speed0-pvs3-v0 = <1000000>;
> +			opp-microvolt-speed0-pvs4-v0 = <975000>;
> +			opp-microvolt-speed1-pvs0-v0 = <1025000>;
> +			opp-microvolt-speed1-pvs1-v0 = <1000000>;
> +			opp-microvolt-speed1-pvs2-v0 = <950000>;
> +			opp-microvolt-speed1-pvs3-v0 = <925000>;
> +			opp-microvolt-speed1-pvs4-v0 = <900000>;
> +			opp-microvolt-speed1-pvs5-v0 = <900000>;
> +			opp-microvolt-speed1-pvs6-v0 = <900000>;
> +			opp-microvolt-speed2-pvs0-v0 = <975000>;
> +			opp-microvolt-speed2-pvs1-v0 = <950000>;
> +			opp-microvolt-speed2-pvs2-v0 = <925000>;
> +			opp-microvolt-speed2-pvs3-v0 = <912500>;
> +			opp-microvolt-speed2-pvs4-v0 = <900000>;
> +			opp-microvolt-speed2-pvs5-v0 = <900000>;
> +			opp-microvolt-speed2-pvs6-v0 = <900000>;
> +			opp-microvolt-speed14-pvs0-v0 = <1025000>;
> +			opp-microvolt-speed14-pvs1-v0 = <1000000>;
> +			opp-microvolt-speed14-pvs2-v0 = <950000>;
> +			opp-microvolt-speed14-pvs3-v0 = <925000>;
> +			opp-microvolt-speed14-pvs4-v0 = <900000>;
> +			opp-microvolt-speed14-pvs5-v0 = <900000>;
> +			opp-microvolt-speed14-pvs6-v0 = <900000>;
> +		};
> +
> +		opp-810000000 {
> +			opp-hz = /bits/ 64 <810000000>;
> +			opp-microvolt-speed0-pvs0-v0 =  < 1075000>;
> +			opp-microvolt-speed0-pvs1-v0 = 	< 1025000>;
> +			opp-microvolt-speed0-pvs3-v0 = 	< 975000>;
> +			opp-microvolt-speed0-pvs3-v0 = 	< 962500>;
> +			opp-microvolt-speed1-pvs0-v0 = 	< 1000000>;
> +			opp-microvolt-speed1-pvs1-v0 = 	< 975000>;
> +			opp-microvolt-speed1-pvs2-v0 = 	< 937500>;
> +			opp-microvolt-speed1-pvs3-v0 = 	< 900000>;
> +			opp-microvolt-speed1-pvs4-v0 = 	< 887500>;
> +			opp-microvolt-speed1-pvs5-v0 = 	< 887500>;
> +			opp-microvolt-speed1-pvs6-v0 = 	< 887500>;
> +			opp-microvolt-speed2-pvs0-v0 = 	< 962500>;
> +			opp-microvolt-speed2-pvs1-v0 = 	< 937500>;
> +			opp-microvolt-speed2-pvs2-v0 = 	< 912500>;
> +			opp-microvolt-speed2-pvs3-v0 = 	< 900000>;
> +			opp-microvolt-speed2-pvs4-v0 = 	< 887500>;
> +			opp-microvolt-speed2-pvs5-v0 = 	< 887500>;
> +			opp-microvolt-speed2-pvs6-v0 = 	< 887500>;

Some space then tab issues on the above. Also, drop the space after the 
'<'.

> +			opp-microvolt-speed14-pvs0-v0 =	< 1000000>;
> +			opp-microvolt-speed14-pvs1-v0 =	< 975000>;
> +			opp-microvolt-speed14-pvs2-v0 =	< 937500>;
> +			opp-microvolt-speed14-pvs3-v0 =	< 900000>;
> +			opp-microvolt-speed14-pvs4-v0 =	< 887500>;
> +			opp-microvolt-speed14-pvs5-v0 =	< 887500>;
> +			opp-microvolt-speed14-pvs6-v0 =	< 887500>;
> +		};
> +
> +		opp-702000000 {
> +			 opp-hz = /bits/ 64 <702000000>;
> +			 opp-microvolt-speed0-pvs0-v0 =  <1025000>;
> +			 opp-microvolt-speed0-pvs1-v0 =  <975000>;
> +			 opp-microvolt-speed0-pvs3-v0 =  <925000>;
> +			 opp-microvolt-speed0-pvs3-v0 =  <925000>;
> +			 opp-microvolt-speed1-pvs0-v0 =  <962500>;
> +			 opp-microvolt-speed1-pvs1-v0 =  <962500>;
> +			 opp-microvolt-speed1-pvs2-v0 =  <925000>;
> +			 opp-microvolt-speed1-pvs3-v0 =  <900000>;
> +			 opp-microvolt-speed1-pvs4-v0 =  <875000>;
> +			 opp-microvolt-speed1-pvs5-v0 =  <875000>;
> +			 opp-microvolt-speed1-pvs6-v0 =  <875000>;
> +			 opp-microvolt-speed2-pvs0-v0 =  <950000>;
> +			 opp-microvolt-speed2-pvs1-v0 =  <925000>;
> +			 opp-microvolt-speed2-pvs2-v0 =  <900000>;
> +			 opp-microvolt-speed2-pvs3-v0 =  <900000>;
> +			 opp-microvolt-speed2-pvs4-v0 =  <875000>;
> +			 opp-microvolt-speed2-pvs5-v0 =  <875000>;
> +			 opp-microvolt-speed2-pvs6-v0 =  <875000>;
> +			 opp-microvolt-speed14-pvs0-v0 = <962500>;
> +			 opp-microvolt-speed14-pvs1-v0 = <962500>;
> +			 opp-microvolt-speed14-pvs2-v0 = <925000>;
> +			 opp-microvolt-speed14-pvs3-v0 = <900000>;
> +			 opp-microvolt-speed14-pvs4-v0 = <875000>;
> +			 opp-microvolt-speed14-pvs5-v0 = <875000>;
> +			 opp-microvolt-speed14-pvs6-v0 = <875000>;
> +		};
> +
> +		opp-594000000 {
> +			opp-hz = /bits/ 64 <594000000>;
> +			opp-microvolt-speed0-pvs0-v0 =  <1000000>;
> +			opp-microvolt-speed0-pvs1-v0 = 	<950000>;
> +			opp-microvolt-speed0-pvs3-v0 = 	<900000>;
> +			opp-microvolt-speed0-pvs3-v0 = 	<900000>;
> +			opp-microvolt-speed1-pvs0-v0 = 	<950000>;
> +			opp-microvolt-speed1-pvs1-v0 = 	<950000>;
> +			opp-microvolt-speed1-pvs2-v0 = 	<925000>;
> +			opp-microvolt-speed1-pvs3-v0 = 	<900000>;
> +			opp-microvolt-speed1-pvs4-v0 = 	<875000>;
> +			opp-microvolt-speed1-pvs5-v0 = 	<875000>;
> +			opp-microvolt-speed1-pvs6-v0 = 	<875000>;
> +			opp-microvolt-speed2-pvs0-v0 = 	<950000>;
> +			opp-microvolt-speed2-pvs1-v0 = 	<925000>;
> +			opp-microvolt-speed2-pvs2-v0 = 	<900000>;
> +			opp-microvolt-speed2-pvs3-v0 = 	<900000>;
> +			opp-microvolt-speed2-pvs4-v0 = 	<875000>;
> +			opp-microvolt-speed2-pvs5-v0 = 	<875000>;
> +			opp-microvolt-speed2-pvs6-v0 = 	<875000>;

More space then tab issues after the '='.

> +			opp-microvolt-speed14-pvs0-v0 =	<950000>;
> +			opp-microvolt-speed14-pvs1-v0 =	<950000>;
> +			opp-microvolt-speed14-pvs2-v0 =	<925000>;
> +			opp-microvolt-speed14-pvs3-v0 =	<900000>;
> +			opp-microvolt-speed14-pvs4-v0 =	<875000>;
> +			opp-microvolt-speed14-pvs5-v0 =	<875000>;
> +			opp-microvolt-speed14-pvs6-v0 =	<875000>;
> +		};
> +
> +		opp-486000000 {
> +			 opp-hz = /bits/ 64 <486000000>;
> +			 opp-microvolt-speed0-pvs0-v0 = <975000>;
> +			 opp-microvolt-speed0-pvs1-v0 = <925000>;
> +			 opp-microvolt-speed0-pvs3-v0 = <875000>;
> +			 opp-microvolt-speed0-pvs3-v0 = <875000>;
> +			 opp-microvolt-speed1-pvs0-v0 = <950000>;
> +			 opp-microvolt-speed1-pvs1-v0 = <950000>;
> +			 opp-microvolt-speed1-pvs2-v0 = <925000>;
> +			 opp-microvolt-speed1-pvs3-v0 = <900000>;
> +			 opp-microvolt-speed1-pvs4-v0 = <875000>;
> +			 opp-microvolt-speed1-pvs5-v0 = <875000>;
> +			 opp-microvolt-speed1-pvs6-v0 = <875000>;
> +			 opp-microvolt-speed2-pvs0-v0 = <950000>;
> +			 opp-microvolt-speed2-pvs1-v0 = <925000>;
> +			 opp-microvolt-speed2-pvs2-v0 = <900000>;
> +			 opp-microvolt-speed2-pvs3-v0 = <900000>;
> +			 opp-microvolt-speed2-pvs4-v0 = <875000>;
> +			 opp-microvolt-speed2-pvs5-v0 = <875000>;
> +			 opp-microvolt-speed2-pvs6-v0 = <875000>;
> +			 opp-microvolt-speed14-pvs0-v0 = <950000>;
> +			 opp-microvolt-speed14-pvs1-v0 = <950000>;
> +			 opp-microvolt-speed14-pvs2-v0 = <925000>;
> +			 opp-microvolt-speed14-pvs3-v0 = <900000>;
> +			 opp-microvolt-speed14-pvs4-v0 = <875000>;
> +			 opp-microvolt-speed14-pvs5-v0 = <875000>;
> +			 opp-microvolt-speed14-pvs6-v0 = <875000>;
> +		};
> +
> +		opp-384000000 {
> +			opp-hz = /bits/ 64 <384000000>;
> +			opp-microvolt-speed0-pvs0-v0 = <950000>;
> +			opp-microvolt-speed0-pvs1-v0 = <900000>;
> +			opp-microvolt-speed0-pvs3-v0 = <850000>;
> +			opp-microvolt-speed0-pvs3-v0 = <850000>;
> +			opp-microvolt-speed1-pvs0-v0 = <950000>;
> +			opp-microvolt-speed1-pvs1-v0 = <950000>;
> +			opp-microvolt-speed1-pvs2-v0 = <925000>;
> +			opp-microvolt-speed1-pvs3-v0 = <900000>;
> +			opp-microvolt-speed1-pvs4-v0 = <875000>;
> +			opp-microvolt-speed1-pvs5-v0 = <875000>;
> +			opp-microvolt-speed1-pvs6-v0 = <875000>;
> +			opp-microvolt-speed2-pvs0-v0 = <950000>;
> +			opp-microvolt-speed2-pvs1-v0 = <925000>;
> +			opp-microvolt-speed2-pvs2-v0 = <900000>;
> +			opp-microvolt-speed2-pvs3-v0 = <900000>;
> +			opp-microvolt-speed2-pvs4-v0 = <875000>;
> +			opp-microvolt-speed2-pvs5-v0 = <875000>;
> +			opp-microvolt-speed2-pvs6-v0 = <875000>;
> +			opp-microvolt-speed14-pvs0-v0 = <950000>;
> +			opp-microvolt-speed14-pvs1-v0 = <950000>;
> +			opp-microvolt-speed14-pvs2-v0 = <925000>;
> +			opp-microvolt-speed14-pvs3-v0 = <900000>;
> +			opp-microvolt-speed14-pvs4-v0 = <875000>;
> +			opp-microvolt-speed14-pvs5-v0 = <875000>;
> +			opp-microvolt-speed14-pvs6-v0 = <875000>;
> +		};
> +};
> +
> +EXAMPLE 2:
> +---------
> +/* For arch/arm/boot/dts/qcom-msm8974.dtsi--> format 'B' */
> +
> +qfprom: qfprom@700000 {
> +	  compatible      = "qcom,qfprom";
> +	  reg	      = <0x00700000 0x1000>;
> +	  #address-cells  = <1>;
> +	  #size-cells     = <1>;
> +	  ranges;
> +	  pvs_efuse: pvs {
> +		reg = <0xc0 0x8>;
> +	};
> +};
> +
> +cpu_opp_table: opp-table {
> +	compatible = "operating-points-v2-krait-cpu";
> +	nvmem-cells = <&pvs_efuse>;
> +
> +		/*
> +		 * Missing opp-shared property means CPUs switch DVFS states
> +		 * independently.
> +		 */
> +	opp-960000000 {
> +		opp-hz = /bits/ 64 <960000000>;
> +		opp-microvolt-speed0-pvs0-v0 = <915000>;
> +		opp-microvolt-speed0-pvs1-v0 = <895000>;
> +		opp-microvolt-speed0-pvs2-v0 = <875000>;
> +		opp-microvolt-speed0-pvs3-v0 = <860000>;
> +		opp-microvolt-speed0-pvs4-v0 = <850000>;
> +		opp-microvolt-speed0-pvs5-v0 = <840000>;
> +		opp-microvolt-speed0-pvs6-v0 = <830000>;
> +		opp-microvolt-speed2-pvs0-v0 = <875000>;
> +		opp-microvolt-speed2-pvs1-v0 = <860000>;
> +		opp-microvolt-speed2-pvs2-v0 = <845000>;
> +		opp-microvolt-speed2-pvs3-v0 = <830000>;
> +		opp-microvolt-speed2-pvs4-v0 = <820000>;
> +		opp-microvolt-speed2-pvs5-v0 = <810000>;
> +		opp-microvolt-speed2-pvs6-v0 = <800000>;
> +		opp-microvolt-speed1-pvs0-v0 = <840000>;
> +		opp-microvolt-speed1-pvs1-v0 = <825000>;
> +		opp-microvolt-speed1-pvs2-v0 = <810000>;
> +		opp-microvolt-speed1-pvs3-v0 = <795000>;
> +		opp-microvolt-speed1-pvs4-v0 = <785000>;
> +		opp-microvolt-speed1-pvs5-v0 = <775000>;
> +		opp-microvolt-speed1-pvs6-v0 = <765000>;
> +
> +		opp-microamp-speed0-pvs0-v0 = <252>;
> +		opp-microamp-speed0-pvs1-v0 = <252>;
> +		opp-microamp-speed0-pvs2-v0 = <252>;
> +		opp-microamp-speed0-pvs3-v0 = <252>;
> +		opp-microamp-speed0-pvs4-v0 = <252>;
> +		opp-microamp-speed0-pvs5-v0 = <252>;
> +		opp-microamp-speed0-pvs6-v0 = <252>;
> +		opp-microamp-speed2-pvs0-v0 = <245>;
> +		opp-microamp-speed2-pvs1-v0 = <245>;
> +		opp-microamp-speed2-pvs2-v0 = <245>;
> +		opp-microamp-speed2-pvs3-v0 = <245>;
> +		opp-microamp-speed2-pvs4-v0 = <245>;
> +		opp-microamp-speed2-pvs5-v0 = <245>;
> +		opp-microamp-speed2-pvs6-v0 = <245>;
> +		opp-microamp-speed1-pvs0-v0 = <242>;
> +		opp-microamp-speed1-pvs1-v0 = <242>;
> +		opp-microamp-speed1-pvs2-v0 = <242>;
> +		opp-microamp-speed1-pvs3-v0 = <242>;
> +		opp-microamp-speed1-pvs4-v0 = <242>;
> +		opp-microamp-speed1-pvs5-v0 = <242>;
> +		opp-microamp-speed1-pvs6-v0 = <242>;
> +	};
> +
> +	opp-883200000 {
> +		opp-hz = /bits/ 64 <883200000>;
> +		opp-microvolt-speed0-pvs0-v0 = <900000>;
> +		opp-microvolt-speed0-pvs1-v0 = <885000>;
> +		opp-microvolt-speed0-pvs2-v0 = <865000>;
> +		opp-microvolt-speed0-pvs3-v0 = <850000>;
> +		opp-microvolt-speed0-pvs4-v0 = <840000>;
> +		opp-microvolt-speed0-pvs5-v0 = <830000>;
> +		opp-microvolt-speed0-pvs6-v0 = <820000>;
> +		opp-microvolt-speed2-pvs0-v0 = <865000>;
> +		opp-microvolt-speed2-pvs1-v0 = <850000>;
> +		opp-microvolt-speed2-pvs2-v0 = <835000>;
> +		opp-microvolt-speed2-pvs3-v0 = <820000>;
> +		opp-microvolt-speed2-pvs4-v0 = <810000>;
> +		opp-microvolt-speed2-pvs5-v0 = <800000>;
> +		opp-microvolt-speed2-pvs6-v0 = <790000>;
> +		opp-microvolt-speed1-pvs0-v0 = <830000>;
> +		opp-microvolt-speed1-pvs1-v0 = <815000>;
> +		opp-microvolt-speed1-pvs2-v0 = <800000>;
> +		opp-microvolt-speed1-pvs3-v0 = <785000>;
> +		opp-microvolt-speed1-pvs4-v0 = <775000>;
> +		opp-microvolt-speed1-pvs5-v0 = <765000>;
> +		opp-microvolt-speed1-pvs6-v0 = <755000>;
> +
> +		opp-microamp-speed0-pvs0-v0 = <229>;
> +		opp-microamp-speed0-pvs1-v0 = <229>;
> +		opp-microamp-speed0-pvs2-v0 = <229>;
> +		opp-microamp-speed0-pvs3-v0 = <229>;
> +		opp-microamp-speed0-pvs4-v0 = <229>;
> +		opp-microamp-speed0-pvs5-v0 = <229>;
> +		opp-microamp-speed0-pvs6-v0 = <229>;
> +		opp-microamp-speed2-pvs0-v0 = <223>;
> +		opp-microamp-speed2-pvs1-v0 = <223>;
> +		opp-microamp-speed2-pvs2-v0 = <223>;
> +		opp-microamp-speed2-pvs3-v0 = <223>;
> +		opp-microamp-speed2-pvs4-v0 = <223>;
> +		opp-microamp-speed2-pvs5-v0 = <223>;
> +		opp-microamp-speed2-pvs6-v0 = <223>;
> +		opp-microamp-speed1-pvs0-v0 = <221>;
> +		opp-microamp-speed1-pvs1-v0 = <221>;
> +		opp-microamp-speed1-pvs2-v0 = <221>;
> +		opp-microamp-speed1-pvs3-v0 = <221>;
> +		opp-microamp-speed1-pvs4-v0 = <221>;
> +		opp-microamp-speed1-pvs5-v0 = <221>;
> +		opp-microamp-speed1-pvs6-v0 = <221>;
> +	};
> +};
> -- 
> QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation
>
Sricharan Ramabadhran Feb. 9, 2018, 5:31 a.m. UTC | #4
Hi Rob,

On 2/9/2018 8:24 AM, Rob Herring wrote:
> On Tue, Feb 06, 2018 at 09:38:28AM +0530, Sricharan R wrote:
>> In Certain QCOM SoCs like ipq8064, apq8064, msm8960, msm8974
>> that has KRAIT processors the voltage/current value of each OPP
>> varies based on the silicon variant in use.
>> operating-points-v2-krait-cpu specifies the phandle to nvmem efuse cells
>> and the operating-points-v2 table for each opp. The qcom-cpufreq driver
>> reads the efuse value from the SoC to provide the required information
>> that is used to determine the voltage and current value for each OPP of
>> operating-points-v2 table when it is parsed by the OPP framework.
>>
>> Signed-off-by: Sricharan R <sricharan@codeaurora.org>
>> ---
>>  .../devicetree/bindings/cpufreq/krait-cpufreq.txt  | 363 +++++++++++++++++++++
>>  1 file changed, 363 insertions(+)
>>  create mode 100644 Documentation/devicetree/bindings/cpufreq/krait-cpufreq.txt
>>
>> diff --git a/Documentation/devicetree/bindings/cpufreq/krait-cpufreq.txt b/Documentation/devicetree/bindings/cpufreq/krait-cpufreq.txt
>> new file mode 100644
>> index 0000000..e7351f7
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/cpufreq/krait-cpufreq.txt
>> @@ -0,0 +1,363 @@
>> +QCOM KRAIT CPUFreq and OPP bindings
>> +===================================
>> +
>> +In Certain QCOM SoCs like ipq8064, apq8064, msm8960, msm8974
>> +that has KRAIT processors the voltage value of each OPP varies
>> +based on the silicon variant in use. Qualcomm Process Voltage Scaling Tables
>> +defines the voltage and current value based on the speed/pvs/version
>> +combination blown in the efuse. The qcom-cpufreq driver reads the efuse
>> +value from the SoC to provide the OPP framework with required information.
>> +This is used to determine the voltage and current value for each OPP of
>> +operating-points-v2 table when it is parsed by the OPP framework.
>> +
>> +Required properties:
>> +--------------------
>> +In 'cpus' nodes:
>> +- operating-points-v2: Phandle to the operating-points-v2 table to use.
>> +
>> +In 'operating-points-v2' table:
>> +- compatible: Should be
>> +	- 'operating-points-v2-krait-cpu' for ipq8064, apq8064, msm8960,
>> +					      msm8974.
>> +- nvmem-cells: A phandle pointing to a nvmem-cells node representing the
>> +		efuse registers that has information about the
>> +		speedbin/pvs/version that is used to select the right
>> +		voltage/current value pair. Note that the length field of the
>> +		nvmem-cell is used to differentiate between format 'A' or 'B'
>> +		efuse settings. len of '4' bytes is for format 'A' and '8'
>> +		bytes for format 'B'. Please refer the for nvmem-cells
>> +		bindings Documentation/devicetree/bindings/nvmem/nvmem.txt
>> +		and also examples below for both the cases.
>> +Example 1:
>> +---------
>> +
>> +/* For arch/arm/boot/dts/apq8064.dtsi --> format 'A' */
>> +cpus {
>> +	#address-cells = <1>;
>> +	#size-cells = <0>;
>> +
>> +	CPU0: cpu@0 {
>> +		compatible = "qcom,krait";
>> +		enable-method = "qcom,kpss-acc-v1";
>> +		device_type = "cpu";
>> +		reg = <0>;
>> +		next-level-cache = <&L2>;
>> +		qcom,acc = <&acc0>;
>> +		qcom,saw = <&saw0>;
>> +		cpu-idle-states = <&CPU_SPC>;
>> +		operating-points-v2 = <&cpu_opp_table>;
>> +	};
>> +};
>> +
>> +qfprom: qfprom@700000 {
>> +	  compatible      = "qcom,qfprom";
>> +	  reg	      = <0x00700000 0x1000>;
>> +	  #address-cells  = <1>;
>> +	  #size-cells     = <1>;
>> +	  ranges;
>> +	  pvs_efuse: pvs {
>> +		reg = <0xc0 0x4>;
>> +	};
>> +};
>> +
>> +cpu_opp_table: opp-table {
>> +	compatible = "operating-points-v2-krait-cpu";
>> +	nvmem-cells = <&pvs_efuse>;
>> +
>> +		/*
>> +		 * Missing opp-shared property means CPUs switch DVFS states
>> +		 * independently.
>> +		 */
>> +
>> +	       opp-918000000 {
>> +			opp-hz = /bits/ 64 <918000000>;
>> +			opp-microvolt-speed0-pvs0-v0 = <1100000>;
> 
> Where is this property defined? I'm not that happy with it, but don't 
> have a better suggestion. Maybe make pvsN be an array of values with 0 
> for any skipped indexes? The '-v0' seems pointless. 
> 

 'opp-microvolt' is the property that comes from OPP-V2 bindings and rest
  of the string "speed%s-pvs%s-v%s" gets concatenated to the string
  by the cpufreq driver using dev_pm_opp_set_prop_name api. So all
  the three speed,pvs,v (version) come from efuse and can vary.
  Just that in the data so far, v is always '0'.

>> +			opp-microvolt-speed0-pvs1-v0 = <1050000>;
>> +			opp-microvolt-speed0-pvs3-v0 = <1000000>;
>> +			opp-microvolt-speed0-pvs4-v0 = <975000>;
>> +			opp-microvolt-speed1-pvs0-v0 = <1025000>;
>> +			opp-microvolt-speed1-pvs1-v0 = <1000000>;
>> +			opp-microvolt-speed1-pvs2-v0 = <950000>;
>> +			opp-microvolt-speed1-pvs3-v0 = <925000>;
>> +			opp-microvolt-speed1-pvs4-v0 = <900000>;
>> +			opp-microvolt-speed1-pvs5-v0 = <900000>;
>> +			opp-microvolt-speed1-pvs6-v0 = <900000>;
>> +			opp-microvolt-speed2-pvs0-v0 = <975000>;
>> +			opp-microvolt-speed2-pvs1-v0 = <950000>;
>> +			opp-microvolt-speed2-pvs2-v0 = <925000>;
>> +			opp-microvolt-speed2-pvs3-v0 = <912500>;
>> +			opp-microvolt-speed2-pvs4-v0 = <900000>;
>> +			opp-microvolt-speed2-pvs5-v0 = <900000>;
>> +			opp-microvolt-speed2-pvs6-v0 = <900000>;
>> +			opp-microvolt-speed14-pvs0-v0 = <1025000>;
>> +			opp-microvolt-speed14-pvs1-v0 = <1000000>;
>> +			opp-microvolt-speed14-pvs2-v0 = <950000>;
>> +			opp-microvolt-speed14-pvs3-v0 = <925000>;
>> +			opp-microvolt-speed14-pvs4-v0 = <900000>;
>> +			opp-microvolt-speed14-pvs5-v0 = <900000>;
>> +			opp-microvolt-speed14-pvs6-v0 = <900000>;
>> +		};
>> +
>> +		opp-810000000 {
>> +			opp-hz = /bits/ 64 <810000000>;
>> +			opp-microvolt-speed0-pvs0-v0 =  < 1075000>;
>> +			opp-microvolt-speed0-pvs1-v0 = 	< 1025000>;
>> +			opp-microvolt-speed0-pvs3-v0 = 	< 975000>;
>> +			opp-microvolt-speed0-pvs3-v0 = 	< 962500>;
>> +			opp-microvolt-speed1-pvs0-v0 = 	< 1000000>;
>> +			opp-microvolt-speed1-pvs1-v0 = 	< 975000>;
>> +			opp-microvolt-speed1-pvs2-v0 = 	< 937500>;
>> +			opp-microvolt-speed1-pvs3-v0 = 	< 900000>;
>> +			opp-microvolt-speed1-pvs4-v0 = 	< 887500>;
>> +			opp-microvolt-speed1-pvs5-v0 = 	< 887500>;
>> +			opp-microvolt-speed1-pvs6-v0 = 	< 887500>;
>> +			opp-microvolt-speed2-pvs0-v0 = 	< 962500>;
>> +			opp-microvolt-speed2-pvs1-v0 = 	< 937500>;
>> +			opp-microvolt-speed2-pvs2-v0 = 	< 912500>;
>> +			opp-microvolt-speed2-pvs3-v0 = 	< 900000>;
>> +			opp-microvolt-speed2-pvs4-v0 = 	< 887500>;
>> +			opp-microvolt-speed2-pvs5-v0 = 	< 887500>;
>> +			opp-microvolt-speed2-pvs6-v0 = 	< 887500>;
> 
> Some space then tab issues on the above. Also, drop the space after the 
> '<'.

 ok, will fix it.

> 
>> +			opp-microvolt-speed14-pvs0-v0 =	< 1000000>;
>> +			opp-microvolt-speed14-pvs1-v0 =	< 975000>;
>> +			opp-microvolt-speed14-pvs2-v0 =	< 937500>;
>> +			opp-microvolt-speed14-pvs3-v0 =	< 900000>;
>> +			opp-microvolt-speed14-pvs4-v0 =	< 887500>;
>> +			opp-microvolt-speed14-pvs5-v0 =	< 887500>;
>> +			opp-microvolt-speed14-pvs6-v0 =	< 887500>;
>> +		};
>> +
>> +		opp-702000000 {
>> +			 opp-hz = /bits/ 64 <702000000>;
>> +			 opp-microvolt-speed0-pvs0-v0 =  <1025000>;
>> +			 opp-microvolt-speed0-pvs1-v0 =  <975000>;
>> +			 opp-microvolt-speed0-pvs3-v0 =  <925000>;
>> +			 opp-microvolt-speed0-pvs3-v0 =  <925000>;
>> +			 opp-microvolt-speed1-pvs0-v0 =  <962500>;
>> +			 opp-microvolt-speed1-pvs1-v0 =  <962500>;
>> +			 opp-microvolt-speed1-pvs2-v0 =  <925000>;
>> +			 opp-microvolt-speed1-pvs3-v0 =  <900000>;
>> +			 opp-microvolt-speed1-pvs4-v0 =  <875000>;
>> +			 opp-microvolt-speed1-pvs5-v0 =  <875000>;
>> +			 opp-microvolt-speed1-pvs6-v0 =  <875000>;
>> +			 opp-microvolt-speed2-pvs0-v0 =  <950000>;
>> +			 opp-microvolt-speed2-pvs1-v0 =  <925000>;
>> +			 opp-microvolt-speed2-pvs2-v0 =  <900000>;
>> +			 opp-microvolt-speed2-pvs3-v0 =  <900000>;
>> +			 opp-microvolt-speed2-pvs4-v0 =  <875000>;
>> +			 opp-microvolt-speed2-pvs5-v0 =  <875000>;
>> +			 opp-microvolt-speed2-pvs6-v0 =  <875000>;
>> +			 opp-microvolt-speed14-pvs0-v0 = <962500>;
>> +			 opp-microvolt-speed14-pvs1-v0 = <962500>;
>> +			 opp-microvolt-speed14-pvs2-v0 = <925000>;
>> +			 opp-microvolt-speed14-pvs3-v0 = <900000>;
>> +			 opp-microvolt-speed14-pvs4-v0 = <875000>;
>> +			 opp-microvolt-speed14-pvs5-v0 = <875000>;
>> +			 opp-microvolt-speed14-pvs6-v0 = <875000>;
>> +		};
>> +
>> +		opp-594000000 {
>> +			opp-hz = /bits/ 64 <594000000>;
>> +			opp-microvolt-speed0-pvs0-v0 =  <1000000>;
>> +			opp-microvolt-speed0-pvs1-v0 = 	<950000>;
>> +			opp-microvolt-speed0-pvs3-v0 = 	<900000>;
>> +			opp-microvolt-speed0-pvs3-v0 = 	<900000>;
>> +			opp-microvolt-speed1-pvs0-v0 = 	<950000>;
>> +			opp-microvolt-speed1-pvs1-v0 = 	<950000>;
>> +			opp-microvolt-speed1-pvs2-v0 = 	<925000>;
>> +			opp-microvolt-speed1-pvs3-v0 = 	<900000>;
>> +			opp-microvolt-speed1-pvs4-v0 = 	<875000>;
>> +			opp-microvolt-speed1-pvs5-v0 = 	<875000>;
>> +			opp-microvolt-speed1-pvs6-v0 = 	<875000>;
>> +			opp-microvolt-speed2-pvs0-v0 = 	<950000>;
>> +			opp-microvolt-speed2-pvs1-v0 = 	<925000>;
>> +			opp-microvolt-speed2-pvs2-v0 = 	<900000>;
>> +			opp-microvolt-speed2-pvs3-v0 = 	<900000>;
>> +			opp-microvolt-speed2-pvs4-v0 = 	<875000>;
>> +			opp-microvolt-speed2-pvs5-v0 = 	<875000>;
>> +			opp-microvolt-speed2-pvs6-v0 = 	<875000>;
> 
> More space then tab issues after the '='.
> 
 ok, will fix.

Regards,
 Sricharan
diff mbox

Patch

diff --git a/Documentation/devicetree/bindings/cpufreq/krait-cpufreq.txt b/Documentation/devicetree/bindings/cpufreq/krait-cpufreq.txt
new file mode 100644
index 0000000..e7351f7
--- /dev/null
+++ b/Documentation/devicetree/bindings/cpufreq/krait-cpufreq.txt
@@ -0,0 +1,363 @@ 
+QCOM KRAIT CPUFreq and OPP bindings
+===================================
+
+In Certain QCOM SoCs like ipq8064, apq8064, msm8960, msm8974
+that has KRAIT processors the voltage value of each OPP varies
+based on the silicon variant in use. Qualcomm Process Voltage Scaling Tables
+defines the voltage and current value based on the speed/pvs/version
+combination blown in the efuse. The qcom-cpufreq driver reads the efuse
+value from the SoC to provide the OPP framework with required information.
+This is used to determine the voltage and current value for each OPP of
+operating-points-v2 table when it is parsed by the OPP framework.
+
+Required properties:
+--------------------
+In 'cpus' nodes:
+- operating-points-v2: Phandle to the operating-points-v2 table to use.
+
+In 'operating-points-v2' table:
+- compatible: Should be
+	- 'operating-points-v2-krait-cpu' for ipq8064, apq8064, msm8960,
+					      msm8974.
+- nvmem-cells: A phandle pointing to a nvmem-cells node representing the
+		efuse registers that has information about the
+		speedbin/pvs/version that is used to select the right
+		voltage/current value pair. Note that the length field of the
+		nvmem-cell is used to differentiate between format 'A' or 'B'
+		efuse settings. len of '4' bytes is for format 'A' and '8'
+		bytes for format 'B'. Please refer the for nvmem-cells
+		bindings Documentation/devicetree/bindings/nvmem/nvmem.txt
+		and also examples below for both the cases.
+Example 1:
+---------
+
+/* For arch/arm/boot/dts/apq8064.dtsi --> format 'A' */
+cpus {
+	#address-cells = <1>;
+	#size-cells = <0>;
+
+	CPU0: cpu@0 {
+		compatible = "qcom,krait";
+		enable-method = "qcom,kpss-acc-v1";
+		device_type = "cpu";
+		reg = <0>;
+		next-level-cache = <&L2>;
+		qcom,acc = <&acc0>;
+		qcom,saw = <&saw0>;
+		cpu-idle-states = <&CPU_SPC>;
+		operating-points-v2 = <&cpu_opp_table>;
+	};
+};
+
+qfprom: qfprom@700000 {
+	  compatible      = "qcom,qfprom";
+	  reg	      = <0x00700000 0x1000>;
+	  #address-cells  = <1>;
+	  #size-cells     = <1>;
+	  ranges;
+	  pvs_efuse: pvs {
+		reg = <0xc0 0x4>;
+	};
+};
+
+cpu_opp_table: opp-table {
+	compatible = "operating-points-v2-krait-cpu";
+	nvmem-cells = <&pvs_efuse>;
+
+		/*
+		 * Missing opp-shared property means CPUs switch DVFS states
+		 * independently.
+		 */
+
+	       opp-918000000 {
+			opp-hz = /bits/ 64 <918000000>;
+			opp-microvolt-speed0-pvs0-v0 = <1100000>;
+			opp-microvolt-speed0-pvs1-v0 = <1050000>;
+			opp-microvolt-speed0-pvs3-v0 = <1000000>;
+			opp-microvolt-speed0-pvs4-v0 = <975000>;
+			opp-microvolt-speed1-pvs0-v0 = <1025000>;
+			opp-microvolt-speed1-pvs1-v0 = <1000000>;
+			opp-microvolt-speed1-pvs2-v0 = <950000>;
+			opp-microvolt-speed1-pvs3-v0 = <925000>;
+			opp-microvolt-speed1-pvs4-v0 = <900000>;
+			opp-microvolt-speed1-pvs5-v0 = <900000>;
+			opp-microvolt-speed1-pvs6-v0 = <900000>;
+			opp-microvolt-speed2-pvs0-v0 = <975000>;
+			opp-microvolt-speed2-pvs1-v0 = <950000>;
+			opp-microvolt-speed2-pvs2-v0 = <925000>;
+			opp-microvolt-speed2-pvs3-v0 = <912500>;
+			opp-microvolt-speed2-pvs4-v0 = <900000>;
+			opp-microvolt-speed2-pvs5-v0 = <900000>;
+			opp-microvolt-speed2-pvs6-v0 = <900000>;
+			opp-microvolt-speed14-pvs0-v0 = <1025000>;
+			opp-microvolt-speed14-pvs1-v0 = <1000000>;
+			opp-microvolt-speed14-pvs2-v0 = <950000>;
+			opp-microvolt-speed14-pvs3-v0 = <925000>;
+			opp-microvolt-speed14-pvs4-v0 = <900000>;
+			opp-microvolt-speed14-pvs5-v0 = <900000>;
+			opp-microvolt-speed14-pvs6-v0 = <900000>;
+		};
+
+		opp-810000000 {
+			opp-hz = /bits/ 64 <810000000>;
+			opp-microvolt-speed0-pvs0-v0 =  < 1075000>;
+			opp-microvolt-speed0-pvs1-v0 = 	< 1025000>;
+			opp-microvolt-speed0-pvs3-v0 = 	< 975000>;
+			opp-microvolt-speed0-pvs3-v0 = 	< 962500>;
+			opp-microvolt-speed1-pvs0-v0 = 	< 1000000>;
+			opp-microvolt-speed1-pvs1-v0 = 	< 975000>;
+			opp-microvolt-speed1-pvs2-v0 = 	< 937500>;
+			opp-microvolt-speed1-pvs3-v0 = 	< 900000>;
+			opp-microvolt-speed1-pvs4-v0 = 	< 887500>;
+			opp-microvolt-speed1-pvs5-v0 = 	< 887500>;
+			opp-microvolt-speed1-pvs6-v0 = 	< 887500>;
+			opp-microvolt-speed2-pvs0-v0 = 	< 962500>;
+			opp-microvolt-speed2-pvs1-v0 = 	< 937500>;
+			opp-microvolt-speed2-pvs2-v0 = 	< 912500>;
+			opp-microvolt-speed2-pvs3-v0 = 	< 900000>;
+			opp-microvolt-speed2-pvs4-v0 = 	< 887500>;
+			opp-microvolt-speed2-pvs5-v0 = 	< 887500>;
+			opp-microvolt-speed2-pvs6-v0 = 	< 887500>;
+			opp-microvolt-speed14-pvs0-v0 =	< 1000000>;
+			opp-microvolt-speed14-pvs1-v0 =	< 975000>;
+			opp-microvolt-speed14-pvs2-v0 =	< 937500>;
+			opp-microvolt-speed14-pvs3-v0 =	< 900000>;
+			opp-microvolt-speed14-pvs4-v0 =	< 887500>;
+			opp-microvolt-speed14-pvs5-v0 =	< 887500>;
+			opp-microvolt-speed14-pvs6-v0 =	< 887500>;
+		};
+
+		opp-702000000 {
+			 opp-hz = /bits/ 64 <702000000>;
+			 opp-microvolt-speed0-pvs0-v0 =  <1025000>;
+			 opp-microvolt-speed0-pvs1-v0 =  <975000>;
+			 opp-microvolt-speed0-pvs3-v0 =  <925000>;
+			 opp-microvolt-speed0-pvs3-v0 =  <925000>;
+			 opp-microvolt-speed1-pvs0-v0 =  <962500>;
+			 opp-microvolt-speed1-pvs1-v0 =  <962500>;
+			 opp-microvolt-speed1-pvs2-v0 =  <925000>;
+			 opp-microvolt-speed1-pvs3-v0 =  <900000>;
+			 opp-microvolt-speed1-pvs4-v0 =  <875000>;
+			 opp-microvolt-speed1-pvs5-v0 =  <875000>;
+			 opp-microvolt-speed1-pvs6-v0 =  <875000>;
+			 opp-microvolt-speed2-pvs0-v0 =  <950000>;
+			 opp-microvolt-speed2-pvs1-v0 =  <925000>;
+			 opp-microvolt-speed2-pvs2-v0 =  <900000>;
+			 opp-microvolt-speed2-pvs3-v0 =  <900000>;
+			 opp-microvolt-speed2-pvs4-v0 =  <875000>;
+			 opp-microvolt-speed2-pvs5-v0 =  <875000>;
+			 opp-microvolt-speed2-pvs6-v0 =  <875000>;
+			 opp-microvolt-speed14-pvs0-v0 = <962500>;
+			 opp-microvolt-speed14-pvs1-v0 = <962500>;
+			 opp-microvolt-speed14-pvs2-v0 = <925000>;
+			 opp-microvolt-speed14-pvs3-v0 = <900000>;
+			 opp-microvolt-speed14-pvs4-v0 = <875000>;
+			 opp-microvolt-speed14-pvs5-v0 = <875000>;
+			 opp-microvolt-speed14-pvs6-v0 = <875000>;
+		};
+
+		opp-594000000 {
+			opp-hz = /bits/ 64 <594000000>;
+			opp-microvolt-speed0-pvs0-v0 =  <1000000>;
+			opp-microvolt-speed0-pvs1-v0 = 	<950000>;
+			opp-microvolt-speed0-pvs3-v0 = 	<900000>;
+			opp-microvolt-speed0-pvs3-v0 = 	<900000>;
+			opp-microvolt-speed1-pvs0-v0 = 	<950000>;
+			opp-microvolt-speed1-pvs1-v0 = 	<950000>;
+			opp-microvolt-speed1-pvs2-v0 = 	<925000>;
+			opp-microvolt-speed1-pvs3-v0 = 	<900000>;
+			opp-microvolt-speed1-pvs4-v0 = 	<875000>;
+			opp-microvolt-speed1-pvs5-v0 = 	<875000>;
+			opp-microvolt-speed1-pvs6-v0 = 	<875000>;
+			opp-microvolt-speed2-pvs0-v0 = 	<950000>;
+			opp-microvolt-speed2-pvs1-v0 = 	<925000>;
+			opp-microvolt-speed2-pvs2-v0 = 	<900000>;
+			opp-microvolt-speed2-pvs3-v0 = 	<900000>;
+			opp-microvolt-speed2-pvs4-v0 = 	<875000>;
+			opp-microvolt-speed2-pvs5-v0 = 	<875000>;
+			opp-microvolt-speed2-pvs6-v0 = 	<875000>;
+			opp-microvolt-speed14-pvs0-v0 =	<950000>;
+			opp-microvolt-speed14-pvs1-v0 =	<950000>;
+			opp-microvolt-speed14-pvs2-v0 =	<925000>;
+			opp-microvolt-speed14-pvs3-v0 =	<900000>;
+			opp-microvolt-speed14-pvs4-v0 =	<875000>;
+			opp-microvolt-speed14-pvs5-v0 =	<875000>;
+			opp-microvolt-speed14-pvs6-v0 =	<875000>;
+		};
+
+		opp-486000000 {
+			 opp-hz = /bits/ 64 <486000000>;
+			 opp-microvolt-speed0-pvs0-v0 = <975000>;
+			 opp-microvolt-speed0-pvs1-v0 = <925000>;
+			 opp-microvolt-speed0-pvs3-v0 = <875000>;
+			 opp-microvolt-speed0-pvs3-v0 = <875000>;
+			 opp-microvolt-speed1-pvs0-v0 = <950000>;
+			 opp-microvolt-speed1-pvs1-v0 = <950000>;
+			 opp-microvolt-speed1-pvs2-v0 = <925000>;
+			 opp-microvolt-speed1-pvs3-v0 = <900000>;
+			 opp-microvolt-speed1-pvs4-v0 = <875000>;
+			 opp-microvolt-speed1-pvs5-v0 = <875000>;
+			 opp-microvolt-speed1-pvs6-v0 = <875000>;
+			 opp-microvolt-speed2-pvs0-v0 = <950000>;
+			 opp-microvolt-speed2-pvs1-v0 = <925000>;
+			 opp-microvolt-speed2-pvs2-v0 = <900000>;
+			 opp-microvolt-speed2-pvs3-v0 = <900000>;
+			 opp-microvolt-speed2-pvs4-v0 = <875000>;
+			 opp-microvolt-speed2-pvs5-v0 = <875000>;
+			 opp-microvolt-speed2-pvs6-v0 = <875000>;
+			 opp-microvolt-speed14-pvs0-v0 = <950000>;
+			 opp-microvolt-speed14-pvs1-v0 = <950000>;
+			 opp-microvolt-speed14-pvs2-v0 = <925000>;
+			 opp-microvolt-speed14-pvs3-v0 = <900000>;
+			 opp-microvolt-speed14-pvs4-v0 = <875000>;
+			 opp-microvolt-speed14-pvs5-v0 = <875000>;
+			 opp-microvolt-speed14-pvs6-v0 = <875000>;
+		};
+
+		opp-384000000 {
+			opp-hz = /bits/ 64 <384000000>;
+			opp-microvolt-speed0-pvs0-v0 = <950000>;
+			opp-microvolt-speed0-pvs1-v0 = <900000>;
+			opp-microvolt-speed0-pvs3-v0 = <850000>;
+			opp-microvolt-speed0-pvs3-v0 = <850000>;
+			opp-microvolt-speed1-pvs0-v0 = <950000>;
+			opp-microvolt-speed1-pvs1-v0 = <950000>;
+			opp-microvolt-speed1-pvs2-v0 = <925000>;
+			opp-microvolt-speed1-pvs3-v0 = <900000>;
+			opp-microvolt-speed1-pvs4-v0 = <875000>;
+			opp-microvolt-speed1-pvs5-v0 = <875000>;
+			opp-microvolt-speed1-pvs6-v0 = <875000>;
+			opp-microvolt-speed2-pvs0-v0 = <950000>;
+			opp-microvolt-speed2-pvs1-v0 = <925000>;
+			opp-microvolt-speed2-pvs2-v0 = <900000>;
+			opp-microvolt-speed2-pvs3-v0 = <900000>;
+			opp-microvolt-speed2-pvs4-v0 = <875000>;
+			opp-microvolt-speed2-pvs5-v0 = <875000>;
+			opp-microvolt-speed2-pvs6-v0 = <875000>;
+			opp-microvolt-speed14-pvs0-v0 = <950000>;
+			opp-microvolt-speed14-pvs1-v0 = <950000>;
+			opp-microvolt-speed14-pvs2-v0 = <925000>;
+			opp-microvolt-speed14-pvs3-v0 = <900000>;
+			opp-microvolt-speed14-pvs4-v0 = <875000>;
+			opp-microvolt-speed14-pvs5-v0 = <875000>;
+			opp-microvolt-speed14-pvs6-v0 = <875000>;
+		};
+};
+
+EXAMPLE 2:
+---------
+/* For arch/arm/boot/dts/qcom-msm8974.dtsi--> format 'B' */
+
+qfprom: qfprom@700000 {
+	  compatible      = "qcom,qfprom";
+	  reg	      = <0x00700000 0x1000>;
+	  #address-cells  = <1>;
+	  #size-cells     = <1>;
+	  ranges;
+	  pvs_efuse: pvs {
+		reg = <0xc0 0x8>;
+	};
+};
+
+cpu_opp_table: opp-table {
+	compatible = "operating-points-v2-krait-cpu";
+	nvmem-cells = <&pvs_efuse>;
+
+		/*
+		 * Missing opp-shared property means CPUs switch DVFS states
+		 * independently.
+		 */
+	opp-960000000 {
+		opp-hz = /bits/ 64 <960000000>;
+		opp-microvolt-speed0-pvs0-v0 = <915000>;
+		opp-microvolt-speed0-pvs1-v0 = <895000>;
+		opp-microvolt-speed0-pvs2-v0 = <875000>;
+		opp-microvolt-speed0-pvs3-v0 = <860000>;
+		opp-microvolt-speed0-pvs4-v0 = <850000>;
+		opp-microvolt-speed0-pvs5-v0 = <840000>;
+		opp-microvolt-speed0-pvs6-v0 = <830000>;
+		opp-microvolt-speed2-pvs0-v0 = <875000>;
+		opp-microvolt-speed2-pvs1-v0 = <860000>;
+		opp-microvolt-speed2-pvs2-v0 = <845000>;
+		opp-microvolt-speed2-pvs3-v0 = <830000>;
+		opp-microvolt-speed2-pvs4-v0 = <820000>;
+		opp-microvolt-speed2-pvs5-v0 = <810000>;
+		opp-microvolt-speed2-pvs6-v0 = <800000>;
+		opp-microvolt-speed1-pvs0-v0 = <840000>;
+		opp-microvolt-speed1-pvs1-v0 = <825000>;
+		opp-microvolt-speed1-pvs2-v0 = <810000>;
+		opp-microvolt-speed1-pvs3-v0 = <795000>;
+		opp-microvolt-speed1-pvs4-v0 = <785000>;
+		opp-microvolt-speed1-pvs5-v0 = <775000>;
+		opp-microvolt-speed1-pvs6-v0 = <765000>;
+
+		opp-microamp-speed0-pvs0-v0 = <252>;
+		opp-microamp-speed0-pvs1-v0 = <252>;
+		opp-microamp-speed0-pvs2-v0 = <252>;
+		opp-microamp-speed0-pvs3-v0 = <252>;
+		opp-microamp-speed0-pvs4-v0 = <252>;
+		opp-microamp-speed0-pvs5-v0 = <252>;
+		opp-microamp-speed0-pvs6-v0 = <252>;
+		opp-microamp-speed2-pvs0-v0 = <245>;
+		opp-microamp-speed2-pvs1-v0 = <245>;
+		opp-microamp-speed2-pvs2-v0 = <245>;
+		opp-microamp-speed2-pvs3-v0 = <245>;
+		opp-microamp-speed2-pvs4-v0 = <245>;
+		opp-microamp-speed2-pvs5-v0 = <245>;
+		opp-microamp-speed2-pvs6-v0 = <245>;
+		opp-microamp-speed1-pvs0-v0 = <242>;
+		opp-microamp-speed1-pvs1-v0 = <242>;
+		opp-microamp-speed1-pvs2-v0 = <242>;
+		opp-microamp-speed1-pvs3-v0 = <242>;
+		opp-microamp-speed1-pvs4-v0 = <242>;
+		opp-microamp-speed1-pvs5-v0 = <242>;
+		opp-microamp-speed1-pvs6-v0 = <242>;
+	};
+
+	opp-883200000 {
+		opp-hz = /bits/ 64 <883200000>;
+		opp-microvolt-speed0-pvs0-v0 = <900000>;
+		opp-microvolt-speed0-pvs1-v0 = <885000>;
+		opp-microvolt-speed0-pvs2-v0 = <865000>;
+		opp-microvolt-speed0-pvs3-v0 = <850000>;
+		opp-microvolt-speed0-pvs4-v0 = <840000>;
+		opp-microvolt-speed0-pvs5-v0 = <830000>;
+		opp-microvolt-speed0-pvs6-v0 = <820000>;
+		opp-microvolt-speed2-pvs0-v0 = <865000>;
+		opp-microvolt-speed2-pvs1-v0 = <850000>;
+		opp-microvolt-speed2-pvs2-v0 = <835000>;
+		opp-microvolt-speed2-pvs3-v0 = <820000>;
+		opp-microvolt-speed2-pvs4-v0 = <810000>;
+		opp-microvolt-speed2-pvs5-v0 = <800000>;
+		opp-microvolt-speed2-pvs6-v0 = <790000>;
+		opp-microvolt-speed1-pvs0-v0 = <830000>;
+		opp-microvolt-speed1-pvs1-v0 = <815000>;
+		opp-microvolt-speed1-pvs2-v0 = <800000>;
+		opp-microvolt-speed1-pvs3-v0 = <785000>;
+		opp-microvolt-speed1-pvs4-v0 = <775000>;
+		opp-microvolt-speed1-pvs5-v0 = <765000>;
+		opp-microvolt-speed1-pvs6-v0 = <755000>;
+
+		opp-microamp-speed0-pvs0-v0 = <229>;
+		opp-microamp-speed0-pvs1-v0 = <229>;
+		opp-microamp-speed0-pvs2-v0 = <229>;
+		opp-microamp-speed0-pvs3-v0 = <229>;
+		opp-microamp-speed0-pvs4-v0 = <229>;
+		opp-microamp-speed0-pvs5-v0 = <229>;
+		opp-microamp-speed0-pvs6-v0 = <229>;
+		opp-microamp-speed2-pvs0-v0 = <223>;
+		opp-microamp-speed2-pvs1-v0 = <223>;
+		opp-microamp-speed2-pvs2-v0 = <223>;
+		opp-microamp-speed2-pvs3-v0 = <223>;
+		opp-microamp-speed2-pvs4-v0 = <223>;
+		opp-microamp-speed2-pvs5-v0 = <223>;
+		opp-microamp-speed2-pvs6-v0 = <223>;
+		opp-microamp-speed1-pvs0-v0 = <221>;
+		opp-microamp-speed1-pvs1-v0 = <221>;
+		opp-microamp-speed1-pvs2-v0 = <221>;
+		opp-microamp-speed1-pvs3-v0 = <221>;
+		opp-microamp-speed1-pvs4-v0 = <221>;
+		opp-microamp-speed1-pvs5-v0 = <221>;
+		opp-microamp-speed1-pvs6-v0 = <221>;
+	};
+};