* [PATCH] ARM: OMAP2+: voltage: ensure voltage used is exact voltage from OPP table
@ 2012-03-02 22:42 Kevin Hilman
2012-03-05 9:41 ` Tero Kristo
0 siblings, 1 reply; 4+ messages in thread
From: Kevin Hilman @ 2012-03-02 22:42 UTC (permalink / raw)
To: linux-arm-kernel
When using the SMPS regulators to scale voltages, the regulator
framework may pass a minimum voltage that is not an exact OPP voltage.
For the VC/VP controlled voltage domains, we must ensure that the
voltage requested is the exact voltage from the OPP table. This is
especially critical when using SR.
To fix, voltdm_scale() uses the target voltage passed to walk through
the OPP voltages until it finds a voltage that is >= one of the OPP
voltages.
Cc: Tero Kristo <t-kristo@ti.com>
Cc: Nishanth Menon <nm@ti.com>
Signed-off-by: Kevin Hilman <khilman@ti.com>
---
Unless there are any objections, this will be queued along with the
rest of the SMPS regulator series from Tero. Currently availble in
my for_3.4/pm/smps-regulator branch at
git://git.kernel.org/pub/scm/linux/kernel/git/khilman/linux-omap-pm.git
arch/arm/mach-omap2/voltage.c | 21 ++++++++++++++++++---
1 file changed, 18 insertions(+), 3 deletions(-)
diff --git a/arch/arm/mach-omap2/voltage.c b/arch/arm/mach-omap2/voltage.c
index 8a36342..4dc60e8 100644
--- a/arch/arm/mach-omap2/voltage.c
+++ b/arch/arm/mach-omap2/voltage.c
@@ -73,7 +73,8 @@ unsigned long voltdm_get_voltage(struct voltagedomain *voltdm)
int voltdm_scale(struct voltagedomain *voltdm,
unsigned long target_volt)
{
- int ret;
+ int ret, i;
+ unsigned long volt = 0;
if (!voltdm || IS_ERR(voltdm)) {
pr_warning("%s: VDD specified does not exist!\n", __func__);
@@ -86,9 +87,23 @@ int voltdm_scale(struct voltagedomain *voltdm,
return -ENODATA;
}
- ret = voltdm->scale(voltdm, target_volt);
+ /* Adjust voltage to the exact voltage from the OPP table */
+ for (i = 0; voltdm->volt_data[i].volt_nominal != 0; i++) {
+ if (voltdm->volt_data[i].volt_nominal >= target_volt) {
+ volt = voltdm->volt_data[i].volt_nominal;
+ break;
+ }
+ }
+
+ if (!volt) {
+ pr_warning("%s: not scaling. OPP voltage for %lu, not found.\n",
+ __func__, target_volt);
+ return -EINVAL;
+ }
+
+ ret = voltdm->scale(voltdm, volt);
if (!ret)
- voltdm->nominal_volt = target_volt;
+ voltdm->nominal_volt = volt;
return ret;
}
--
1.7.9.2
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH] ARM: OMAP2+: voltage: ensure voltage used is exact voltage from OPP table
2012-03-02 22:42 [PATCH] ARM: OMAP2+: voltage: ensure voltage used is exact voltage from OPP table Kevin Hilman
@ 2012-03-05 9:41 ` Tero Kristo
2012-03-05 18:12 ` Kevin Hilman
0 siblings, 1 reply; 4+ messages in thread
From: Tero Kristo @ 2012-03-05 9:41 UTC (permalink / raw)
To: linux-arm-kernel
On Fri, 2012-03-02 at 14:42 -0800, Kevin Hilman wrote:
> When using the SMPS regulators to scale voltages, the regulator
> framework may pass a minimum voltage that is not an exact OPP voltage.
> For the VC/VP controlled voltage domains, we must ensure that the
> voltage requested is the exact voltage from the OPP table. This is
> especially critical when using SR.
>
> To fix, voltdm_scale() uses the target voltage passed to walk through
> the OPP voltages until it finds a voltage that is >= one of the OPP
> voltages.
I have just one question to this, how about smartreflex class1p5? Do we
have any plans for that one? The old implementation at least was using
voltdm_scale, so if we modify this function, smartreflex class1p5
doesn't work anymore.
Otherwise this patch looks good to me.
-Tero
>
> Cc: Tero Kristo <t-kristo@ti.com>
> Cc: Nishanth Menon <nm@ti.com>
> Signed-off-by: Kevin Hilman <khilman@ti.com>
> ---
> Unless there are any objections, this will be queued along with the
> rest of the SMPS regulator series from Tero. Currently availble in
> my for_3.4/pm/smps-regulator branch at
> git://git.kernel.org/pub/scm/linux/kernel/git/khilman/linux-omap-pm.git
>
> arch/arm/mach-omap2/voltage.c | 21 ++++++++++++++++++---
> 1 file changed, 18 insertions(+), 3 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/voltage.c b/arch/arm/mach-omap2/voltage.c
> index 8a36342..4dc60e8 100644
> --- a/arch/arm/mach-omap2/voltage.c
> +++ b/arch/arm/mach-omap2/voltage.c
> @@ -73,7 +73,8 @@ unsigned long voltdm_get_voltage(struct voltagedomain *voltdm)
> int voltdm_scale(struct voltagedomain *voltdm,
> unsigned long target_volt)
> {
> - int ret;
> + int ret, i;
> + unsigned long volt = 0;
>
> if (!voltdm || IS_ERR(voltdm)) {
> pr_warning("%s: VDD specified does not exist!\n", __func__);
> @@ -86,9 +87,23 @@ int voltdm_scale(struct voltagedomain *voltdm,
> return -ENODATA;
> }
>
> - ret = voltdm->scale(voltdm, target_volt);
> + /* Adjust voltage to the exact voltage from the OPP table */
> + for (i = 0; voltdm->volt_data[i].volt_nominal != 0; i++) {
> + if (voltdm->volt_data[i].volt_nominal >= target_volt) {
> + volt = voltdm->volt_data[i].volt_nominal;
> + break;
> + }
> + }
> +
> + if (!volt) {
> + pr_warning("%s: not scaling. OPP voltage for %lu, not found.\n",
> + __func__, target_volt);
> + return -EINVAL;
> + }
> +
> + ret = voltdm->scale(voltdm, volt);
> if (!ret)
> - voltdm->nominal_volt = target_volt;
> + voltdm->nominal_volt = volt;
>
> return ret;
> }
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH] ARM: OMAP2+: voltage: ensure voltage used is exact voltage from OPP table
2012-03-05 9:41 ` Tero Kristo
@ 2012-03-05 18:12 ` Kevin Hilman
2012-03-06 6:12 ` Nishanth Menon
0 siblings, 1 reply; 4+ messages in thread
From: Kevin Hilman @ 2012-03-05 18:12 UTC (permalink / raw)
To: linux-arm-kernel
Tero Kristo <t-kristo@ti.com> writes:
> On Fri, 2012-03-02 at 14:42 -0800, Kevin Hilman wrote:
>> When using the SMPS regulators to scale voltages, the regulator
>> framework may pass a minimum voltage that is not an exact OPP voltage.
>> For the VC/VP controlled voltage domains, we must ensure that the
>> voltage requested is the exact voltage from the OPP table. This is
>> especially critical when using SR.
>>
>> To fix, voltdm_scale() uses the target voltage passed to walk through
>> the OPP voltages until it finds a voltage that is >= one of the OPP
>> voltages.
>
> I have just one question to this, how about smartreflex class1p5? Do we
> have any plans for that one? The old implementation at least was using
> voltdm_scale, so if we modify this function, smartreflex class1p5
> doesn't work anymore.
Since it's not in mainline, that is not my concern at the moment. We
can worry about SR1.5 when I someone is motivated to push it upstream.
> Otherwise this patch looks good to me.
Thanks for looking.
Kevin
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH] ARM: OMAP2+: voltage: ensure voltage used is exact voltage from OPP table
2012-03-05 18:12 ` Kevin Hilman
@ 2012-03-06 6:12 ` Nishanth Menon
0 siblings, 0 replies; 4+ messages in thread
From: Nishanth Menon @ 2012-03-06 6:12 UTC (permalink / raw)
To: linux-arm-kernel
On 10:12-20120305, Kevin Hilman wrote:
> Tero Kristo <t-kristo@ti.com> writes:
>
> > On Fri, 2012-03-02 at 14:42 -0800, Kevin Hilman wrote:
> >> When using the SMPS regulators to scale voltages, the regulator
> >> framework may pass a minimum voltage that is not an exact OPP voltage.
> >> For the VC/VP controlled voltage domains, we must ensure that the
> >> voltage requested is the exact voltage from the OPP table. This is
> >> especially critical when using SR.
> >>
> >> To fix, voltdm_scale() uses the target voltage passed to walk through
> >> the OPP voltages until it finds a voltage that is >= one of the OPP
> >> voltages.
> >
> > I have just one question to this, how about smartreflex class1p5? Do we
> > have any plans for that one? The old implementation at least was using
> > voltdm_scale, so if we modify this function, smartreflex class1p5
> > doesn't work anymore.
>
> Since it's not in mainline, that is not my concern at the moment. We
> can worry about SR1.5 when I someone is motivated to push it upstream.
>
> > Otherwise this patch looks good to me.
Other than the minor misgiving of having to re-verify the voltage on
every scale, I am OK with it as well.
That said, I don't see why this should break class 1.5/3.5 support.
--
Regards,
Nishanth Menon
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2012-03-06 6:12 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-03-02 22:42 [PATCH] ARM: OMAP2+: voltage: ensure voltage used is exact voltage from OPP table Kevin Hilman
2012-03-05 9:41 ` Tero Kristo
2012-03-05 18:12 ` Kevin Hilman
2012-03-06 6:12 ` Nishanth Menon
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).