[Intel-gfx] [PATCH 4/5] drm/i915: Wait for pending page flips before enabling/disabling the primary plane

Rodrigo Vivi rodrigo.vivi at gmail.com
Wed May 21 02:44:07 CEST 2014


It seems it needs a rebase...
I couldn't figure out where exactly you will put the wait_for_pending so
I'm going to wait a v2.

But this is my fault that took a century to review it... I'm sorry...


On Tue, Apr 15, 2014 at 11:41 AM, <ville.syrjala at linux.intel.com> wrote:

> From: Ville Syrjälä <ville.syrjala at linux.intel.com>
>
> We have to write to the primary plane base address registrer when we
> enable/disable the primary plane in response to sprite coverage. Those
> writes will cause the flip counter to increment which could interfere
> with the detection of CS flip completion. We could end up completing
> CS flips before the CS has even executed the commands from the ring.
>
> To avoid such issues, wait for CS flips to finish before we toggle the
> primary plane on/off.
>
> Testcase: igt/kms_mmio_vs_cs_flip/setplane_vs_cs_flip
> Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
> ---
>  drivers/gpu/drm/i915/intel_display.c | 2 +-
>  drivers/gpu/drm/i915/intel_drv.h     | 1 +
>  drivers/gpu/drm/i915/intel_sprite.c  | 4 ++++
>  3 files changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_display.c
> b/drivers/gpu/drm/i915/intel_display.c
> index 9b181fc..c0fe5dd 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -3096,7 +3096,7 @@ bool intel_has_pending_fb_unpin(struct drm_device
> *dev)
>         return false;
>  }
>
> -static void intel_crtc_wait_for_pending_flips(struct drm_crtc *crtc)
> +void intel_crtc_wait_for_pending_flips(struct drm_crtc *crtc)
>  {
>         struct drm_device *dev = crtc->dev;
>         struct drm_i915_private *dev_priv = dev->dev_private;
> diff --git a/drivers/gpu/drm/i915/intel_drv.h
> b/drivers/gpu/drm/i915/intel_drv.h
> index edef34e..f578e42 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -775,6 +775,7 @@ int valleyview_get_vco(struct drm_i915_private
> *dev_priv);
>  void intel_mode_from_pipe_config(struct drm_display_mode *mode,
>                                  struct intel_crtc_config *pipe_config);
>  int intel_format_to_fourcc(int format);
> +void intel_crtc_wait_for_pending_flips(struct drm_crtc *crtc);
>
>  /* intel_dp.c */
>  void intel_dp_init(struct drm_device *dev, int output_reg, enum port
> port);
> diff --git a/drivers/gpu/drm/i915/intel_sprite.c
> b/drivers/gpu/drm/i915/intel_sprite.c
> index 4df7245..36a8f5e 100644
> --- a/drivers/gpu/drm/i915/intel_sprite.c
> +++ b/drivers/gpu/drm/i915/intel_sprite.c
> @@ -529,6 +529,8 @@ intel_enable_primary(struct drm_crtc *crtc)
>         if (intel_crtc->primary_enabled)
>                 return;
>
> +       intel_crtc_wait_for_pending_flips(crtc);
> +
>         intel_crtc->primary_enabled = true;
>
>         I915_WRITE(reg, I915_READ(reg) | DISPLAY_PLANE_ENABLE);
> @@ -558,6 +560,8 @@ intel_disable_primary(struct drm_crtc *crtc)
>         if (!intel_crtc->primary_enabled)
>                 return;
>
> +       intel_crtc_wait_for_pending_flips(crtc);
> +
>         intel_crtc->primary_enabled = false;
>
>         mutex_lock(&dev->struct_mutex);
> --
> 1.8.3.2
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
>



-- 
Rodrigo Vivi
Blog: http://blog.vivi.eng.br
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/intel-gfx/attachments/20140520/18b19814/attachment.html>


More information about the Intel-gfx mailing list