On Fri, 2025-09-05 at 17:58 +0300, Ville Syrjala wrote: > From: Ville Syrjälä <ville.syrj...@linux.intel.com> > > If WM0 latency is zero we need to bump it (and the WM1+ latencies) > but a fixed amount. But any WM1+ level with zero latency must > not be touched since that indicates that corresponding WM level > isn't supported. > > Currently the loop doing that adjustment does work, but only because > the previous loop modified the num_levels used as the loop boundary. > This all seems a bit too fragile. Remove the num_levels adjustment > and instead adjust the read latency loop to abort when it encounters > a zero latency value. > > Signed-off-by: Ville Syrjälä <ville.syrj...@linux.intel.com> > ---
Reviewed-by: Luca Coelho <luciano.coe...@intel.com> -- Cheers, Luca. > drivers/gpu/drm/i915/display/skl_watermark.c | 10 +++++++--- > 1 file changed, 7 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/skl_watermark.c > b/drivers/gpu/drm/i915/display/skl_watermark.c > index 8c434bc96971..805481c92154 100644 > --- a/drivers/gpu/drm/i915/display/skl_watermark.c > +++ b/drivers/gpu/drm/i915/display/skl_watermark.c > @@ -3198,8 +3198,6 @@ adjust_wm_latency(struct intel_display *display, > if (wm[level] == 0) { > for (i = level + 1; i < num_levels; i++) > wm[i] = 0; > - > - num_levels = level; > break; > } > } > @@ -3212,8 +3210,14 @@ adjust_wm_latency(struct intel_display *display, > * from the punit when level 0 response data is 0us. > */ > if (wm[0] == 0) { > - for (level = 0; level < num_levels; level++) > + wm[0] += read_latency; > + > + for (level = 1; level < num_levels; level++) { > + if (wm[level] == 0) > + break; > + > wm[level] += read_latency; > + } > } > > /*