summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVille Syrjälä <ville.syrjala@linux.intel.com>2025-09-19 22:29:58 +0300
committerVille Syrjälä <ville.syrjala@linux.intel.com>2025-09-23 18:12:01 +0300
commitd49564a5f7e23f08486697080e0006c606c5ebd2 (patch)
treeb8f9b7b415dfb30cc9d53a2d76cc78e937816a00
parent15bdae1072061db72027192badb276f95094da5f (diff)
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: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20250919193000.17665-12-ville.syrjala@linux.intel.com Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
-rw-r--r--drivers/gpu/drm/i915/display/skl_watermark.c15
1 files changed, 15 insertions, 0 deletions
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
*