Messages in this thread Patch in this message | | | Subject | Re: [PATCH v3 18/21] cpupower: enable boost state support for amd-pstate module | From | Nathan Fontenot <> | Date | Tue, 2 Nov 2021 15:11:09 -0500 |
| |
On 10/29/21 8:02 AM, Huang Rui wrote: > The legacy ACPI hardware P-States function has 3 P-States on ACPI table, > the CPU frequency only can be switched between the 3 P-States. While the > processor supports the boost state, it will have another boost state > that the frequency can be higher than P0 state, and the state can be > decoded by the function of decode_pstates() and read by > amd_pci_get_num_boost_states(). > > However, the new AMD P-States function is different than legacy ACPI > hardware P-State on AMD processors. That has a finer grain frequency > range between the highest and lowest frequency. And boost frequency is > actually the frequency which is mapped on highest performance ratio. The > similiar previous P0 frequency is mapped on nominal performance ratio.
s/similiar/similar/
> If the highest performance on the processor is higher than nominal > performance, then we think the current processor supports the boost > state. And it uses amd_pstate_boost_init() to initialize boost for AMD > P-States function. > > Signed-off-by: Huang Rui <ray.huang@amd.com> > --- > tools/power/cpupower/utils/helpers/amd.c | 18 ++++++++++++++++++ > tools/power/cpupower/utils/helpers/helpers.h | 5 +++++ > tools/power/cpupower/utils/helpers/misc.c | 2 ++ > 3 files changed, 25 insertions(+) > > diff --git a/tools/power/cpupower/utils/helpers/amd.c b/tools/power/cpupower/utils/helpers/amd.c > index f233a6ab75ac..92b9fb631768 100644 > --- a/tools/power/cpupower/utils/helpers/amd.c > +++ b/tools/power/cpupower/utils/helpers/amd.c > @@ -182,5 +182,23 @@ static unsigned long amd_pstate_get_data(unsigned int cpu, > MAX_AMD_PSTATE_VALUE_READ_FILES); > } > > +void amd_pstate_boost_init(unsigned int cpu, int *support, int *active) > +{ > + unsigned long highest_perf, nominal_perf, cpuinfo_min, > + cpuinfo_max, amd_pstate_max; > + > + highest_perf = amd_pstate_get_data(cpu, AMD_PSTATE_HIGHEST_PERF); > + nominal_perf = amd_pstate_get_data(cpu, AMD_PSTATE_NOMINAL_PERF); > + > + *support = highest_perf > nominal_perf ? 1 : 0; > + if (!(*support)) > + return; > + > + cpufreq_get_hardware_limits(cpu, &cpuinfo_min, &cpuinfo_max); > + amd_pstate_max = amd_pstate_get_data(cpu, AMD_PSTATE_MAX_FREQ); > + > + *active = cpuinfo_max == amd_pstate_max ? 1 : 0; > +} > + > /* AMD P-States Helper Functions ***************/ > #endif /* defined(__i386__) || defined(__x86_64__) */ > diff --git a/tools/power/cpupower/utils/helpers/helpers.h b/tools/power/cpupower/utils/helpers/helpers.h > index e03cc97297aa..c03925bea655 100644 > --- a/tools/power/cpupower/utils/helpers/helpers.h > +++ b/tools/power/cpupower/utils/helpers/helpers.h > @@ -140,6 +140,8 @@ extern int cpufreq_has_boost_support(unsigned int cpu, int *support, > > /* AMD P-States stuff **************************/ > extern bool cpupower_amd_pstate_enabled(void); > +extern void amd_pstate_boost_init(unsigned int cpu, > + int *support, int *active); > > /* AMD P-States stuff **************************/ > > @@ -177,6 +179,9 @@ static inline int cpufreq_has_boost_support(unsigned int cpu, int *support, > > static inline bool cpupower_amd_pstate_enabled(void) > { return false; } > +static void amd_pstate_boost_init(unsigned int cpu, > + int *support, int *active) > +{ return; }
I don't believe the return statement is needed here, can just be {}
-Nathan
> > /* cpuid and cpuinfo helpers **************************/ > > diff --git a/tools/power/cpupower/utils/helpers/misc.c b/tools/power/cpupower/utils/helpers/misc.c > index 0c483cdefcc2..e0d3145434d3 100644 > --- a/tools/power/cpupower/utils/helpers/misc.c > +++ b/tools/power/cpupower/utils/helpers/misc.c > @@ -41,6 +41,8 @@ int cpufreq_has_boost_support(unsigned int cpu, int *support, int *active, > if (ret) > return ret; > } > + } else if (cpupower_cpu_info.caps & CPUPOWER_CAP_AMD_PSTATE) { > + amd_pstate_boost_init(cpu, support, active); > } else if (cpupower_cpu_info.caps & CPUPOWER_CAP_INTEL_IDA) > *support = *active = 1; > return 0; >
| |