Message ID | 20241012174519.897-3-mario.limonciello@amd.com (mailing list archive) |
---|---|
State | Accepted, archived |
Delegated to: | Mario Limonciello |
Headers | show |
Series | [1/4] cpufreq/amd-pstate: Use nominal perf for limits when boost is disabled | expand |
[Public] Hi Mario, > -----Original Message----- > From: Limonciello, Mario <Mario.Limonciello@amd.com> > Sent: Sunday, October 13, 2024 1:45 AM > To: Shenoy, Gautham Ranjal <gautham.shenoy@amd.com> > Cc: Yuan, Perry <Perry.Yuan@amd.com>; linux-kernel@vger.kernel.org; linux- > pm@vger.kernel.org; Ugwekar, Dhananjay <Dhananjay.Ugwekar@amd.com>; > Limonciello, Mario <Mario.Limonciello@amd.com> > Subject: [PATCH 3/4] cpufreq/amd-pstate: Use > amd_pstate_update_min_max_limit() for EPP limits > > When the EPP updates are set the maximum capable frequency for the CPU is > used to set the upper limit instead of that of the policy. > > Adjust amd_pstate_epp_update_limit() to reuse policy calculation code from > amd_pstate_update_min_max_limit(). > > Signed-off-by: Mario Limonciello <mario.limonciello@amd.com> > --- > drivers/cpufreq/amd-pstate.c | 19 +++---------------- > 1 file changed, 3 insertions(+), 16 deletions(-) > > diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c index > 13dec8b1e7a8..8d2541f2c74b 100644 > --- a/drivers/cpufreq/amd-pstate.c > +++ b/drivers/cpufreq/amd-pstate.c > @@ -1485,26 +1485,13 @@ static void amd_pstate_epp_cpu_exit(struct > cpufreq_policy *policy) static int amd_pstate_epp_update_limit(struct > cpufreq_policy *policy) { > struct amd_cpudata *cpudata = policy->driver_data; > - u32 max_perf, min_perf, min_limit_perf, max_limit_perf; > + u32 max_perf, min_perf; > u64 value; > s16 epp; > > - if (cpudata->boost_supported && !policy->boost_enabled) > - max_perf = READ_ONCE(cpudata->nominal_perf); > - else > - max_perf = READ_ONCE(cpudata->highest_perf); > + max_perf = READ_ONCE(cpudata->highest_perf); > min_perf = READ_ONCE(cpudata->lowest_perf); > - max_limit_perf = div_u64(policy->max * max_perf, policy- > >cpuinfo.max_freq); > - min_limit_perf = div_u64(policy->min * max_perf, policy->cpuinfo.max_freq); > - > - if (min_limit_perf < min_perf) > - min_limit_perf = min_perf; > - > - if (max_limit_perf < min_limit_perf) > - max_limit_perf = min_limit_perf; > - > - WRITE_ONCE(cpudata->max_limit_perf, max_limit_perf); > - WRITE_ONCE(cpudata->min_limit_perf, min_limit_perf); > + amd_pstate_update_min_max_limit(policy); > > max_perf = clamp_t(unsigned long, max_perf, cpudata->min_limit_perf, > cpudata->max_limit_perf); > -- > 2.43.0 LGTM, thanks for the optimization. Reviewed-by: Perry Yuan <perry.yuan@amd.com> Best Regards. Perry.
Hello Mario, On Sat, Oct 12, 2024 at 12:45:18PM -0500, Mario Limonciello wrote: > When the EPP updates are set the maximum capable frequency for the > CPU is used to set the upper limit instead of that of the policy. > > Adjust amd_pstate_epp_update_limit() to reuse policy calculation code > from amd_pstate_update_min_max_limit(). > > Signed-off-by: Mario Limonciello <mario.limonciello@amd.com> Looks good to me. Reviewed-by: Gautham R. Shenoy <gautham.shenoy@amd.com> -- Thanks and Regards gautham. > --- > drivers/cpufreq/amd-pstate.c | 19 +++---------------- > 1 file changed, 3 insertions(+), 16 deletions(-) > > diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c > index 13dec8b1e7a8..8d2541f2c74b 100644 > --- a/drivers/cpufreq/amd-pstate.c > +++ b/drivers/cpufreq/amd-pstate.c > @@ -1485,26 +1485,13 @@ static void amd_pstate_epp_cpu_exit(struct cpufreq_policy *policy) > static int amd_pstate_epp_update_limit(struct cpufreq_policy *policy) > { > struct amd_cpudata *cpudata = policy->driver_data; > - u32 max_perf, min_perf, min_limit_perf, max_limit_perf; > + u32 max_perf, min_perf; > u64 value; > s16 epp; > > - if (cpudata->boost_supported && !policy->boost_enabled) > - max_perf = READ_ONCE(cpudata->nominal_perf); > - else > - max_perf = READ_ONCE(cpudata->highest_perf); > + max_perf = READ_ONCE(cpudata->highest_perf); > min_perf = READ_ONCE(cpudata->lowest_perf); > - max_limit_perf = div_u64(policy->max * max_perf, policy->cpuinfo.max_freq); > - min_limit_perf = div_u64(policy->min * max_perf, policy->cpuinfo.max_freq); > - > - if (min_limit_perf < min_perf) > - min_limit_perf = min_perf; > - > - if (max_limit_perf < min_limit_perf) > - max_limit_perf = min_limit_perf; > - > - WRITE_ONCE(cpudata->max_limit_perf, max_limit_perf); > - WRITE_ONCE(cpudata->min_limit_perf, min_limit_perf); > + amd_pstate_update_min_max_limit(policy); > > max_perf = clamp_t(unsigned long, max_perf, cpudata->min_limit_perf, > cpudata->max_limit_perf); > -- > 2.43.0 >
diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c index 13dec8b1e7a8..8d2541f2c74b 100644 --- a/drivers/cpufreq/amd-pstate.c +++ b/drivers/cpufreq/amd-pstate.c @@ -1485,26 +1485,13 @@ static void amd_pstate_epp_cpu_exit(struct cpufreq_policy *policy) static int amd_pstate_epp_update_limit(struct cpufreq_policy *policy) { struct amd_cpudata *cpudata = policy->driver_data; - u32 max_perf, min_perf, min_limit_perf, max_limit_perf; + u32 max_perf, min_perf; u64 value; s16 epp; - if (cpudata->boost_supported && !policy->boost_enabled) - max_perf = READ_ONCE(cpudata->nominal_perf); - else - max_perf = READ_ONCE(cpudata->highest_perf); + max_perf = READ_ONCE(cpudata->highest_perf); min_perf = READ_ONCE(cpudata->lowest_perf); - max_limit_perf = div_u64(policy->max * max_perf, policy->cpuinfo.max_freq); - min_limit_perf = div_u64(policy->min * max_perf, policy->cpuinfo.max_freq); - - if (min_limit_perf < min_perf) - min_limit_perf = min_perf; - - if (max_limit_perf < min_limit_perf) - max_limit_perf = min_limit_perf; - - WRITE_ONCE(cpudata->max_limit_perf, max_limit_perf); - WRITE_ONCE(cpudata->min_limit_perf, min_limit_perf); + amd_pstate_update_min_max_limit(policy); max_perf = clamp_t(unsigned long, max_perf, cpudata->min_limit_perf, cpudata->max_limit_perf);
When the EPP updates are set the maximum capable frequency for the CPU is used to set the upper limit instead of that of the policy. Adjust amd_pstate_epp_update_limit() to reuse policy calculation code from amd_pstate_update_min_max_limit(). Signed-off-by: Mario Limonciello <mario.limonciello@amd.com> --- drivers/cpufreq/amd-pstate.c | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-)