diff options
author | Ville Syrjälä <ville.syrjala@linux.intel.com> | 2025-09-19 22:29:58 +0300 |
---|---|---|
committer | Ville Syrjälä <ville.syrjala@linux.intel.com> | 2025-09-23 18:12:01 +0300 |
commit | d49564a5f7e23f08486697080e0006c606c5ebd2 (patch) | |
tree | b8f9b7b415dfb30cc9d53a2d76cc78e937816a00 | |
parent | 15bdae1072061db72027192badb276f95094da5f (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.c | 15 |
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 * |