Message ID | 20240612145737.1618-1-mario.limonciello@amd.com (mailing list archive) |
---|---|
State | Accepted |
Delegated to: | Mario Limonciello |
Headers | show |
Series | cpufreq: amd-pstate: Allow users to write 'default' EPP string | expand |
That was blazing fast. Thanks a ton! On 6/12/24 2:57 PM, Mario Limonciello wrote: > The EPP string for 'default' represents what the firmware had configured > as the default EPP value but once a user changes EPP to another string > they can't reset it back to 'default'. > > Cache the firmware EPP value and allow the user to write 'default' using > this value. > > Reported-by: Artem S. Tashkinov <aros@gmx.com> > Closes: https://bugzilla.kernel.org/show_bug.cgi?id=217931#c61 > Signed-off-by: Mario Limonciello <mario.limonciello@amd.com> > --- > drivers/cpufreq/amd-pstate.c | 8 +++----- > drivers/cpufreq/amd-pstate.h | 1 + > 2 files changed, 4 insertions(+), 5 deletions(-) > > diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c > index fda8f86c90e0..5bdcdd3ea163 100644 > --- a/drivers/cpufreq/amd-pstate.c > +++ b/drivers/cpufreq/amd-pstate.c > @@ -282,10 +282,8 @@ static int amd_pstate_set_energy_pref_index(struct amd_cpudata *cpudata, > int epp = -EINVAL; > int ret; > > - if (!pref_index) { > - pr_debug("EPP pref_index is invalid\n"); > - return -EINVAL; > - } > + if (!pref_index) > + epp = cpudata->epp_default; > > if (epp == -EINVAL) > epp = epp_values[pref_index]; > @@ -1441,7 +1439,7 @@ static int amd_pstate_epp_cpu_init(struct cpufreq_policy *policy) > > policy->driver_data = cpudata; > > - cpudata->epp_cached = amd_pstate_get_epp(cpudata, 0); > + cpudata->epp_cached = cpudata->epp_default = amd_pstate_get_epp(cpudata, 0); > > policy->min = policy->cpuinfo.min_freq; > policy->max = policy->cpuinfo.max_freq; > diff --git a/drivers/cpufreq/amd-pstate.h b/drivers/cpufreq/amd-pstate.h > index e6a28e7f4dbf..f80b33fa5d43 100644 > --- a/drivers/cpufreq/amd-pstate.h > +++ b/drivers/cpufreq/amd-pstate.h > @@ -99,6 +99,7 @@ struct amd_cpudata { > u32 policy; > u64 cppc_cap1_cached; > bool suspended; > + s16 epp_default; > }; > > #endif /* _LINUX_AMD_PSTATE_H */
[AMD Official Use Only - AMD Internal Distribution Only] > -----Original Message----- > From: Limonciello, Mario <Mario.Limonciello@amd.com> > Sent: Wednesday, June 12, 2024 10:58 PM > To: Shenoy, Gautham Ranjal <gautham.shenoy@amd.com> > Cc: Yuan, Perry <Perry.Yuan@amd.com>; linux-pm@vger.kernel.org; > Limonciello, Mario <Mario.Limonciello@amd.com>; Artem S . Tashkinov > <aros@gmx.com> > Subject: [PATCH] cpufreq: amd-pstate: Allow users to write 'default' EPP > string > > The EPP string for 'default' represents what the firmware had configured as > the default EPP value but once a user changes EPP to another string they > can't reset it back to 'default'. > > Cache the firmware EPP value and allow the user to write 'default' using this > value. > > Reported-by: Artem S. Tashkinov <aros@gmx.com> > Closes: https://bugzilla.kernel.org/show_bug.cgi?id=217931#c61 > Signed-off-by: Mario Limonciello <mario.limonciello@amd.com> > --- > drivers/cpufreq/amd-pstate.c | 8 +++----- drivers/cpufreq/amd-pstate.h | 1 > + > 2 files changed, 4 insertions(+), 5 deletions(-) > > diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c > index fda8f86c90e0..5bdcdd3ea163 100644 > --- a/drivers/cpufreq/amd-pstate.c > +++ b/drivers/cpufreq/amd-pstate.c > @@ -282,10 +282,8 @@ static int amd_pstate_set_energy_pref_index(struct > amd_cpudata *cpudata, > int epp = -EINVAL; > int ret; > > - if (!pref_index) { > - pr_debug("EPP pref_index is invalid\n"); > - return -EINVAL; > - } > + if (!pref_index) > + epp = cpudata->epp_default; > > if (epp == -EINVAL) > epp = epp_values[pref_index]; > @@ -1441,7 +1439,7 @@ static int amd_pstate_epp_cpu_init(struct > cpufreq_policy *policy) > > policy->driver_data = cpudata; > > - cpudata->epp_cached = amd_pstate_get_epp(cpudata, 0); > + cpudata->epp_cached = cpudata->epp_default = > +amd_pstate_get_epp(cpudata, 0); > > policy->min = policy->cpuinfo.min_freq; > policy->max = policy->cpuinfo.max_freq; diff --git > a/drivers/cpufreq/amd-pstate.h b/drivers/cpufreq/amd-pstate.h index > e6a28e7f4dbf..f80b33fa5d43 100644 > --- a/drivers/cpufreq/amd-pstate.h > +++ b/drivers/cpufreq/amd-pstate.h > @@ -99,6 +99,7 @@ struct amd_cpudata { > u32 policy; > u64 cppc_cap1_cached; > bool suspended; > + s16 epp_default; > }; > > #endif /* _LINUX_AMD_PSTATE_H */ > -- > 2.43.0 LGTM,thanks. Reviewed-by: Perry Yuan <perry.yuan@amd.com>
Mario Limonciello <mario.limonciello@amd.com> writes: > The EPP string for 'default' represents what the firmware had configured > as the default EPP value but once a user changes EPP to another string > they can't reset it back to 'default'. > > Cache the firmware EPP value and allow the user to write 'default' using > this value. > > Reported-by: Artem S. Tashkinov <aros@gmx.com> > Closes: https://bugzilla.kernel.org/show_bug.cgi?id=217931#c61 > Signed-off-by: Mario Limonciello <mario.limonciello@amd.com> Reviewed-by: Gautham R. Shenoy <gautham.shenoy@amd.com> > --- > drivers/cpufreq/amd-pstate.c | 8 +++----- > drivers/cpufreq/amd-pstate.h | 1 + > 2 files changed, 4 insertions(+), 5 deletions(-) > > diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c > index fda8f86c90e0..5bdcdd3ea163 100644 > --- a/drivers/cpufreq/amd-pstate.c > +++ b/drivers/cpufreq/amd-pstate.c > @@ -282,10 +282,8 @@ static int amd_pstate_set_energy_pref_index(struct amd_cpudata *cpudata, > int epp = -EINVAL; > int ret; > > - if (!pref_index) { > - pr_debug("EPP pref_index is invalid\n"); > - return -EINVAL; > - } > + if (!pref_index) > + epp = cpudata->epp_default; > > if (epp == -EINVAL) > epp = epp_values[pref_index]; > @@ -1441,7 +1439,7 @@ static int amd_pstate_epp_cpu_init(struct cpufreq_policy *policy) > > policy->driver_data = cpudata; > > - cpudata->epp_cached = amd_pstate_get_epp(cpudata, 0); > + cpudata->epp_cached = cpudata->epp_default = amd_pstate_get_epp(cpudata, 0); > > policy->min = policy->cpuinfo.min_freq; > policy->max = policy->cpuinfo.max_freq; > diff --git a/drivers/cpufreq/amd-pstate.h b/drivers/cpufreq/amd-pstate.h > index e6a28e7f4dbf..f80b33fa5d43 100644 > --- a/drivers/cpufreq/amd-pstate.h > +++ b/drivers/cpufreq/amd-pstate.h > @@ -99,6 +99,7 @@ struct amd_cpudata { > u32 policy; > u64 cppc_cap1_cached; > bool suspended; > + s16 epp_default; > }; > > #endif /* _LINUX_AMD_PSTATE_H */ > -- > 2.43.0
diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c index fda8f86c90e0..5bdcdd3ea163 100644 --- a/drivers/cpufreq/amd-pstate.c +++ b/drivers/cpufreq/amd-pstate.c @@ -282,10 +282,8 @@ static int amd_pstate_set_energy_pref_index(struct amd_cpudata *cpudata, int epp = -EINVAL; int ret; - if (!pref_index) { - pr_debug("EPP pref_index is invalid\n"); - return -EINVAL; - } + if (!pref_index) + epp = cpudata->epp_default; if (epp == -EINVAL) epp = epp_values[pref_index]; @@ -1441,7 +1439,7 @@ static int amd_pstate_epp_cpu_init(struct cpufreq_policy *policy) policy->driver_data = cpudata; - cpudata->epp_cached = amd_pstate_get_epp(cpudata, 0); + cpudata->epp_cached = cpudata->epp_default = amd_pstate_get_epp(cpudata, 0); policy->min = policy->cpuinfo.min_freq; policy->max = policy->cpuinfo.max_freq; diff --git a/drivers/cpufreq/amd-pstate.h b/drivers/cpufreq/amd-pstate.h index e6a28e7f4dbf..f80b33fa5d43 100644 --- a/drivers/cpufreq/amd-pstate.h +++ b/drivers/cpufreq/amd-pstate.h @@ -99,6 +99,7 @@ struct amd_cpudata { u32 policy; u64 cppc_cap1_cached; bool suspended; + s16 epp_default; }; #endif /* _LINUX_AMD_PSTATE_H */
The EPP string for 'default' represents what the firmware had configured as the default EPP value but once a user changes EPP to another string they can't reset it back to 'default'. Cache the firmware EPP value and allow the user to write 'default' using this value. Reported-by: Artem S. Tashkinov <aros@gmx.com> Closes: https://bugzilla.kernel.org/show_bug.cgi?id=217931#c61 Signed-off-by: Mario Limonciello <mario.limonciello@amd.com> --- drivers/cpufreq/amd-pstate.c | 8 +++----- drivers/cpufreq/amd-pstate.h | 1 + 2 files changed, 4 insertions(+), 5 deletions(-)