[Intel-gfx] [PATCH 10/11] drm/i915: HSW+ FBC is tied to pipe A

Rodrigo Vivi rodrigo.vivi at gmail.com
Fri Dec 12 17:23:24 PST 2014


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.vivi at intel.com>

On Mon, Dec 8, 2014 at 8:09 AM, Paulo Zanoni <przanoni at gmail.com> wrote:
> From: Paulo Zanoni <paulo.r.zanoni at intel.com>
>
> So add code to consider this case.
>
> Signed-off-by: Paulo Zanoni <paulo.r.zanoni at 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 at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx



-- 
Rodrigo Vivi
Blog: http://blog.vivi.eng.br


More information about the Intel-gfx mailing list