Commit a755d0e2 authored by Qais Yousef's avatar Qais Yousef Committed by Rafael J. Wysocki
Browse files

cpufreq: Honour transition_latency over transition_delay_us



Some platforms like Arm's Juno can have a high transition latency that
can be larger than the 2ms cap introduced. If a driver reports
a transition_latency that is higher than the cap, then use it as-is.

Update comment s/10/2/ to reflect the new cap of 2ms.

Reported-by: default avatarPierre Gondois <pierre.gondois@arm.com>
Signed-off-by: default avatarQais Yousef <qyousef@layalina.io>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent d394abcb
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -576,8 +576,17 @@ unsigned int cpufreq_policy_transition_delay_us(struct cpufreq_policy *policy)

	latency = policy->cpuinfo.transition_latency / NSEC_PER_USEC;
	if (latency) {
		unsigned int max_delay_us = 2 * MSEC_PER_SEC;

		/*
		 * If the platform already has high transition_latency, use it
		 * as-is.
		 */
		if (latency > max_delay_us)
			return latency;

		/*
		 * For platforms that can change the frequency very fast (< 10
		 * For platforms that can change the frequency very fast (< 2
		 * us), the above formula gives a decent transition delay. But
		 * for platforms where transition_latency is in milliseconds, it
		 * ends up giving unrealistic values.
@@ -586,7 +595,7 @@ unsigned int cpufreq_policy_transition_delay_us(struct cpufreq_policy *policy)
		 * a reasonable amount of time after which we should reevaluate
		 * the frequency.
		 */
		return min(latency * LATENCY_MULTIPLIER, (unsigned int)(2 * MSEC_PER_SEC));
		return min(latency * LATENCY_MULTIPLIER, max_delay_us);
	}

	return LATENCY_MULTIPLIER;