Messages in this thread | | | Date | Wed, 31 Jan 2024 15:49:14 -0600 | Subject | Re: [PATCH 4/6] cpufreq:amd-pstate: get pstate transition delay and latency value from ACPI tables | From | Mario Limonciello <> |
| |
On 1/31/2024 02:50, Perry Yuan wrote: > make pstate driver initially retrieve the P-state transition delay and latency > values from the BIOS ACPI tables which has more reasonable delay and latency > values according to the platform design and requirements. > > Previously there values were hardcoded at specific value which may > have conflicted with platform and it might not reflect the most accurate or > optimized setting for the processor. > > [054h 0084 8] Preserve Mask : FFFFFFFF00000000 > [05Ch 0092 8] Write Mask : 0000000000000001 > [064h 0100 4] Command Latency : 00000FA0 > [068h 0104 4] Maximum Access Rate : 0000EA60 > [06Ch 0108 2] Minimum Turnaround Time : 0000 > > Signed-off-by: Perry Yuan <perry.yuan@amd.com>
One comment below.
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com> > --- > drivers/cpufreq/amd-pstate.c | 34 ++++++++++++++++++++++++++++++++-- > 1 file changed, 32 insertions(+), 2 deletions(-) > > diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c > index db7b36afdce2..eea2e192d748 100644 > --- a/drivers/cpufreq/amd-pstate.c > +++ b/drivers/cpufreq/amd-pstate.c > @@ -683,6 +683,36 @@ static void amd_perf_ctl_reset(unsigned int cpu) > wrmsrl_on_cpu(cpu, MSR_AMD_PERF_CTL, 0); > } > > +/** > + * Get pstate transition delay time from ACPI tables that firmware set > + * instead of using hardcode value directly. > + */ > +static u32 amd_pstate_get_transition_delay_us(unsigned int cpu) > +{ > + u32 transition_delay_ns; > + > + transition_delay_ns= cppc_get_transition_latency(cpu);
space before the =
> + if (transition_delay_ns == CPUFREQ_ETERNAL) > + return AMD_PSTATE_TRANSITION_DELAY; > + > + return transition_delay_ns / NSEC_PER_USEC; > +} > + > +/** > + * Get pstate transition latency value from ACPI tables that firmware set > + * instead of using hardcode value directly. > + */ > +static u32 amd_pstate_get_transition_latency(unsigned int cpu) > +{ > + u32 transition_latency; > + > + transition_latency = cppc_get_transition_latency(cpu); > + if (transition_latency == CPUFREQ_ETERNAL) > + return AMD_PSTATE_TRANSITION_LATENCY; > + > + return transition_latency; > +} > + > static int amd_pstate_cpu_init(struct cpufreq_policy *policy) > { > int min_freq, max_freq, nominal_freq, lowest_nonlinear_freq, ret; > @@ -725,8 +755,8 @@ static int amd_pstate_cpu_init(struct cpufreq_policy *policy) > goto free_cpudata1; > } > > - policy->cpuinfo.transition_latency = AMD_PSTATE_TRANSITION_LATENCY; > - policy->transition_delay_us = AMD_PSTATE_TRANSITION_DELAY; > + policy->cpuinfo.transition_latency = amd_pstate_get_transition_latency(policy->cpu); > + policy->transition_delay_us = amd_pstate_get_transition_delay_us(policy->cpu); > > policy->min = min_freq; > policy->max = max_freq;
| |