Commit d49564a5 authored by Ville Syrjälä's avatar Ville Syrjälä
Browse files

drm/i915: Make wm latencies monotonic



Some systems (eg. LNL Lenovo Thinkapd X1 Carbon) declare
semi-bogus non-monotonic WM latency values:
 WM0 latency not provided
 WM1 latency 100 usec
 WM2 latency 100 usec
 WM3 latency 100 usec
 WM4 latency 93 usec
 WM5 latency 100 usec

Apparently Windows just papers over the issue by bumping the
latencies for the higher watermark levels to make them monotonic
again. Do the same.

Cc: Luca Coelho <luciano.coelho@intel.com>
Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250919193000.17665-12-ville.syrjala@linux.intel.com


Reviewed-by: default avatarLuca Coelho <luciano.coelho@intel.com>
parent 15bdae10
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -3236,6 +3236,19 @@ static void sanitize_wm_latency(struct intel_display *display)
		wm[level] = 0;
}

static void make_wm_latency_monotonic(struct intel_display *display)
{
	u16 *wm = display->wm.skl_latency;
	int level, num_levels = display->wm.num_levels;

	for (level = 1; level < num_levels; level++) {
		if (wm[level] == 0)
			break;

		wm[level] = max(wm[level], wm[level-1]);
	}
}

static void
adjust_wm_latency(struct intel_display *display)
{
@@ -3246,6 +3259,8 @@ adjust_wm_latency(struct intel_display *display)

	sanitize_wm_latency(display);

	make_wm_latency_monotonic(display);

	/*
	 * WaWmMemoryReadLatency
	 *