On Fri, 2025-09-19 at 22:29 +0300, Ville Syrjala wrote: > From: Ville Syrjälä <[email protected]> > > 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 <[email protected]> > Signed-off-by: Ville Syrjälä <[email protected]> > ---
Reviewed-by: Luca Coelho <[email protected]> -- Cheers, Luca. > drivers/gpu/drm/i915/display/skl_watermark.c | 15 +++++++++++++++ > 1 file changed, 15 insertions(+) > > diff --git a/drivers/gpu/drm/i915/display/skl_watermark.c > b/drivers/gpu/drm/i915/display/skl_watermark.c > index d83772c6ea9a..2a40c135cb96 100644 > --- a/drivers/gpu/drm/i915/display/skl_watermark.c > +++ b/drivers/gpu/drm/i915/display/skl_watermark.c > @@ -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 > *
