All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Paulo Zanoni <paulo.r.zanoni@intel.com>
Cc: intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 03/16] drm/i915: fix FBC for cases where crtc->base.y is non-zero
Date: Fri, 28 Aug 2015 17:30:42 +0300	[thread overview]
Message-ID: <20150828143042.GV5176@intel.com> (raw)
In-Reply-To: <1439588061-18064-4-git-send-email-paulo.r.zanoni@intel.com>

On Fri, Aug 14, 2015 at 06:34:08PM -0300, Paulo Zanoni wrote:
> I only tested this on BDW, but since the register description is the
> same ever since gen4, let's assume that all gens take the same
> register format. If that's not true, then hopefully someone will
> bisect a bug to this patch and we'll fix it.
> 
> Notice that the wrong fence offset register just means that the
> hardware tracking will be wrong.
> 
> Testcases:
>  - igt/kms_frontbuffer_tracking/fbc-1p-primscrn-pri-shrfb-draw-mmap-gtt
>  - igt/kms_frontbuffer_tracking/fbc-2p-primscrn-pri-shrfb-draw-mmap-gtt
> 
> Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_fbc.c | 26 +++++++++++++++++++++-----
>  1 file changed, 21 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_fbc.c b/drivers/gpu/drm/i915/intel_fbc.c
> index fa9b004..9ffa7dc 100644
> --- a/drivers/gpu/drm/i915/intel_fbc.c
> +++ b/drivers/gpu/drm/i915/intel_fbc.c
> @@ -64,6 +64,20 @@ static void i8xx_fbc_disable(struct drm_i915_private *dev_priv)
>  	DRM_DEBUG_KMS("disabled FBC\n");
>  }
>  
> +static unsigned int get_crtc_fence_y_offset(struct intel_crtc *crtc)
> +{
> +	struct drm_i915_private *dev_priv = crtc->base.dev->dev_private;
> +	struct drm_framebuffer *fb = crtc->base.primary->fb;
> +	unsigned int tile_height;
> +
> +	tile_height = intel_tile_height(dev_priv->dev, fb->pixel_format,
> +					fb->modifier[0]);
> +
> +	/* The value we want is the line number of the first tile that contains
> +	 * the first vertical line of the CRTC. */
> +	return crtc->base.y - (crtc->base.y % tile_height);

As mentioned before, I believe this depends on an implementtion detail
of intel_gen4_compute_page_offset(). I think it would be nicer if the
callers of intel_gen4_compute_page_offset() would store the correct
fbc y offset already somewhere under intel_crtc, so that you could
just look it up here. That would safeguard this code from any changes in
intel_gen4_compute_page_offset().

> +}
> +
>  static void i8xx_fbc_enable(struct intel_crtc *crtc)
>  {
>  	struct drm_i915_private *dev_priv = crtc->base.dev->dev_private;
> @@ -97,7 +111,7 @@ static void i8xx_fbc_enable(struct intel_crtc *crtc)
>  		fbc_ctl2 = FBC_CTL_FENCE_DBL | FBC_CTL_IDLE_IMM | FBC_CTL_CPU_FENCE;
>  		fbc_ctl2 |= FBC_CTL_PLANE(crtc->plane);
>  		I915_WRITE(FBC_CONTROL2, fbc_ctl2);
> -		I915_WRITE(FBC_FENCE_OFF, crtc->base.y);
> +		I915_WRITE(FBC_FENCE_OFF, get_crtc_fence_y_offset(crtc));
>  	}
>  
>  	/* enable it... */
> @@ -135,7 +149,7 @@ static void g4x_fbc_enable(struct intel_crtc *crtc)
>  		dpfc_ctl |= DPFC_CTL_LIMIT_1X;
>  	dpfc_ctl |= DPFC_CTL_FENCE_EN | obj->fence_reg;
>  
> -	I915_WRITE(DPFC_FENCE_YOFF, crtc->base.y);
> +	I915_WRITE(DPFC_FENCE_YOFF, get_crtc_fence_y_offset(crtc));
>  
>  	/* enable it... */
>  	I915_WRITE(DPFC_CONTROL, dpfc_ctl | DPFC_CTL_EN);
> @@ -177,6 +191,7 @@ static void ilk_fbc_enable(struct intel_crtc *crtc)
>  	struct drm_i915_gem_object *obj = intel_fb_obj(fb);
>  	u32 dpfc_ctl;
>  	int threshold = dev_priv->fbc.threshold;
> +	unsigned int y_offset;
>  
>  	dev_priv->fbc.enabled = true;
>  
> @@ -200,7 +215,8 @@ static void ilk_fbc_enable(struct intel_crtc *crtc)
>  	if (IS_GEN5(dev_priv))
>  		dpfc_ctl |= obj->fence_reg;
>  
> -	I915_WRITE(ILK_DPFC_FENCE_YOFF, crtc->base.y);
> +	y_offset = get_crtc_fence_y_offset(crtc);
> +	I915_WRITE(ILK_DPFC_FENCE_YOFF, y_offset);
>  	I915_WRITE(ILK_FBC_RT_BASE, i915_gem_obj_ggtt_offset(obj) | ILK_FBC_RT_VALID);
>  	/* enable it... */
>  	I915_WRITE(ILK_DPFC_CONTROL, dpfc_ctl | DPFC_CTL_EN);
> @@ -208,7 +224,7 @@ static void ilk_fbc_enable(struct intel_crtc *crtc)
>  	if (IS_GEN6(dev_priv)) {
>  		I915_WRITE(SNB_DPFC_CTL_SA,
>  			   SNB_CPU_FENCE_ENABLE | obj->fence_reg);
> -		I915_WRITE(DPFC_CPU_FENCE_OFFSET, crtc->base.y);
> +		I915_WRITE(DPFC_CPU_FENCE_OFFSET, y_offset);
>  	}
>  
>  	intel_fbc_nuke(dev_priv);
> @@ -288,7 +304,7 @@ static void gen7_fbc_enable(struct intel_crtc *crtc)
>  
>  	I915_WRITE(SNB_DPFC_CTL_SA,
>  		   SNB_CPU_FENCE_ENABLE | obj->fence_reg);
> -	I915_WRITE(DPFC_CPU_FENCE_OFFSET, crtc->base.y);
> +	I915_WRITE(DPFC_CPU_FENCE_OFFSET, get_crtc_fence_y_offset(crtc));
>  
>  	intel_fbc_nuke(dev_priv);
>  
> -- 
> 2.4.6
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx

-- 
Ville Syrjälä
Intel OTC
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

  reply	other threads:[~2015-08-28 14:31 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-14 21:34 [PATCH 00/16] FBC bug fixes Paulo Zanoni
2015-08-14 21:34 ` [PATCH 01/16] drm/i915: make sure we're not changing the FBC CFB with FBC enabled Paulo Zanoni
2015-08-28 14:05   ` Ville Syrjälä
2015-08-14 21:34 ` [PATCH 02/16] drm/i915: fix the FBC work allocation failure path Paulo Zanoni
2015-08-28 14:20   ` Ville Syrjälä
2015-08-28 14:50     ` Paulo Zanoni
2015-08-28 15:29       ` Ville Syrjälä
2015-09-01 10:07       ` Daniel Vetter
2015-09-01 11:03         ` Ville Syrjälä
2015-09-02  7:52           ` Daniel Vetter
2015-08-14 21:34 ` [PATCH 03/16] drm/i915: fix FBC for cases where crtc->base.y is non-zero Paulo Zanoni
2015-08-28 14:30   ` Ville Syrjälä [this message]
2015-08-14 21:34 ` [PATCH 04/16] drm/i915: set ILK_DPFC_FENCE_YOFF to 0 on SNB Paulo Zanoni
2015-08-28 14:46   ` Ville Syrjälä
2015-10-08 21:26     ` Zanoni, Paulo R
2015-10-08 21:37       ` Ville Syrjälä
2015-08-14 21:34 ` [PATCH 05/16] drm/i915: check for the supported strides on HSW+ FBC Paulo Zanoni
2015-08-28 15:16   ` Ville Syrjälä
2015-08-14 21:34 ` [PATCH 06/16] drm/i915: try a little harder to find an FBC CRTC Paulo Zanoni
2015-08-28 16:55   ` Ville Syrjälä
2015-08-14 21:34 ` [PATCH 07/16] drm/i915: disable FBC on FIFO underruns Paulo Zanoni
2015-08-15  8:22   ` Chris Wilson
2015-08-19 12:06   ` Ville Syrjälä
2015-08-20 13:30     ` Paulo Zanoni
2015-08-20 13:58       ` Ville Syrjälä
2015-08-20 14:29         ` Paulo Zanoni
2015-08-20 15:00           ` Ville Syrjälä
2015-08-26  7:36             ` Daniel Vetter
2015-08-14 21:34 ` [PATCH 08/16] drm/i915: avoid the last 8mb of stolen on BDW/SKL Paulo Zanoni
2015-08-15  8:29   ` Chris Wilson
2015-08-18 21:49     ` Zanoni, Paulo R
2015-08-19  8:24       ` chris
2015-09-11 20:35         ` Paulo Zanoni
2015-08-14 21:34 ` [PATCH 09/16] drm/i915: print the correct amount of bytes allocated for the CFB Paulo Zanoni
2015-08-28 17:11   ` Ville Syrjälä
2015-08-14 21:34 ` [PATCH 10/16] drm/i915: fix CFB size calculation Paulo Zanoni
2015-08-28 17:25   ` Ville Syrjälä
2015-08-14 21:34 ` [PATCH 11/16] drm/i915/bdw: don't enable FBC when pixel rate exceeds 95% Paulo Zanoni
2015-08-28 17:41   ` Ville Syrjälä
2015-08-14 21:34 ` [PATCH 12/16] drm/i915: apply WaFbcAsynchFlipDisableFbcQueue earlier Paulo Zanoni
2015-08-28 17:45   ` Ville Syrjälä
2015-08-14 21:34 ` [PATCH 13/16] drm/i915: don't use the first stolen page on Broadwell Paulo Zanoni
2015-08-15  8:30   ` Chris Wilson
2015-08-19 11:55     ` Ville Syrjälä
2015-08-26  7:48       ` Daniel Vetter
2015-08-26 11:21         ` Ville Syrjälä
2015-08-14 21:34 ` [PATCH 14/16] drm/i915: don't apply WaFbcAsynchFlipDisableFbcQueue on SKL Paulo Zanoni
2015-08-28 17:51   ` Ville Syrjälä
2015-08-14 21:34 ` [PATCH 15/16] Revert "drm/i915: Allocate fbcon from stolen memory" Paulo Zanoni
2015-08-15  8:24   ` Chris Wilson
2015-08-18 21:54     ` Zanoni, Paulo R
2015-08-19  8:16       ` chris
2015-08-14 21:34 ` [PATCH 16/16] drm/i915: reject invalid formats for FBC Paulo Zanoni
2015-08-28 17:55   ` Ville Syrjälä

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150828143042.GV5176@intel.com \
    --to=ville.syrjala@linux.intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=paulo.r.zanoni@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.