I always ask myself if we should just clean the code and remove all
platforms before HSW that always had many fbc issues. So we could make
it simple and just do for pipe A for all platforms.

Anyway, this looks ok for now
Reviewed-by: Rodrigo Vivi <rodrigo.v...@intel.com>

On Mon, Dec 8, 2014 at 8:09 AM, Paulo Zanoni <przan...@gmail.com> wrote:
> From: Paulo Zanoni <paulo.r.zan...@intel.com>
>
> So add code to consider this case.
>
> Signed-off-by: Paulo Zanoni <paulo.r.zan...@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_fbc.c | 20 ++++++++++++++++----
>  1 file changed, 16 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_fbc.c 
> b/drivers/gpu/drm/i915/intel_fbc.c
> index 450d0be..e8dc1d5 100644
> --- a/drivers/gpu/drm/i915/intel_fbc.c
> +++ b/drivers/gpu/drm/i915/intel_fbc.c
> @@ -446,10 +446,16 @@ static bool set_no_fbc_reason(struct drm_i915_private 
> *dev_priv,
>
>  static struct drm_crtc *intel_fbc_find_crtc(struct drm_i915_private 
> *dev_priv)
>  {
> -       struct drm_device *dev = dev_priv->dev;
>         struct drm_crtc *crtc = NULL, *tmp_crtc;
> +       enum pipe pipe;
> +       bool pipe_a_only = false;
> +
> +       if (IS_HASWELL(dev_priv) || INTEL_INFO(dev_priv)->gen >= 8)
> +               pipe_a_only = true;
> +
> +       for_each_pipe(dev_priv, pipe) {
> +               tmp_crtc = dev_priv->pipe_to_crtc_mapping[pipe];
>
> -       for_each_crtc(dev, tmp_crtc) {
>                 if (intel_crtc_active(tmp_crtc) &&
>                     to_intel_crtc(tmp_crtc)->primary_enabled) {
>                         if (crtc) {
> @@ -459,6 +465,9 @@ static struct drm_crtc *intel_fbc_find_crtc(struct 
> drm_i915_private *dev_priv)
>                         }
>                         crtc = tmp_crtc;
>                 }
> +
> +               if (pipe_a_only)
> +                       break;
>         }
>
>         if (!crtc || crtc->primary->fb == NULL) {
> @@ -714,11 +723,14 @@ void intel_fbc_init(struct drm_i915_private *dev_priv)
>                 return;
>         }
>
> -       /* TODO: some platforms have FBC tied to a specific plane! */
> -       for_each_pipe(dev_priv, pipe)
> +       for_each_pipe(dev_priv, pipe) {
>                 dev_priv->fbc.possible_framebuffer_bits |=
>                                 INTEL_FRONTBUFFER_PRIMARY(pipe);
>
> +               if (IS_HASWELL(dev_priv) || INTEL_INFO(dev_priv)->gen >= 8)
> +                       break;
> +       }
> +
>         if (INTEL_INFO(dev_priv)->gen >= 7) {
>                 dev_priv->display.fbc_enabled = ilk_fbc_enabled;
>                 dev_priv->display.enable_fbc = gen7_fbc_enable;
> --
> 2.1.3
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx



-- 
Rodrigo Vivi
Blog: http://blog.vivi.eng.br
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to