cpufreq/amd-pstate: Refactor max frequency calculation
authorNaresh Solanki <naresh.solanki@9elements.com>
Thu, 19 Dec 2024 20:18:32 +0000 (01:48 +0530)
committerMario Limonciello <mario.limonciello@amd.com>
Sat, 4 Jan 2025 05:44:07 +0000 (23:44 -0600)
commit857a61c2ce74e30fc3b10bc89d68ddd8d05b188c
treed47ecbeac41380272020a21bc34dcc9c8d9ecea4
parentfd604ae6c261c5a56bb977ae99f875bbd7264a3f
cpufreq/amd-pstate: Refactor max frequency calculation

The previous approach introduced roundoff errors during division when
calculating the boost ratio. This, in turn, affected the maximum
frequency calculation, often resulting in reporting lower frequency
values.

For example, on the Glinda SoC based board with the following
parameters:

max_perf = 208
nominal_perf = 100
nominal_freq = 2600 MHz

The Linux kernel previously calculated the frequency as:
freq = ((max_perf * 1024 / nominal_perf) * nominal_freq) / 1024
freq = 5405 MHz  // Integer arithmetic.

With the updated formula:
freq = (max_perf * nominal_freq) / nominal_perf
freq = 5408 MHz

This change ensures more accurate frequency calculations by eliminating
unnecessary shifts and divisions, thereby improving precision.

Signed-off-by: Naresh Solanki <naresh.solanki@9elements.com>
[ML: trim the changelog from commit message]
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
Link: https://lore.kernel.org/r/20241219201833.2750998-1-naresh.solanki@9elements.com
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
drivers/cpufreq/amd-pstate.c