Message ID | df44ee42774efd7d1c656ed43ff3b35988e22e60.1718787627.git.perry.yuan@amd.com |
---|---|
State | New |
Headers | show |
Series | AMD Pstate Driver Core Performance Boost | expand |
Perry Yuan <perry.yuan@amd.com> writes: > From: Perry Yuan <Perry.Yuan@amd.com> > > Select the min perf to fix the highest perf value while update pstate > CPPC request MSR register, here it needs to limit the max perf value when > CPU boost is disabled in case of that highest perf value in the MSR will be > reset to original highest perf value which cause the BOOST control > failed. Perhaps we could rephrase this as "When Core Performance Boost is disabled by the user, the CPPC_REQ.max_perf should not exceed the nominal_perf since by definition the frequencies between nominal_perf and the highest_perf are in the boost range. Fix this in amd_pstate_update()" Also change the subject to "cpufreq:amd-pstate: Cap the CPPC.max_perf to nominal_perf if CPB is off" ? > > Signed-off-by: Perry Yuan <Perry.Yuan@amd.com> > Acked-by: Huang Rui <ray.huang@amd.com> > Reviewed-by: Mario Limonciello <mario.limonciello@amd.com> Other than that, Reviewed-by: Gautham R. Shenoy <gautham.shenoy@amd.com> > --- > drivers/cpufreq/amd-pstate.c | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c > index 299e52d4b17e..f2ccef089acc 100644 > --- a/drivers/cpufreq/amd-pstate.c > +++ b/drivers/cpufreq/amd-pstate.c > @@ -524,6 +524,7 @@ static void amd_pstate_update(struct amd_cpudata *cpudata, u32 min_perf, > u32 des_perf, u32 max_perf, bool fast_switch, int gov_flags) > { > u64 prev = READ_ONCE(cpudata->cppc_req_cached); > + u32 nominal_perf = READ_ONCE(cpudata->nominal_perf); > u64 value = prev; > > min_perf = clamp_t(unsigned long, min_perf, cpudata->min_limit_perf, > @@ -543,6 +544,10 @@ static void amd_pstate_update(struct amd_cpudata *cpudata, u32 min_perf, > value &= ~AMD_CPPC_DES_PERF(~0L); > value |= AMD_CPPC_DES_PERF(des_perf); > > + /* limit the max perf when core performance boost feature is disabled */ > + if (!amd_pstate_global_params.cpb_boost) > + max_perf = min_t(unsigned long, nominal_perf, max_perf); > + > value &= ~AMD_CPPC_MAX_PERF(~0L); > value |= AMD_CPPC_MAX_PERF(max_perf); > > -- > 2.34.1 -- Thanks and Regards gautham.
[AMD Official Use Only - AMD Internal Distribution Only] > -----Original Message----- > From: Shenoy, Gautham Ranjal <gautham.shenoy@amd.com> > Sent: Friday, June 21, 2024 1:46 PM > To: Yuan, Perry <Perry.Yuan@amd.com>; rafael.j.wysocki@intel.com; > Limonciello, Mario <Mario.Limonciello@amd.com>; viresh.kumar@linaro.org > Cc: 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 v12 7/9] cpufreq: amd-pstate: fix the MSR highest perf > will be reset issue while cpb boost off > > Perry Yuan <perry.yuan@amd.com> writes: > > > From: Perry Yuan <Perry.Yuan@amd.com> > > > > Select the min perf to fix the highest perf value while update pstate > > CPPC request MSR register, here it needs to limit the max perf value > > when CPU boost is disabled in case of that highest perf value in the > > MSR will be reset to original highest perf value which cause the BOOST > > control failed. > > Perhaps we could rephrase this as > > "When Core Performance Boost is disabled by the user, the > CPPC_REQ.max_perf should not exceed the nominal_perf since by definition > the frequencies between nominal_perf and the highest_perf are in the boost > range. Fix this in amd_pstate_update()" > > Also change the subject to > > "cpufreq:amd-pstate: Cap the CPPC.max_perf to nominal_perf if CPB is off" Sure, will update the tile in v13, will send out the V13 today to catch the merge window. Thanks for the review. Perry. > > ? > > > > Signed-off-by: Perry Yuan <Perry.Yuan@amd.com> > > Acked-by: Huang Rui <ray.huang@amd.com> > > Reviewed-by: Mario Limonciello <mario.limonciello@amd.com> > > Other than that, > > Reviewed-by: Gautham R. Shenoy <gautham.shenoy@amd.com> > > --- > > drivers/cpufreq/amd-pstate.c | 5 +++++ > > 1 file changed, 5 insertions(+) > > > > diff --git a/drivers/cpufreq/amd-pstate.c > > b/drivers/cpufreq/amd-pstate.c index 299e52d4b17e..f2ccef089acc 100644 > > --- a/drivers/cpufreq/amd-pstate.c > > +++ b/drivers/cpufreq/amd-pstate.c > > @@ -524,6 +524,7 @@ static void amd_pstate_update(struct amd_cpudata > *cpudata, u32 min_perf, > > u32 des_perf, u32 max_perf, bool fast_switch, int > gov_flags) > > { > > u64 prev = READ_ONCE(cpudata->cppc_req_cached); > > + u32 nominal_perf = READ_ONCE(cpudata->nominal_perf); > > u64 value = prev; > > > > min_perf = clamp_t(unsigned long, min_perf, cpudata- > >min_limit_perf, > > @@ -543,6 +544,10 @@ static void amd_pstate_update(struct > amd_cpudata *cpudata, u32 min_perf, > > value &= ~AMD_CPPC_DES_PERF(~0L); > > value |= AMD_CPPC_DES_PERF(des_perf); > > > > + /* limit the max perf when core performance boost feature is > disabled */ > > + if (!amd_pstate_global_params.cpb_boost) > > + max_perf = min_t(unsigned long, nominal_perf, max_perf); > > + > > value &= ~AMD_CPPC_MAX_PERF(~0L); > > value |= AMD_CPPC_MAX_PERF(max_perf); > > > > -- > > 2.34.1 > > -- > Thanks and Regards > gautham.
diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c index 299e52d4b17e..f2ccef089acc 100644 --- a/drivers/cpufreq/amd-pstate.c +++ b/drivers/cpufreq/amd-pstate.c @@ -524,6 +524,7 @@ static void amd_pstate_update(struct amd_cpudata *cpudata, u32 min_perf, u32 des_perf, u32 max_perf, bool fast_switch, int gov_flags) { u64 prev = READ_ONCE(cpudata->cppc_req_cached); + u32 nominal_perf = READ_ONCE(cpudata->nominal_perf); u64 value = prev; min_perf = clamp_t(unsigned long, min_perf, cpudata->min_limit_perf, @@ -543,6 +544,10 @@ static void amd_pstate_update(struct amd_cpudata *cpudata, u32 min_perf, value &= ~AMD_CPPC_DES_PERF(~0L); value |= AMD_CPPC_DES_PERF(des_perf); + /* limit the max perf when core performance boost feature is disabled */ + if (!amd_pstate_global_params.cpb_boost) + max_perf = min_t(unsigned long, nominal_perf, max_perf); + value &= ~AMD_CPPC_MAX_PERF(~0L); value |= AMD_CPPC_MAX_PERF(max_perf);