From: "Gautham R. Shenoy" <gautham.shenoy@amd.com>
To: Mario Limonciello <mario.limonciello@amd.com>
Cc: Perry Yuan <perry.yuan@amd.com>,
linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org,
Dhananjay Ugwekar <Dhananjay.Ugwekar@amd.com>
Subject: Re: [PATCH 05/15] cpufreq/amd-pstate: Store the boost numerator as highest perf again
Date: Fri, 6 Dec 2024 11:55:01 +0530 [thread overview]
Message-ID: <Z1KYvREbwjWspe+/@BLRRASHENOY1.amd.com> (raw)
In-Reply-To: <20241205222847.7889-6-mario.limonciello@amd.com>
On Thu, Dec 05, 2024 at 04:28:37PM -0600, Mario Limonciello wrote:
> commit ad4caad58d91d ("cpufreq: amd-pstate: Merge
> amd_pstate_highest_perf_set() into amd_get_boost_ratio_numerator()")
> changed the semantics for highest perf and commit 18d9b52271213
> ("cpufreq/amd-pstate: Use nominal perf for limits when boost is disabled")
> worked around those semantic changes.
>
> This however is a confusing result and furthermore makes it awkward to
> change frequency limits and boost due to the scaling differences. Restore
> the boost numerator to highest perf again.
The patch looks good to me.
Reviewed-by: Gautham R. Shenoy <gautham.shenoy@amd.com>
--
Thanks and Regards
gautham.
>
> Suggested-by: Dhananjay Ugwekar <Dhananjay.Ugwekar@amd.com>
> Fixes: ad4caad58d91 ("cpufreq: amd-pstate: Merge amd_pstate_highest_perf_set() into amd_get_boost_ratio_numerator()")
> Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
> ---
> Documentation/admin-guide/pm/amd-pstate.rst | 4 +---
> drivers/cpufreq/amd-pstate.c | 25 ++++++++++++---------
> 2 files changed, 16 insertions(+), 13 deletions(-)
>
> diff --git a/Documentation/admin-guide/pm/amd-pstate.rst b/Documentation/admin-guide/pm/amd-pstate.rst
> index 210a808b74ec2..412423c54f258 100644
> --- a/Documentation/admin-guide/pm/amd-pstate.rst
> +++ b/Documentation/admin-guide/pm/amd-pstate.rst
> @@ -251,9 +251,7 @@ performance supported in `AMD CPPC Performance Capability <perf_cap_>`_).
> In some ASICs, the highest CPPC performance is not the one in the ``_CPC``
> table, so we need to expose it to sysfs. If boost is not active, but
> still supported, this maximum frequency will be larger than the one in
> -``cpuinfo``. On systems that support preferred core, the driver will have
> -different values for some cores than others and this will reflect the values
> -advertised by the platform at bootup.
> +``cpuinfo``.
> This attribute is read-only.
>
> ``amd_pstate_lowest_nonlinear_freq``
> diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c
> index dbe014f3c2beb..738f63d70546f 100644
> --- a/drivers/cpufreq/amd-pstate.c
> +++ b/drivers/cpufreq/amd-pstate.c
> @@ -408,15 +408,19 @@ static inline int amd_pstate_cppc_enable(bool enable)
>
> static int msr_init_perf(struct amd_cpudata *cpudata)
> {
> - u64 cap1;
> + u64 cap1, numerator;
>
> int ret = rdmsrl_safe_on_cpu(cpudata->cpu, MSR_AMD_CPPC_CAP1,
> &cap1);
> if (ret)
> return ret;
>
> - WRITE_ONCE(cpudata->highest_perf, AMD_CPPC_HIGHEST_PERF(cap1));
> - WRITE_ONCE(cpudata->max_limit_perf, AMD_CPPC_HIGHEST_PERF(cap1));
> + ret = amd_get_boost_ratio_numerator(cpudata->cpu, &numerator);
> + if (ret)
> + return ret;
> +
> + WRITE_ONCE(cpudata->highest_perf, numerator);
> + WRITE_ONCE(cpudata->max_limit_perf, numerator);
> WRITE_ONCE(cpudata->nominal_perf, AMD_CPPC_NOMINAL_PERF(cap1));
> WRITE_ONCE(cpudata->lowest_nonlinear_perf, AMD_CPPC_LOWNONLIN_PERF(cap1));
> WRITE_ONCE(cpudata->lowest_perf, AMD_CPPC_LOWEST_PERF(cap1));
> @@ -428,13 +432,18 @@ static int msr_init_perf(struct amd_cpudata *cpudata)
> static int shmem_init_perf(struct amd_cpudata *cpudata)
> {
> struct cppc_perf_caps cppc_perf;
> + u64 numerator;
>
> int ret = cppc_get_perf_caps(cpudata->cpu, &cppc_perf);
> if (ret)
> return ret;
>
> - WRITE_ONCE(cpudata->highest_perf, cppc_perf.highest_perf);
> - WRITE_ONCE(cpudata->max_limit_perf, cppc_perf.highest_perf);
> + ret = amd_get_boost_ratio_numerator(cpudata->cpu, &numerator);
> + if (ret)
> + return ret;
> +
> + WRITE_ONCE(cpudata->highest_perf, numerator);
> + WRITE_ONCE(cpudata->max_limit_perf, numerator);
> WRITE_ONCE(cpudata->nominal_perf, cppc_perf.nominal_perf);
> WRITE_ONCE(cpudata->lowest_nonlinear_perf,
> cppc_perf.lowest_nonlinear_perf);
> @@ -920,7 +929,6 @@ static int amd_pstate_init_freq(struct amd_cpudata *cpudata)
> {
> int ret;
> u32 min_freq, max_freq;
> - u64 numerator;
> u32 nominal_perf, nominal_freq;
> u32 lowest_nonlinear_perf, lowest_nonlinear_freq;
> u32 boost_ratio, lowest_nonlinear_ratio;
> @@ -942,10 +950,7 @@ static int amd_pstate_init_freq(struct amd_cpudata *cpudata)
>
> nominal_perf = READ_ONCE(cpudata->nominal_perf);
>
> - ret = amd_get_boost_ratio_numerator(cpudata->cpu, &numerator);
> - if (ret)
> - return ret;
> - boost_ratio = div_u64(numerator << SCHED_CAPACITY_SHIFT, nominal_perf);
> + boost_ratio = div_u64(cpudata->highest_perf << SCHED_CAPACITY_SHIFT, nominal_perf);
> max_freq = (nominal_freq * boost_ratio >> SCHED_CAPACITY_SHIFT) * 1000;
>
> lowest_nonlinear_perf = READ_ONCE(cpudata->lowest_nonlinear_perf);
> --
> 2.43.0
>
next prev parent reply other threads:[~2024-12-06 6:25 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-12-05 22:28 [PATCH 00/15] amd-pstate 6.14 cleanups and improvements Mario Limonciello
2024-12-05 22:28 ` [PATCH 01/15] cpufreq/amd-pstate: Add trace event for EPP perf updates Mario Limonciello
2024-12-06 5:05 ` Yuan, Perry
2024-12-06 5:44 ` Gautham R. Shenoy
2024-12-05 22:28 ` [PATCH 02/15] cpufreq/amd-pstate: convert mutex use to guard() Mario Limonciello
2024-12-06 6:15 ` Gautham R. Shenoy
2024-12-05 22:28 ` [PATCH 03/15] cpufreq/amd-pstate: Drop cached epp_policy variable Mario Limonciello
2024-12-06 6:16 ` Gautham R. Shenoy
2024-12-05 22:28 ` [PATCH 04/15] cpufreq/amd-pstate: Use FIELD_PREP and FIELD_GET macros Mario Limonciello
2024-12-06 6:21 ` Gautham R. Shenoy
2024-12-05 22:28 ` [PATCH 05/15] cpufreq/amd-pstate: Store the boost numerator as highest perf again Mario Limonciello
2024-12-06 6:25 ` Gautham R. Shenoy [this message]
2024-12-05 22:28 ` [PATCH 06/15] cpufreq/amd-pstate: Use boost numerator for upper bound of frequencies Mario Limonciello
2024-12-06 6:27 ` Gautham R. Shenoy
2024-12-05 22:28 ` [PATCH 07/15] cpufreq/amd-pstate: Only update the cached value in msr_set_epp() on success Mario Limonciello
2024-12-06 6:32 ` Gautham R. Shenoy
2024-12-05 22:28 ` [PATCH 08/15] cpufreq/amd-pstate: store all values in cpudata struct in khz Mario Limonciello
2024-12-06 6:43 ` Gautham R. Shenoy
2024-12-05 22:28 ` [PATCH 09/15] cpufreq/amd-pstate: Change amd_pstate_update_perf() to return an int Mario Limonciello
2024-12-06 6:43 ` Gautham R. Shenoy
2024-12-05 22:28 ` [PATCH 10/15] cpufreq/amd-pstate: Move limit updating code Mario Limonciello
2024-12-06 3:10 ` kernel test robot
2024-12-06 15:19 ` Gautham R. Shenoy
2024-12-05 22:28 ` [PATCH 11/15] cpufreq/amd-pstate: Cache EPP value and use that everywhere Mario Limonciello
2024-12-06 16:14 ` Gautham R. Shenoy
2024-12-06 16:16 ` Mario Limonciello
2024-12-05 22:28 ` [PATCH 12/15] cpufreq/amd-pstate: Always write EPP value when updating perf Mario Limonciello
2024-12-05 22:28 ` [PATCH 13/15] cpufreq/amd-pstate: Check if CPPC request has changed before writing to the MSR or shared memory Mario Limonciello
2024-12-05 22:28 ` [PATCH 14/15] cpufreq/amd-pstate: Drop ret variable from amd_pstate_set_energy_pref_index() Mario Limonciello
2024-12-05 22:28 ` [PATCH 15/15] cpufreq/amd-pstate: Set different default EPP policy for Epyc and Ryzen Mario Limonciello
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Z1KYvREbwjWspe+/@BLRRASHENOY1.amd.com \
--to=gautham.shenoy@amd.com \
--cc=Dhananjay.Ugwekar@amd.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=mario.limonciello@amd.com \
--cc=perry.yuan@amd.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.