]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/i915: Tweak the read latency fixup code
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Fri, 19 Sep 2025 19:29:50 +0000 (22:29 +0300)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Tue, 23 Sep 2025 15:09:30 +0000 (18:09 +0300)
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.

Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250919193000.17665-4-ville.syrjala@linux.intel.com
drivers/gpu/drm/i915/display/skl_watermark.c

index 2bf334fe63c98f815e0685b6e8275841b01b23c1..2969cc58dabe903d1ae18e328e78a3b0b13eb0d0 100644 (file)
@@ -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;
+               }
        }
 
        /*