Message ID | 20230620172433.21325-3-mario.limonciello@amd.com (mailing list archive) |
---|---|
State | Handled Elsewhere, archived |
Headers | show |
Series | Enable amd-pstate active mode by default | expand |
[AMD Official Use Only - General] > -----Original Message----- > From: Limonciello, Mario <Mario.Limonciello@amd.com> > Sent: Wednesday, June 21, 2023 1:25 AM > To: Rafael J . Wysocki <rafael@kernel.org> > Cc: Len Brown <lenb@kernel.org>; Huang, Ray <Ray.Huang@amd.com>; > linux-acpi@vger.kernel.org; linux-kernel@vger.kernel.org; linux- > pm@vger.kernel.org; Shenoy, Gautham Ranjal > <gautham.shenoy@amd.com>; Karny, Wyes <Wyes.Karny@amd.com>; > Yuan, Perry <Perry.Yuan@amd.com>; Limonciello, Mario > <Mario.Limonciello@amd.com> > Subject: [PATCH v3 2/3] cpufreq: amd-pstate: Set a fallback policy based on > preferred_profile > > If a user's configuration doesn't explicitly specify the cpufreq scaling governor > then the code currently explicitly falls back to 'powersave'. This default is fine > for notebooks and desktops, but servers and undefined machines should > default to 'performance'. > > Look at the 'preferred_profile' field from the FADT to set this policy > accordingly. > > Link: > https://uefi.org/htmlspecs/ACPI_Spec_6_4_html/05_ACPI_Software_Progr > amming_Model/ACPI_Software_Programming_Model.html#fixed-acpi- > description-table-fadt > Acked-by: Huang Rui <ray.huang@amd.com> > Suggested-by: Wyes Karny <Wyes.Karny@amd.com> > Reviewed-by: Gautham R. Shenoy <gautham.shenoy@amd.com> > Signed-off-by: Mario Limonciello <mario.limonciello@amd.com> > --- > v2->v3: > * Move new symbols out of patch 1 into this patch > * Add Ray's tag > --- > drivers/cpufreq/amd-pstate.c | 28 ++++++++++++++++++++++++++-- > 1 file changed, 26 insertions(+), 2 deletions(-) > > diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c > index d8269994322e..3546d7db614d 100644 > --- a/drivers/cpufreq/amd-pstate.c > +++ b/drivers/cpufreq/amd-pstate.c > @@ -1071,6 +1071,26 @@ static const struct attribute_group > amd_pstate_global_attr_group = { > .attrs = pstate_global_attributes, > }; > > +static bool amd_pstate_acpi_pm_profile_server(void) > +{ > + switch (acpi_gbl_FADT.preferred_profile) { > + case PM_ENTERPRISE_SERVER: > + case PM_SOHO_SERVER: > + case PM_PERFORMANCE_SERVER: > + return true; > + } > + return false; > +} > + > +static bool amd_pstate_acpi_pm_profile_undefined(void) > +{ > + if (acpi_gbl_FADT.preferred_profile == PM_UNSPECIFIED) > + return true; > + if (acpi_gbl_FADT.preferred_profile >= NR_PM_PROFILES) > + return true; > + return false; > +} > + > static int amd_pstate_epp_cpu_init(struct cpufreq_policy *policy) { > int min_freq, max_freq, nominal_freq, lowest_nonlinear_freq, ret; > @@ -1128,10 +1148,14 @@ static int amd_pstate_epp_cpu_init(struct > cpufreq_policy *policy) > policy->max = policy->cpuinfo.max_freq; > > /* > - * Set the policy to powersave to provide a valid fallback value in case > + * Set the policy to provide a valid fallback value in case > * the default cpufreq governor is neither powersave nor > performance. > */ > - policy->policy = CPUFREQ_POLICY_POWERSAVE; > + if (amd_pstate_acpi_pm_profile_server() || > + amd_pstate_acpi_pm_profile_undefined()) > + policy->policy = CPUFREQ_POLICY_PERFORMANCE; > + else > + policy->policy = CPUFREQ_POLICY_POWERSAVE; > > if (boot_cpu_has(X86_FEATURE_CPPC)) { > ret = rdmsrl_on_cpu(cpudata->cpu, MSR_AMD_CPPC_REQ, > &value); > -- > 2.34.1 Reviewed-by: Perry Yuan <Perry.Yuan@amd.com>
diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c index d8269994322e..3546d7db614d 100644 --- a/drivers/cpufreq/amd-pstate.c +++ b/drivers/cpufreq/amd-pstate.c @@ -1071,6 +1071,26 @@ static const struct attribute_group amd_pstate_global_attr_group = { .attrs = pstate_global_attributes, }; +static bool amd_pstate_acpi_pm_profile_server(void) +{ + switch (acpi_gbl_FADT.preferred_profile) { + case PM_ENTERPRISE_SERVER: + case PM_SOHO_SERVER: + case PM_PERFORMANCE_SERVER: + return true; + } + return false; +} + +static bool amd_pstate_acpi_pm_profile_undefined(void) +{ + if (acpi_gbl_FADT.preferred_profile == PM_UNSPECIFIED) + return true; + if (acpi_gbl_FADT.preferred_profile >= NR_PM_PROFILES) + return true; + return false; +} + static int amd_pstate_epp_cpu_init(struct cpufreq_policy *policy) { int min_freq, max_freq, nominal_freq, lowest_nonlinear_freq, ret; @@ -1128,10 +1148,14 @@ static int amd_pstate_epp_cpu_init(struct cpufreq_policy *policy) policy->max = policy->cpuinfo.max_freq; /* - * Set the policy to powersave to provide a valid fallback value in case + * Set the policy to provide a valid fallback value in case * the default cpufreq governor is neither powersave nor performance. */ - policy->policy = CPUFREQ_POLICY_POWERSAVE; + if (amd_pstate_acpi_pm_profile_server() || + amd_pstate_acpi_pm_profile_undefined()) + policy->policy = CPUFREQ_POLICY_PERFORMANCE; + else + policy->policy = CPUFREQ_POLICY_POWERSAVE; if (boot_cpu_has(X86_FEATURE_CPPC)) { ret = rdmsrl_on_cpu(cpudata->cpu, MSR_AMD_CPPC_REQ, &value);