diff options
author | Markus Mayer <mmayer@broadcom.com> | 2016-12-19 12:10:28 -0800 |
---|---|---|
committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2017-01-27 11:43:49 +0100 |
commit | 3c223c19aea85d3dda1416c187915f4a30b04b1f (patch) | |
tree | 2d2021f8161db3e9ed38b9a966a225b66dff8e58 /drivers/cpufreq/brcmstb-avs-cpufreq.c | |
parent | 9b02c54bc951fca884ba5719f42a27e8240965bf (diff) | |
download | linux-3c223c19aea85d3dda1416c187915f4a30b04b1f.tar.gz linux-3c223c19aea85d3dda1416c187915f4a30b04b1f.tar.bz2 linux-3c223c19aea85d3dda1416c187915f4a30b04b1f.zip |
cpufreq: brcmstb-avs-cpufreq: properly retrieve P-state upon suspend
The AVS GET_PMAP command does return a P-state along with the P-map
information. However, that P-state is the initial P-state when the
P-map was first downloaded to AVS. It is *not* the current P-state.
Therefore, we explicitly retrieve the P-state using the GET_PSTATE
command.
Signed-off-by: Markus Mayer <mmayer@broadcom.com>
Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Diffstat (limited to 'drivers/cpufreq/brcmstb-avs-cpufreq.c')
-rw-r--r-- | drivers/cpufreq/brcmstb-avs-cpufreq.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/cpufreq/brcmstb-avs-cpufreq.c b/drivers/cpufreq/brcmstb-avs-cpufreq.c index 2c6e3253ba64..c94360671f41 100644 --- a/drivers/cpufreq/brcmstb-avs-cpufreq.c +++ b/drivers/cpufreq/brcmstb-avs-cpufreq.c @@ -784,8 +784,19 @@ static int brcm_avs_target_index(struct cpufreq_policy *policy, static int brcm_avs_suspend(struct cpufreq_policy *policy) { struct private_data *priv = policy->driver_data; + int ret; + + ret = brcm_avs_get_pmap(priv, &priv->pmap); + if (ret) + return ret; - return brcm_avs_get_pmap(priv, &priv->pmap); + /* + * We can't use the P-state returned by brcm_avs_get_pmap(), since + * that's the initial P-state from when the P-map was downloaded to the + * AVS co-processor, not necessarily the P-state we are running at now. + * So, we get the current P-state explicitly. + */ + return brcm_avs_get_pstate(priv, &priv->pmap.state); } static int brcm_avs_resume(struct cpufreq_policy *policy) |