[AMD Official Use Only - General] > -----Original Message----- > From: Limonciello, Mario <Mario.Limonciello@xxxxxxx> > Sent: Wednesday, June 21, 2023 1:25 AM > To: Rafael J . Wysocki <rafael@xxxxxxxxxx> > Cc: Len Brown <lenb@xxxxxxxxxx>; Huang, Ray <Ray.Huang@xxxxxxx>; > linux-acpi@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx; linux- > pm@xxxxxxxxxxxxxxx; Shenoy, Gautham Ranjal > <gautham.shenoy@xxxxxxx>; Karny, Wyes <Wyes.Karny@xxxxxxx>; > Yuan, Perry <Perry.Yuan@xxxxxxx>; Limonciello, Mario > <Mario.Limonciello@xxxxxxx> > 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@xxxxxxx> > Suggested-by: Wyes Karny <Wyes.Karny@xxxxxxx> > Reviewed-by: Gautham R. Shenoy <gautham.shenoy@xxxxxxx> > Signed-off-by: Mario Limonciello <mario.limonciello@xxxxxxx> > --- > 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@xxxxxxx>