Messages in this thread Patch in this message | | | Date | Wed, 14 Feb 2024 12:07:11 +0530 | From | "Gautham R. Shenoy" <> | Subject | Re: [PATCH 2/7] cpufreq: amd-pstate: initialize new core precision boost state |
| |
Hello Perry,
On Fri, Jan 26, 2024 at 04:08:05PM +0800, Perry Yuan wrote: > From: Perry Yuan <Perry.Yuan@amd.com>
[..snip..]
> @@ -632,18 +645,27 @@ static int amd_get_lowest_nonlinear_freq(struct amd_cpudata *cpudata) > return lowest_nonlinear_freq * 1000; > } > > -static void amd_pstate_boost_init(struct amd_cpudata *cpudata) > +static int amd_pstate_boost_init(struct amd_cpudata *cpudata) > { > - u32 highest_perf, nominal_perf; > + u64 boost_state, boost_val;
> + int ret; > > - highest_perf = READ_ONCE(cpudata->highest_perf); > - nominal_perf = READ_ONCE(cpudata->nominal_perf); > + ret = rdmsrl_on_cpu(cpudata->cpu, MSR_K7_HWCR, &boost_val);
Use hwcr_val instead of boost_val ?
> + if (ret) { > + pr_err_once("failed to read initial CPU boost state!\n"); > + return ret; > + } > > - if (highest_perf <= nominal_perf) > - return; > + boost_state = (boost_val >> 25) & 0x1;
How about the following ?
boost_disabled = (hwcr_val & MSR_K7_HWCR_CPB_DIS);
> + if (!boost_state) {
if (!boost_disabled) {
> + global.cpb_supported = true; > + global.cpb_boost = true; > + } else { > + global.cpb_supported = false; > + global.cpb_boost = false; > + } > > - cpudata->boost_supported = true; > - current_pstate_driver->boost_enabled = true; > + return ret; > } > > static void amd_perf_ctl_reset(unsigned int cpu) > @@ -676,6 +698,9 @@ static int amd_pstate_cpu_init(struct cpufreq_policy *policy) > if (ret) > goto free_cpudata1; > > + /* initialize cpu cores boot state */ > + amd_pstate_boost_init(cpudata); > + > min_freq = amd_get_min_freq(cpudata); > max_freq = amd_get_max_freq(cpudata); > nominal_freq = amd_get_nominal_freq(cpudata); > @@ -725,7 +750,6 @@ static int amd_pstate_cpu_init(struct cpufreq_policy *policy) > > policy->driver_data = cpudata; > > - amd_pstate_boost_init(cpudata); > if (!current_pstate_driver->adjust_perf) > current_pstate_driver->adjust_perf = amd_pstate_adjust_perf; > > @@ -1093,6 +1117,9 @@ static int amd_pstate_epp_cpu_init(struct cpufreq_policy *policy) > if (ret) > goto free_cpudata1; > > + /* initialize cpu cores boot state */ > + amd_pstate_boost_init(cpudata); > + > min_freq = amd_get_min_freq(cpudata); > max_freq = amd_get_max_freq(cpudata); > nominal_freq = amd_get_nominal_freq(cpudata); > @@ -1143,7 +1170,6 @@ static int amd_pstate_epp_cpu_init(struct cpufreq_policy *policy) > return ret; > WRITE_ONCE(cpudata->cppc_cap1_cached, value); > } > - amd_pstate_boost_init(cpudata); > > return 0; > > diff --git a/include/linux/amd-pstate.h b/include/linux/amd-pstate.h > index 446394f84606..66d939a344b1 100644 > --- a/include/linux/amd-pstate.h > +++ b/include/linux/amd-pstate.h > @@ -80,7 +80,6 @@ struct amd_cpudata { > struct amd_aperf_mperf prev; > > u64 freq; > - bool boost_supported; > > /* EPP feature related attributes*/ > s16 epp_policy; > -- > 2.34.1 >
Otherwise looks good to me. -- Thanks and Regards gautham.
| |