diff mbox

[1/3] : Support cpu frequency scaling and power management for iMX6SL

Message ID CACUGKYN_b0x4xg_Me3TXQGKEvz61SDZk4CFk5YHFnVCWT_6GPg@mail.gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

John Tobias Dec. 17, 2013, 2:37 a.m. UTC
Need some correction:

From: John Tobias <john.tobias.ph@gmail.com>


        };


On Mon, Dec 16, 2013 at 5:40 PM, John Tobias <john.tobias.ph@gmail.com> wrote:
> iMX6SL device tree doesn't have a configuration settings to enable the
> frequency scaling and power management.
>
> From: John Tobias <john.tobias.ph@gmail.com>
>
>
> diff --git a/arch/arm/boot/dts/imx6sl.dtsi b/arch/arm/boot/dts/imx6sl.dtsi
> index 28558f1..0ad2f6a 100644
> --- a/arch/arm/boot/dts/imx6sl.dtsi
> +++ b/arch/arm/boot/dts/imx6sl.dtsi
> @@ -38,6 +38,19 @@
>                         device_type = "cpu";
>                         reg = <0x0>;
>                         next-level-cache = <&L2>;
> +                       operating-points = <
> +                               /* kHz    uV */
> +                               1000000 1275000
> +                               792000  1150000
> +                       >;
> +                       clock-latency = <61036>; /* two CLK32 periods */
> +                       clocks = <&clks IMX6SL_CLK_ARM>, <&clks
> IMX6SL_CLK_PLL2_PFD2>, <&clks IMX6SL_CLK_STEP>,
> +                                <&clks IMX6SL_CLK_PLL1_SW>, <&clks
> IMX6SL_CLK_PLL1_SYS>;
> +                       clock-names = "arm", "pll2_pfd2_396m", "step",
> +                                     "pll1_sw", "pll1_sys";
> +                       arm-supply = <&reg_arm>;
> +                       pu-supply = <&reg_pu>;
> +                       soc-supply = <&reg_soc>;
>                 };
>         };

Comments

John Tobias Dec. 17, 2013, 6:31 p.m. UTC | #1
Guys,

Thanks for your input. I will re-submitting my patches later.

Regards,

john

On Tue, Dec 17, 2013 at 10:30 AM, Markus Niebel <list-09@tqsc.de> wrote:
> Am 17.12.2013 03:37, wrote John Tobias:
>> Need some correction:
>>
>> From: John Tobias <john.tobias.ph@gmail.com>
>>
>>
>> diff --git a/arch/arm/boot/dts/imx6sl.dtsi b/arch/arm/boot/dts/imx6sl.dtsi
>> index 28558f1..6035e7e 100644
>> --- a/arch/arm/boot/dts/imx6sl.dtsi
>> +++ b/arch/arm/boot/dts/imx6sl.dtsi
>> @@ -38,6 +38,21 @@
>>                         device_type = "cpu";
>>                         reg = <0x0>;
>>                         next-level-cache = <&L2>;
>> +                       operating-points = <
>> +                               /* kHz    uV */
>> +                               1000000 1275000
>> +                               996000  1250000
>> +                               792000  1150000
>> +                               396000  950000
>> +                       >;
>> +                       clock-latency = <61036>; /* two CLK32 periods */
>> +                       clocks = <&clks IMX6SL_CLK_ARM>, <&clks
>> IMX6SL_CLK_PLL2_PFD2>, <&clks IMX6SL_CLK_STEP>,
>> +                                <&clks IMX6SL_CLK_PLL1_SW>, <&clks
>> IMX6SL_CLK_PLL1_SYS>;
>> +                       clock-names = "arm", "pll2_pfd2_396m", "step",
>> +                                     "pll1_sw", "pll1_sys";
>> +                       arm-supply = <&reg_arm>;
>> +                       pu-supply = <&reg_pu>;
>> +                       soc-supply = <&reg_soc>;
>>                 };
>>         };
>>
>>
>> On Mon, Dec 16, 2013 at 5:40 PM, John Tobias <john.tobias.ph@gmail.com> wrote:
>>> iMX6SL device tree doesn't have a configuration settings to enable the
>>> frequency scaling and power management.
>>>
>>> From: John Tobias <john.tobias.ph@gmail.com>
>>>
>>>
>>> diff --git a/arch/arm/boot/dts/imx6sl.dtsi b/arch/arm/boot/dts/imx6sl.dtsi
>>> index 28558f1..0ad2f6a 100644
>>> --- a/arch/arm/boot/dts/imx6sl.dtsi
>>> +++ b/arch/arm/boot/dts/imx6sl.dtsi
>>> @@ -38,6 +38,19 @@
>>>                         device_type = "cpu";
>>>                         reg = <0x0>;
>>>                         next-level-cache = <&L2>;
>>> +                       operating-points = <
>>> +                               /* kHz    uV */
>>> +                               1000000 1275000
>>> +                               792000  1150000
>
> according to the CPU documentation the following operation points are suggested (at least AFAIK):
>                                996000  1250000 /* for consumer grade only */
>                                792000  1150000
>                                396000  1050000
> note: AFAIK there is no way to detect at runtime if we  running on industrial / automotive variant
> so there is a risk to run at too high frequency ...
>>> +                       >;
>>> +                       clock-latency = <61036>; /* two CLK32 periods */
>>> +                       clocks = <&clks IMX6SL_CLK_ARM>, <&clks
>>> IMX6SL_CLK_PLL2_PFD2>, <&clks IMX6SL_CLK_STEP>,
>>> +                                <&clks IMX6SL_CLK_PLL1_SW>, <&clks
>>> IMX6SL_CLK_PLL1_SYS>;
>>> +                       clock-names = "arm", "pll2_pfd2_396m", "step",
>>> +                                     "pll1_sw", "pll1_sys";
>>> +                       arm-supply = <&reg_arm>;
>>> +                       pu-supply = <&reg_pu>;
>>> +                       soc-supply = <&reg_soc>;
>>>                 };
>>>         };
>>
>> _______________________________________________
>> linux-arm-kernel mailing list
>> linux-arm-kernel@lists.infradead.org
>> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
>>
>
Shawn Guo Dec. 18, 2013, 2:38 a.m. UTC | #2
On Tue, Dec 17, 2013 at 07:30:46PM +0100, Markus Niebel wrote:
> >> @@ -38,6 +38,19 @@
> >>                         device_type = "cpu";
> >>                         reg = <0x0>;
> >>                         next-level-cache = <&L2>;
> >> +                       operating-points = <
> >> +                               /* kHz    uV */
> >> +                               1000000 1275000
> >> +                               792000  1150000
> 
> according to the CPU documentation the following operation points are suggested (at least AFAIK):
>                                996000  1250000 /* for consumer grade only */
>                                792000  1150000
>                                396000  1050000
> note: AFAIK there is no way to detect at runtime if we  running on industrial / automotive variant
> so there is a risk to run at too high frequency ...

I can only find IMX6SLCEC - i.MX 6SoloLite Applications Processors for
Consumer Products on freescale website.

 http://cache.freescale.com/files/32bit/doc/data_sheet/IMX6SLCEC.pdf?fpsp=1

In that document, I can see the following in Table 9. Operating Ranges.

 LDO output set at 1.250V minimum for operation up to 996MHz
 LDO output set at 1.150V minimum for operation up to 792MHz
 LDO output set at 0.95V minimum for operation up to 396MHz

However, if you access Freescale 3.10 kernel tree, you will see there
are 25mV addition to each operating-point.

	operating-points = <
		/* kHz   uV */
		996000  1275000
		792000  1175000
		396000  975000
	>;

From the commit log, it said this 25mV is added to compensate the output
tolerance from external regulators.

I suggest we follow Freescale kernel to set the operating-points.

Shawn
John Tobias Dec. 18, 2013, 3:03 a.m. UTC | #3
I think that's the right way to do it. Follow the Freescale kernel to
set the operating-points.

On Tue, Dec 17, 2013 at 6:38 PM, Shawn Guo <shawn.guo@linaro.org> wrote:
> On Tue, Dec 17, 2013 at 07:30:46PM +0100, Markus Niebel wrote:
>> >> @@ -38,6 +38,19 @@
>> >>                         device_type = "cpu";
>> >>                         reg = <0x0>;
>> >>                         next-level-cache = <&L2>;
>> >> +                       operating-points = <
>> >> +                               /* kHz    uV */
>> >> +                               1000000 1275000
>> >> +                               792000  1150000
>>
>> according to the CPU documentation the following operation points are suggested (at least AFAIK):
>>                                996000  1250000 /* for consumer grade only */
>>                                792000  1150000
>>                                396000  1050000
>> note: AFAIK there is no way to detect at runtime if we  running on industrial / automotive variant
>> so there is a risk to run at too high frequency ...
>
> I can only find IMX6SLCEC - i.MX 6SoloLite Applications Processors for
> Consumer Products on freescale website.
>
>  http://cache.freescale.com/files/32bit/doc/data_sheet/IMX6SLCEC.pdf?fpsp=1
>
> In that document, I can see the following in Table 9. Operating Ranges.
>
>  LDO output set at 1.250V minimum for operation up to 996MHz
>  LDO output set at 1.150V minimum for operation up to 792MHz
>  LDO output set at 0.95V minimum for operation up to 396MHz
>
> However, if you access Freescale 3.10 kernel tree, you will see there
> are 25mV addition to each operating-point.
>
>         operating-points = <
>                 /* kHz   uV */
>                 996000  1275000
>                 792000  1175000
>                 396000  975000
>         >;
>
> From the commit log, it said this 25mV is added to compensate the output
> tolerance from external regulators.
>
> I suggest we follow Freescale kernel to set the operating-points.
>
> Shawn
>
diff mbox

Patch

diff --git a/arch/arm/boot/dts/imx6sl.dtsi b/arch/arm/boot/dts/imx6sl.dtsi
index 28558f1..6035e7e 100644
--- a/arch/arm/boot/dts/imx6sl.dtsi
+++ b/arch/arm/boot/dts/imx6sl.dtsi
@@ -38,6 +38,21 @@ 
                        device_type = "cpu";
                        reg = <0x0>;
                        next-level-cache = <&L2>;
+                       operating-points = <
+                               /* kHz    uV */
+                               1000000 1275000
+                               996000  1250000
+                               792000  1150000
+                               396000  950000
+                       >;
+                       clock-latency = <61036>; /* two CLK32 periods */
+                       clocks = <&clks IMX6SL_CLK_ARM>, <&clks
IMX6SL_CLK_PLL2_PFD2>, <&clks IMX6SL_CLK_STEP>,
+                                <&clks IMX6SL_CLK_PLL1_SW>, <&clks
IMX6SL_CLK_PLL1_SYS>;
+                       clock-names = "arm", "pll2_pfd2_396m", "step",
+                                     "pll1_sw", "pll1_sys";
+                       arm-supply = <&reg_arm>;
+                       pu-supply = <&reg_pu>;
+                       soc-supply = <&reg_soc>;
                };