On Mon, Aug 26, 2024 at 04:13:54PM -0500, Mario Limonciello wrote: > From: Mario Limonciello <mario.limonciello@xxxxxxx> > > amd_get_highest_perf() is a helper used to get the highest perf Nit: amd_pstate_get_highest_perf() is the existing helper, that is being moved to the cppc handling code and being renamed as amd_get_highest_perf(). > value on AMD systems. It's used in amd-pstate as part of preferred > core handling, but applicable for acpi-cpufreq as well. > > Move it out to cppc handling code. Otherwise, looks good to me. Reviewed-by: Gautham R. Shenoy <gautham.shenoy@xxxxxxx> -- Thanks and Regards gautham. > > Signed-off-by: Mario Limonciello <mario.limonciello@xxxxxxx> > --- > arch/x86/kernel/acpi/cppc.c | 30 ++++++++++++++++++++++++++++++ > drivers/cpufreq/amd-pstate.c | 34 ++-------------------------------- > include/acpi/cppc_acpi.h | 2 ++ > 3 files changed, 34 insertions(+), 32 deletions(-) > > diff --git a/arch/x86/kernel/acpi/cppc.c b/arch/x86/kernel/acpi/cppc.c > index e94507110ca24..5a6c01a1b0d95 100644 > --- a/arch/x86/kernel/acpi/cppc.c > +++ b/arch/x86/kernel/acpi/cppc.c > @@ -119,6 +119,36 @@ void init_freq_invariance_cppc(void) > mutex_unlock(&freq_invariance_lock); > } > > +/* > + * Get the highest performance register value. > + * @cpu: CPU from which to get highest performance. > + * @highest_perf: Return address for highest performance value. > + * > + * Return: 0 for success, negative error code otherwise. > + */ > +int amd_get_highest_perf(unsigned int cpu, u32 *highest_perf) > +{ > + u64 val; > + int ret; > + > + if (cpu_feature_enabled(X86_FEATURE_CPPC)) { > + ret = rdmsrl_safe_on_cpu(cpu, MSR_AMD_CPPC_CAP1, &val); > + if (ret) > + goto out; > + > + val = AMD_CPPC_HIGHEST_PERF(val); > + } else { > + ret = cppc_get_highest_perf(cpu, &val); > + if (ret) > + goto out; > + } > + > + WRITE_ONCE(*highest_perf, (u32)val); > +out: > + return ret; > +} > +EXPORT_SYMBOL_GPL(amd_get_highest_perf); > + > /** > * amd_get_boost_ratio_numerator: Get the numerator to use for boost ratio calculation > * @cpu: CPU to get numerator for. > diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c > index 89bda7a2bb8d1..f470b5700db58 100644 > --- a/drivers/cpufreq/amd-pstate.c > +++ b/drivers/cpufreq/amd-pstate.c > @@ -803,36 +803,6 @@ static void amd_pstste_sched_prefcore_workfn(struct work_struct *work) > } > static DECLARE_WORK(sched_prefcore_work, amd_pstste_sched_prefcore_workfn); > > -/* > - * Get the highest performance register value. > - * @cpu: CPU from which to get highest performance. > - * @highest_perf: Return address. > - * > - * Return: 0 for success, -EIO otherwise. > - */ > -static int amd_pstate_get_highest_perf(int cpu, u32 *highest_perf) > -{ > - int ret; > - > - if (cpu_feature_enabled(X86_FEATURE_CPPC)) { > - u64 cap1; > - > - ret = rdmsrl_safe_on_cpu(cpu, MSR_AMD_CPPC_CAP1, &cap1); > - if (ret) > - return ret; > - WRITE_ONCE(*highest_perf, AMD_CPPC_HIGHEST_PERF(cap1)); > - } else { > - u64 cppc_highest_perf; > - > - ret = cppc_get_highest_perf(cpu, &cppc_highest_perf); > - if (ret) > - return ret; > - WRITE_ONCE(*highest_perf, cppc_highest_perf); > - } > - > - return (ret); > -} > - > #define CPPC_MAX_PERF U8_MAX > > static void amd_pstate_init_prefcore(struct amd_cpudata *cpudata) > @@ -840,7 +810,7 @@ static void amd_pstate_init_prefcore(struct amd_cpudata *cpudata) > int ret, prio; > u32 highest_perf; > > - ret = amd_pstate_get_highest_perf(cpudata->cpu, &highest_perf); > + ret = amd_get_highest_perf(cpudata->cpu, &highest_perf); > if (ret) > return; > > @@ -879,7 +849,7 @@ static void amd_pstate_update_limits(unsigned int cpu) > if ((!amd_pstate_prefcore) || (!cpudata->hw_prefcore)) > goto free_cpufreq_put; > > - ret = amd_pstate_get_highest_perf(cpu, &cur_high); > + ret = amd_get_highest_perf(cpu, &cur_high); > if (ret) > goto free_cpufreq_put; > > diff --git a/include/acpi/cppc_acpi.h b/include/acpi/cppc_acpi.h > index f25a881cd46dd..2246ce0630362 100644 > --- a/include/acpi/cppc_acpi.h > +++ b/include/acpi/cppc_acpi.h > @@ -137,8 +137,10 @@ struct cppc_cpudata { > }; > > #ifdef CONFIG_CPU_SUP_AMD > +extern int amd_get_highest_perf(unsigned int cpu, u32 *highest_perf); > extern int amd_get_boost_ratio_numerator(unsigned int cpu, u64 *numerator); > #else /* !CONFIG_CPU_SUP_AMD */ > +static inline int amd_get_highest_perf(unsigned int cpu, u32 *highest_perf) { return -ENODEV; } > static inline int amd_get_boost_ratio_numerator(unsigned int cpu, u64 *numerator) { return -ENODEV; } > #endif /* !CONFIG_CPU_SUP_AMD */ > > -- > 2.43.0 >