> Subject: [PATCH v4 01/11] drm/i915/wm: Do not make latency values monotonic
> on Xe3 onward
> 
> The Windows driver is rejecting non-monotonic ranges latency values for Xe3.
> Let's make sure that we do not call make_wm_latency_monotonic() for Xe3 and
> beyond.

Idt saying we are doing It because Windows driver is doing it is the correct 
reason to do this.
This may very well be needed but I think its better to add the right reason 
here.
Also Bspec no. at trailer if available.

Rest looks good to me

Regards,
Suraj Kandpal

> 
> Also, because of that, let's add a check at the end of
> adjust_wm_latency() to ensure we raise a warning if the final list of latency 
> values
> is not monotonic.
> 
> Cc: Ville Syrjälä <[email protected]>
> Suggested-by: Ville Syrjälä <[email protected]>
> Signed-off-by: Gustavo Sousa <[email protected]>
> ---
>  drivers/gpu/drm/i915/display/skl_watermark.c | 17 ++++++++++++++++-
>  1 file changed, 16 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/skl_watermark.c
> b/drivers/gpu/drm/i915/display/skl_watermark.c
> index 36a266f882d1..ed55fe84e930 100644
> --- a/drivers/gpu/drm/i915/display/skl_watermark.c
> +++ b/drivers/gpu/drm/i915/display/skl_watermark.c
> @@ -3218,6 +3218,18 @@ static void make_wm_latency_monotonic(struct
> intel_display *display)
>       }
>  }
> 
> +static bool is_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] < wm[level - 1])
> +                     return false;
> +
> +     return true;
> +}
> +
>  static void
>  adjust_wm_latency(struct intel_display *display)  { @@ -3228,7 +3240,8 @@
> adjust_wm_latency(struct intel_display *display)
> 
>       sanitize_wm_latency(display);
> 
> -     make_wm_latency_monotonic(display);
> +     if (DISPLAY_VER(display) < 30)
> +             make_wm_latency_monotonic(display);
> 
>       /*
>        * WaWmMemoryReadLatency
> @@ -3248,6 +3261,8 @@ adjust_wm_latency(struct intel_display *display)
>        */
>       if (need_16gb_dimm_wa(display))
>               increase_wm_latency(display, 1);
> +
> +     drm_WARN_ON(display->drm, !is_wm_latency_monotonic(display));
>  }
> 
>  static void mtl_read_wm_latency(struct intel_display *display)
> 
> --
> 2.51.0

Reply via email to