Message ID | 675807d1888f77d7d0f3bc335b5bb3bd2c023670.1706255676.git.perry.yuan@amd.com (mailing list archive) |
---|---|
State | Changes Requested, archived |
Headers | show |
Series | AMD Pstate Driver Core Performance Boost | expand |
On 1/26/2024 02:08, Perry Yuan wrote: > From: Perry Yuan <Perry.Yuan@amd.com> > > When CPU core Precision Boost state changed, the max frequency will also > need to be updated according to the current boost state, if boost is > disabled now, the max perf will be limited to nominal perf values. > otherwise the max frequency will be showed wrongly. What about the previous cppc_req? Shouldn't it be explicitly updated as a result of this too? > > Signed-off-by: Perry Yuan <Perry.Yuan@amd.com> > --- > drivers/cpufreq/amd-pstate.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c > index b37bea7440b9..3286d72f375e 100644 > --- a/drivers/cpufreq/amd-pstate.c > +++ b/drivers/cpufreq/amd-pstate.c > @@ -599,6 +599,10 @@ static int amd_get_max_freq(struct amd_cpudata *cpudata) > nominal_perf = READ_ONCE(cpudata->nominal_perf); > max_perf = READ_ONCE(cpudata->highest_perf); > > + /* when boost is off, the highest perf will be limited to nominal_perf */ > + if (!global.cpb_boost) > + max_perf = nominal_perf; > + > boost_ratio = div_u64(max_perf << SCHED_CAPACITY_SHIFT, > nominal_perf); >
[AMD Official Use Only - General] Hi Mario, > -----Original Message----- > From: Limonciello, Mario <Mario.Limonciello@amd.com> > Sent: Friday, January 26, 2024 11:54 PM > To: Yuan, Perry <Perry.Yuan@amd.com>; rafael.j.wysocki@intel.com; > viresh.kumar@linaro.org; Huang, Ray <Ray.Huang@amd.com>; Shenoy, > Gautham Ranjal <gautham.shenoy@amd.com>; Petkov, Borislav > <Borislav.Petkov@amd.com> > Cc: 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 4/7] cpufreq: amd-pstate: fix max_perf calculation for > amd_get_max_freq() > > On 1/26/2024 02:08, Perry Yuan wrote: > > From: Perry Yuan <Perry.Yuan@amd.com> > > > > When CPU core Precision Boost state changed, the max frequency will > > also need to be updated according to the current boost state, if boost > > is disabled now, the max perf will be limited to nominal perf values. > > otherwise the max frequency will be showed wrongly. > > What about the previous cppc_req? Shouldn't it be explicitly updated as a > result of this too? The CPPC REQ value has been updated in this function. When boost state changed, the MSR will be updated firstly. +static int amd_cpu_boost_update(struct amd_cpudata *cpudata, u32 on) +{ + struct cpufreq_policy *policy = cpufreq_cpu_acquire(cpudata->cpu); + struct cppc_perf_ctrls perf_ctrls; + u32 highest_perf, nominal_perf; + int ret; + + if (!policy) + return -ENODATA; + + highest_perf = READ_ONCE(cpudata->highest_perf); + nominal_perf = READ_ONCE(cpudata->nominal_perf); + + if (boot_cpu_has(X86_FEATURE_CPPC)) { + u64 value = READ_ONCE(cpudata->cppc_req_cached); + + value &= ~GENMASK_ULL(7, 0); + value |= on ? highest_perf : nominal_perf; + WRITE_ONCE(cpudata->cppc_req_cached, value); + + wrmsrl_on_cpu(cpudata->cpu, MSR_AMD_CPPC_REQ, value); > > > > > Signed-off-by: Perry Yuan <Perry.Yuan@amd.com> > > --- > > drivers/cpufreq/amd-pstate.c | 4 ++++ > > 1 file changed, 4 insertions(+) > > > > diff --git a/drivers/cpufreq/amd-pstate.c > > b/drivers/cpufreq/amd-pstate.c index b37bea7440b9..3286d72f375e > 100644 > > --- a/drivers/cpufreq/amd-pstate.c > > +++ b/drivers/cpufreq/amd-pstate.c > > @@ -599,6 +599,10 @@ static int amd_get_max_freq(struct amd_cpudata > *cpudata) > > nominal_perf = READ_ONCE(cpudata->nominal_perf); > > max_perf = READ_ONCE(cpudata->highest_perf); > > > > + /* when boost is off, the highest perf will be limited to nominal_perf */ > > + if (!global.cpb_boost) > > + max_perf = nominal_perf; > > + > > boost_ratio = div_u64(max_perf << SCHED_CAPACITY_SHIFT, > > nominal_perf); > >
diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c index b37bea7440b9..3286d72f375e 100644 --- a/drivers/cpufreq/amd-pstate.c +++ b/drivers/cpufreq/amd-pstate.c @@ -599,6 +599,10 @@ static int amd_get_max_freq(struct amd_cpudata *cpudata) nominal_perf = READ_ONCE(cpudata->nominal_perf); max_perf = READ_ONCE(cpudata->highest_perf); + /* when boost is off, the highest perf will be limited to nominal_perf */ + if (!global.cpb_boost) + max_perf = nominal_perf; + boost_ratio = div_u64(max_perf << SCHED_CAPACITY_SHIFT, nominal_perf);