Skip to content

Commit 68cb0e7

Browse files
committed
cpufreq/amd-pstate: store all values in cpudata struct in khz
Storing values in the cpudata structure in different units leads to confusion and hardcoded conversions elsewhere. After ratios are calculated store everything in khz for any future use. Adjust all relevant consumers for this change as well. Suggested-by: Dhananjay Ugwekar <Dhananjay.Ugwekar@amd.com> Reviewed-by: Gautham R. Shenoy <gautham.shenoy@amd.com> Link: https://lore.kernel.org/r/20241209185248.16301-9-mario.limonciello@amd.com Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
1 parent 474e721 commit 68cb0e7

File tree

2 files changed

+19
-21
lines changed

2 files changed

+19
-21
lines changed

drivers/cpufreq/amd-pstate-ut.c

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -207,22 +207,20 @@ static void amd_pstate_ut_check_freq(u32 index)
207207
int cpu = 0;
208208
struct cpufreq_policy *policy = NULL;
209209
struct amd_cpudata *cpudata = NULL;
210-
u32 nominal_freq_khz;
211210

212211
for_each_possible_cpu(cpu) {
213212
policy = cpufreq_cpu_get(cpu);
214213
if (!policy)
215214
break;
216215
cpudata = policy->driver_data;
217216

218-
nominal_freq_khz = cpudata->nominal_freq*1000;
219-
if (!((cpudata->max_freq >= nominal_freq_khz) &&
220-
(nominal_freq_khz > cpudata->lowest_nonlinear_freq) &&
217+
if (!((cpudata->max_freq >= cpudata->nominal_freq) &&
218+
(cpudata->nominal_freq > cpudata->lowest_nonlinear_freq) &&
221219
(cpudata->lowest_nonlinear_freq > cpudata->min_freq) &&
222220
(cpudata->min_freq > 0))) {
223221
amd_pstate_ut_cases[index].result = AMD_PSTATE_UT_RESULT_FAIL;
224222
pr_err("%s cpu%d max=%d >= nominal=%d > lowest_nonlinear=%d > min=%d > 0, the formula is incorrect!\n",
225-
__func__, cpu, cpudata->max_freq, nominal_freq_khz,
223+
__func__, cpu, cpudata->max_freq, cpudata->nominal_freq,
226224
cpudata->lowest_nonlinear_freq, cpudata->min_freq);
227225
goto skip_test;
228226
}
@@ -236,13 +234,13 @@ static void amd_pstate_ut_check_freq(u32 index)
236234

237235
if (cpudata->boost_supported) {
238236
if ((policy->max == cpudata->max_freq) ||
239-
(policy->max == nominal_freq_khz))
237+
(policy->max == cpudata->nominal_freq))
240238
amd_pstate_ut_cases[index].result = AMD_PSTATE_UT_RESULT_PASS;
241239
else {
242240
amd_pstate_ut_cases[index].result = AMD_PSTATE_UT_RESULT_FAIL;
243241
pr_err("%s cpu%d policy_max=%d should be equal cpu_max=%d or cpu_nominal=%d !\n",
244242
__func__, cpu, policy->max, cpudata->max_freq,
245-
nominal_freq_khz);
243+
cpudata->nominal_freq);
246244
goto skip_test;
247245
}
248246
} else {

drivers/cpufreq/amd-pstate.c

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -739,8 +739,8 @@ static int amd_pstate_cpu_boost_update(struct cpufreq_policy *policy, bool on)
739739

740740
if (on)
741741
policy->cpuinfo.max_freq = max_freq;
742-
else if (policy->cpuinfo.max_freq > nominal_freq * 1000)
743-
policy->cpuinfo.max_freq = nominal_freq * 1000;
742+
else if (policy->cpuinfo.max_freq > nominal_freq)
743+
policy->cpuinfo.max_freq = nominal_freq;
744744

745745
policy->max = policy->cpuinfo.max_freq;
746746

@@ -940,29 +940,29 @@ static int amd_pstate_init_freq(struct amd_cpudata *cpudata)
940940
return ret;
941941

942942
if (quirks && quirks->lowest_freq)
943-
min_freq = quirks->lowest_freq * 1000;
943+
min_freq = quirks->lowest_freq;
944944
else
945-
min_freq = cppc_perf.lowest_freq * 1000;
945+
min_freq = cppc_perf.lowest_freq;
946946

947947
if (quirks && quirks->nominal_freq)
948-
nominal_freq = quirks->nominal_freq ;
948+
nominal_freq = quirks->nominal_freq;
949949
else
950950
nominal_freq = cppc_perf.nominal_freq;
951951

952952
nominal_perf = READ_ONCE(cpudata->nominal_perf);
953953

954954
boost_ratio = div_u64(cpudata->highest_perf << SCHED_CAPACITY_SHIFT, nominal_perf);
955-
max_freq = (nominal_freq * boost_ratio >> SCHED_CAPACITY_SHIFT) * 1000;
955+
max_freq = (nominal_freq * boost_ratio >> SCHED_CAPACITY_SHIFT);
956956

957957
lowest_nonlinear_perf = READ_ONCE(cpudata->lowest_nonlinear_perf);
958958
lowest_nonlinear_ratio = div_u64(lowest_nonlinear_perf << SCHED_CAPACITY_SHIFT,
959959
nominal_perf);
960-
lowest_nonlinear_freq = (nominal_freq * lowest_nonlinear_ratio >> SCHED_CAPACITY_SHIFT) * 1000;
960+
lowest_nonlinear_freq = (nominal_freq * lowest_nonlinear_ratio >> SCHED_CAPACITY_SHIFT);
961961

962-
WRITE_ONCE(cpudata->min_freq, min_freq);
963-
WRITE_ONCE(cpudata->lowest_nonlinear_freq, lowest_nonlinear_freq);
964-
WRITE_ONCE(cpudata->nominal_freq, nominal_freq);
965-
WRITE_ONCE(cpudata->max_freq, max_freq);
962+
WRITE_ONCE(cpudata->min_freq, min_freq * 1000);
963+
WRITE_ONCE(cpudata->lowest_nonlinear_freq, lowest_nonlinear_freq * 1000);
964+
WRITE_ONCE(cpudata->nominal_freq, nominal_freq * 1000);
965+
WRITE_ONCE(cpudata->max_freq, max_freq * 1000);
966966

967967
/**
968968
* Below values need to be initialized correctly, otherwise driver will fail to load
@@ -972,13 +972,13 @@ static int amd_pstate_init_freq(struct amd_cpudata *cpudata)
972972
*/
973973
if (min_freq <= 0 || max_freq <= 0 || nominal_freq <= 0 || min_freq > max_freq) {
974974
pr_err("min_freq(%d) or max_freq(%d) or nominal_freq(%d) value is incorrect\n",
975-
min_freq, max_freq, nominal_freq * 1000);
975+
min_freq, max_freq, nominal_freq);
976976
return -EINVAL;
977977
}
978978

979-
if (lowest_nonlinear_freq <= min_freq || lowest_nonlinear_freq > nominal_freq * 1000) {
979+
if (lowest_nonlinear_freq <= min_freq || lowest_nonlinear_freq > nominal_freq) {
980980
pr_err("lowest_nonlinear_freq(%d) value is out of range [min_freq(%d), nominal_freq(%d)]\n",
981-
lowest_nonlinear_freq, min_freq, nominal_freq * 1000);
981+
lowest_nonlinear_freq, min_freq, nominal_freq);
982982
return -EINVAL;
983983
}
984984

0 commit comments

Comments
 (0)