I have tested this patch series (with [2/2] drm/i915: Fix SKL cursor 
watermarks, X-Patchwork-Id: 143965, 143966) and I can confirm it fixes 
https://bugs.freedesktop.org/show_bug.cgi?id=100195

Tested-by: Dorota Czaplejewicz <dorota.czaplejew...@collabora.co.uk>

On Tue, 14 Mar 2017 17:10:49 +0200
ville.syrj...@linux.intel.com wrote:

> From: Ville Syrjälä <ville.syrj...@linux.intel.com>
> 
> All platforms that lack double buffered watermarks will need to
> handle the legacy cursor updates in the same way. So let's extract the
> logic to determine the plane visibility into a small helper. For
> simplicity we'll make the function DTRT for any plane, but only apply
> the special sauce for cursor planes.
> 
> Signed-off-by: Ville Syrjälä <ville.syrj...@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/intel_pm.c | 39 +++++++++++++++++++++++++++------------
>  1 file changed, 27 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
> index 2ca38ae4421e..3b0d379b6f38 100644
> --- a/drivers/gpu/drm/i915/intel_pm.c
> +++ b/drivers/gpu/drm/i915/intel_pm.c
> @@ -655,6 +655,29 @@ static unsigned long intel_calculate_wm(unsigned long 
> clock_in_khz,
>       return wm_size;
>  }
>  
> +static bool intel_wm_plane_visible(const struct intel_crtc_state *crtc_state,
> +                                const struct intel_plane_state *plane_state)
> +{
> +     struct intel_plane *plane = to_intel_plane(plane_state->base.plane);
> +
> +     /* FIXME check the 'enable' instead */
> +     if (!crtc_state->base.active)
> +             return false;
> +
> +     /*
> +      * Treat cursor with fb as always visible since cursor updates
> +      * can happen faster than the vrefresh rate, and the current
> +      * watermark code doesn't handle that correctly. Cursor updates
> +      * which set/clear the fb or change the cursor size are going
> +      * to get throttled by intel_legacy_cursor_update() to work
> +      * around this problem with the watermark code.
> +      */
> +     if (plane->id == PLANE_CURSOR)
> +             return plane_state->base.fb != NULL;
> +     else
> +             return plane_state->base.visible;
> +}
> +
>  static struct intel_crtc *single_enabled_crtc(struct drm_i915_private 
> *dev_priv)
>  {
>       struct intel_crtc *crtc, *enabled = NULL;
> @@ -1961,7 +1984,7 @@ static uint32_t ilk_compute_pri_wm(const struct 
> intel_crtc_state *cstate,
>       uint32_t method1, method2;
>       int cpp;
>  
> -     if (!cstate->base.active || !pstate->base.visible)
> +     if (!intel_wm_plane_visible(cstate, pstate))
>               return 0;
>  
>       cpp = pstate->base.fb->format->cpp[0];
> @@ -1990,7 +2013,7 @@ static uint32_t ilk_compute_spr_wm(const struct 
> intel_crtc_state *cstate,
>       uint32_t method1, method2;
>       int cpp;
>  
> -     if (!cstate->base.active || !pstate->base.visible)
> +     if (!intel_wm_plane_visible(cstate, pstate))
>               return 0;
>  
>       cpp = pstate->base.fb->format->cpp[0];
> @@ -2013,15 +2036,7 @@ static uint32_t ilk_compute_cur_wm(const struct 
> intel_crtc_state *cstate,
>  {
>       int cpp;
>  
> -     /*
> -      * Treat cursor with fb as always visible since cursor updates
> -      * can happen faster than the vrefresh rate, and the current
> -      * watermark code doesn't handle that correctly. Cursor updates
> -      * which set/clear the fb or change the cursor size are going
> -      * to get throttled by intel_legacy_cursor_update() to work
> -      * around this problem with the watermark code.
> -      */
> -     if (!cstate->base.active || !pstate->base.fb)
> +     if (!intel_wm_plane_visible(cstate, pstate))
>               return 0;
>  
>       cpp = pstate->base.fb->format->cpp[0];
> @@ -2038,7 +2053,7 @@ static uint32_t ilk_compute_fbc_wm(const struct 
> intel_crtc_state *cstate,
>  {
>       int cpp;
>  
> -     if (!cstate->base.active || !pstate->base.visible)
> +     if (!intel_wm_plane_visible(cstate, pstate))
>               return 0;
>  
>       cpp = pstate->base.fb->format->cpp[0];

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to