Commit 24ad4c6c authored by Sumit Gupta's avatar Sumit Gupta Committed by Rafael J. Wysocki
Browse files

cpufreq: CPPC: Update cached perf_ctrls on sysfs write



Update the cached perf_ctrls values when writing via sysfs to keep
them in sync with hardware registers:
- store_auto_select(): update perf_ctrls.auto_sel
- store_energy_performance_preference_val(): update perf_ctrls.energy_perf

This ensures consistent cached values after sysfs writes, which
complements the cppc_get_perf() initialization during policy setup.

Signed-off-by: default avatarSumit Gupta <sumitg@nvidia.com>
Reviewed-by: default avatarPierre Gondois <pierre.gondois@arm.com>
Reviewed-by: default avatarLifeng Zheng <zhenglifeng1@huawei.com>
Link: https://patch.msgid.link/20260206142658.72583-5-sumitg@nvidia.com


Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 38428a68
Loading
Loading
Loading
Loading
+29 −2
Original line number Diff line number Diff line
@@ -855,6 +855,7 @@ static ssize_t show_auto_select(struct cpufreq_policy *policy, char *buf)
static ssize_t store_auto_select(struct cpufreq_policy *policy,
				 const char *buf, size_t count)
{
	struct cppc_cpudata *cpu_data = policy->driver_data;
	bool val;
	int ret;

@@ -866,6 +867,8 @@ static ssize_t store_auto_select(struct cpufreq_policy *policy,
	if (ret)
		return ret;

	cpu_data->perf_ctrls.auto_sel = val;

	return count;
}

@@ -916,8 +919,32 @@ static ssize_t store_##_name(struct cpufreq_policy *policy, \
CPPC_CPUFREQ_ATTR_RW_U64(auto_act_window, cppc_get_auto_act_window,
			 cppc_set_auto_act_window)

CPPC_CPUFREQ_ATTR_RW_U64(energy_performance_preference_val,
			 cppc_get_epp_perf, cppc_set_epp)
static ssize_t
show_energy_performance_preference_val(struct cpufreq_policy *policy, char *buf)
{
	return cppc_cpufreq_sysfs_show_u64(policy->cpu, cppc_get_epp_perf, buf);
}

static ssize_t
store_energy_performance_preference_val(struct cpufreq_policy *policy,
					const char *buf, size_t count)
{
	struct cppc_cpudata *cpu_data = policy->driver_data;
	u64 val;
	int ret;

	ret = kstrtou64(buf, 0, &val);
	if (ret)
		return ret;

	ret = cppc_set_epp(policy->cpu, val);
	if (ret)
		return ret;

	cpu_data->perf_ctrls.energy_perf = val;

	return count;
}

cpufreq_freq_attr_ro(freqdomain_cpus);
cpufreq_freq_attr_rw(auto_select);