Commit 971e2c87 authored by Rafael J. Wysocki's avatar Rafael J. Wysocki
Browse files

Merge tag 'amd-pstate-v6.17-2025-09-04' of...

Merge tag 'amd-pstate-v6.17-2025-09-04' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/superm1/linux

Merge amd-pstate content for 6.17 (09/04/25) from Mario Limonciello:

"Fixes for regressions found from refactor around
 EPP handling at suspend/resume and minimum frequency
 while using the performance governor."

* tag 'amd-pstate-v6.17-2025-09-04' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/superm1/linux:
  cpufreq/amd-pstate: Fix a regression leading to EPP 0 after resume
  cpufreq/amd-pstate: Fix setting of CPPC.min_perf in active mode for performance governor
parents 76eeb9b8 ba3319e5
Loading
Loading
Loading
Loading
+11 −8
Original line number Diff line number Diff line
@@ -1554,13 +1554,15 @@ static void amd_pstate_epp_cpu_exit(struct cpufreq_policy *policy)
	pr_debug("CPU %d exiting\n", policy->cpu);
}

static int amd_pstate_epp_update_limit(struct cpufreq_policy *policy)
static int amd_pstate_epp_update_limit(struct cpufreq_policy *policy, bool policy_change)
{
	struct amd_cpudata *cpudata = policy->driver_data;
	union perf_cached perf;
	u8 epp;

	if (policy->min != cpudata->min_limit_freq || policy->max != cpudata->max_limit_freq)
	if (policy_change ||
	    policy->min != cpudata->min_limit_freq ||
	    policy->max != cpudata->max_limit_freq)
		amd_pstate_update_min_max_limit(policy);

	if (cpudata->policy == CPUFREQ_POLICY_PERFORMANCE)
@@ -1584,7 +1586,7 @@ static int amd_pstate_epp_set_policy(struct cpufreq_policy *policy)

	cpudata->policy = policy->policy;

	ret = amd_pstate_epp_update_limit(policy);
	ret = amd_pstate_epp_update_limit(policy, true);
	if (ret)
		return ret;

@@ -1626,13 +1628,14 @@ static int amd_pstate_suspend(struct cpufreq_policy *policy)
	 * min_perf value across kexec reboots. If this CPU is just resumed back without kexec,
	 * the limits, epp and desired perf will get reset to the cached values in cpudata struct
	 */
	ret = amd_pstate_update_perf(policy, perf.bios_min_perf, 0U, 0U, 0U, false);
	ret = amd_pstate_update_perf(policy, perf.bios_min_perf,
				     FIELD_GET(AMD_CPPC_DES_PERF_MASK, cpudata->cppc_req_cached),
				     FIELD_GET(AMD_CPPC_MAX_PERF_MASK, cpudata->cppc_req_cached),
				     FIELD_GET(AMD_CPPC_EPP_PERF_MASK, cpudata->cppc_req_cached),
				     false);
	if (ret)
		return ret;

	/* invalidate to ensure it's rewritten during resume */
	cpudata->cppc_req_cached = 0;

	/* set this flag to avoid setting core offline*/
	cpudata->suspended = true;

@@ -1658,7 +1661,7 @@ static int amd_pstate_epp_resume(struct cpufreq_policy *policy)
		int ret;

		/* enable amd pstate from suspend state*/
		ret = amd_pstate_epp_update_limit(policy);
		ret = amd_pstate_epp_update_limit(policy, false);
		if (ret)
			return ret;