Messages in this thread | | | From | "Yuan, Perry" <> | Subject | RE: [PATCH v3 6/8] cpufreq: amd-pstate: implement suspend and resume callbacks | Date | Sun, 13 Nov 2022 16:19:06 +0000 |
| |
[AMD Official Use Only - General]
Hi Mario.
> -----Original Message----- > From: Limonciello, Mario <Mario.Limonciello@amd.com> > Sent: Tuesday, November 8, 2022 2:18 AM > To: Yuan, Perry <Perry.Yuan@amd.com>; rafael.j.wysocki@intel.com; Huang, > Ray <Ray.Huang@amd.com>; viresh.kumar@linaro.org > Cc: Sharma, Deepak <Deepak.Sharma@amd.com>; Fontenot, Nathan > <Nathan.Fontenot@amd.com>; Deucher, Alexander > <Alexander.Deucher@amd.com>; Huang, Shimmer > <Shimmer.Huang@amd.com>; Du, Xiaojian <Xiaojian.Du@amd.com>; Meng, > Li (Jassmine) <Li.Meng@amd.com>; linux-pm@vger.kernel.org; linux- > kernel@vger.kernel.org > Subject: Re: [PATCH v3 6/8] cpufreq: amd-pstate: implement suspend and > resume callbacks > > On 11/7/2022 11:57, Perry Yuan wrote: > > add suspend and resume support for the AMD processors by > > amd_pstate_epp driver instance. > > > > When the CPPC is suspended, EPP driver will set EPP profile to 'power' > > profile and set max/min perf to lowest perf value. > > When resume happens, it will restore the MSR registers with previous > > cached value. > > > > Signed-off-by: Perry Yuan <Perry.Yuan@amd.com> > > Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
Thank you. I pick up the RB tag in the V4.
Perry.
> > > --- > > drivers/cpufreq/amd-pstate.c | 40 > ++++++++++++++++++++++++++++++++++++ > > 1 file changed, 40 insertions(+) > > > > diff --git a/drivers/cpufreq/amd-pstate.c > > b/drivers/cpufreq/amd-pstate.c index 6ce9fca0a128..841b1e2383b8 > 100644 > > --- a/drivers/cpufreq/amd-pstate.c > > +++ b/drivers/cpufreq/amd-pstate.c > > @@ -1282,6 +1282,44 @@ static int amd_pstate_epp_cpu_offline(struct > cpufreq_policy *policy) > > return amd_pstate_cpu_offline(policy); > > } > > > > +static int amd_pstate_epp_suspend(struct cpufreq_policy *policy) { > > + struct amd_cpudata *cpudata = all_cpu_data[policy->cpu]; > > + int ret; > > + > > + /* avoid suspending when EPP is not enabled */ > > + if (!cppc_active) > > + return 0; > > + > > + /* set this flag to avoid setting core offline*/ > > + cpudata->suspended = true; > > + > > + /* disable CPPC in lowlevel firmware */ > > + ret = amd_pstate_enable(false); > > + if (ret) > > + pr_err("failed to suspend, return %d\n", ret); > > + > > + return 0; > > +} > > + > > +static int amd_pstate_epp_resume(struct cpufreq_policy *policy) { > > + struct amd_cpudata *cpudata = all_cpu_data[policy->cpu]; > > + > > + if (cpudata->suspended) { > > + mutex_lock(&amd_pstate_limits_lock); > > + > > + /* enable amd pstate from suspend state*/ > > + amd_pstate_epp_reenable(cpudata); > > + > > + mutex_unlock(&amd_pstate_limits_lock); > > + > > + cpudata->suspended = false; > > + } > > + > > + return 0; > > +} > > + > > static void amd_pstate_verify_cpu_policy(struct amd_cpudata *cpudata, > > struct cpufreq_policy_data *policy) > > { > > @@ -1318,6 +1356,8 @@ static struct cpufreq_driver > amd_pstate_epp_driver = { > > .update_limits = amd_pstate_epp_update_limits, > > .offline = amd_pstate_epp_cpu_offline, > > .online = amd_pstate_epp_cpu_online, > > + .suspend = amd_pstate_epp_suspend, > > + .resume = amd_pstate_epp_resume, > > .name = "amd_pstate_epp", > > .attr = amd_pstate_epp_attr, > > };
| |