All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Chris Wilson <chris@chris-wilson.co.uk>
Cc: intel-gfx@lists.freedesktop.org,
	Daniel Vetter <daniel.vetter@ffwll.ch>,
	stable@vger.kernel.org
Subject: Re: [Intel-gfx] [PATCH] drm/i915: Handle untiled planes when computing their offsets
Date: Thu, 21 Feb 2013 21:54:41 +0200	[thread overview]
Message-ID: <20130221195441.GI4469@intel.com> (raw)
In-Reply-To: <1361473551-5775-1-git-send-email-chris@chris-wilson.co.uk>

On Thu, Feb 21, 2013 at 07:05:51PM +0000, Chris Wilson wrote:
> We trim the fb to fit the CRTC by computing the offset of that CRTC to
> its nearest tile_row origin. This allows us to use framebuffers that are
> larger than the CRTC limits without additional work.
> 
> However, we failed to compute the offset for a linear framebuffer
> correctly as we treated its x-advance in whole tiles (instead of the
> linear increment expected), leaving the CRTC misaligned with its
> contents.
> 
> Fixes regression from commit c2c75131244507c93f812862fdbd4f3a37139401
> Author: Daniel Vetter <daniel.vetter@ffwll.ch>
> Date:   Thu Jul 5 12:17:30 2012 +0200
> 
>     drm/i915: adjust framebuffer base address on gen4+
> 
> v2: Adjust relative x-coordinate after linear alignment (vsyrjala)
> 
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=61152
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
> Cc: stable@vger.kernel.org
> ---
>  drivers/gpu/drm/i915/intel_display.c |   33 +++++++++++++++++++++++----------
>  drivers/gpu/drm/i915/intel_drv.h     |    3 ++-
>  drivers/gpu/drm/i915/intel_sprite.c  |    6 ++++--
>  3 files changed, 29 insertions(+), 13 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index a3ca9a8..c32c0dc 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -1906,18 +1906,29 @@ void intel_unpin_fb_obj(struct drm_i915_gem_object *obj)
>  
>  /* Computes the linear offset to the base tile and adjusts x, y. bytes per pixel
>   * is assumed to be a power-of-two. */
> -unsigned long intel_gen4_compute_offset_xtiled(int *x, int *y,
> -					       unsigned int bpp,
> +unsigned long intel_gen4_compute_planar_offset(int *x, int *y,
> +					       unsigned int tiling_mode,
> +					       unsigned int cpp,
>  					       unsigned int pitch)
>  {
> -	int tile_rows, tiles;
> +	if (tiling_mode != I915_TILING_NONE) {
> +		int tile_rows, tiles;
>  
> -	tile_rows = *y / 8;
> -	*y %= 8;
> -	tiles = *x / (512/bpp);
> -	*x %= 512/bpp;
> +		tile_rows = *y / 8;
> +		*y %= 8;
>  
> -	return tile_rows * pitch * 8 + tiles * 4096;
> +		tiles = *x / (512/cpp);
> +		*x %= 512/cpp;
> +
> +		return tile_rows * pitch * 8 + tiles * 4096;
> +	} else {
> +		int offset;

nit: unsigned

> +
> +		offset = *y * pitch + *x * cpp;
> +		*y = 0;
> +		*x = (offset & 4095) / cpp;
> +		return offset & -4096;

That should do it.

There is one small concern though. HSW BSpec tells us that the
offset + size mustn't exceed the maximum allowed sprite size.
That's a bit weird, but perhaps it just means that whaever
internal register that tracks the current x/y source positions
is the same size as the sprite size register.

Hmm, actually it seems I'm complaining about a non-issue. The
max horizontal size seems to be 13 bits, which means 8k, and the
max x offset from this functions is 2k. Given that displays are
probably limited to 4k, that would still leave us 2k to spare.
So I suppose we can just ignore this.

I do have one other small bikeshed though. Why does the function
name have planar in it? Maybe call it intel_gen4_compute_page_offset()
or something?

-- 
Ville Syrjälä
Intel OTC

  reply	other threads:[~2013-02-21 19:54 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-02-21 14:45 [PATCH] drm/i915: Handle untiled planes when computing their offsets Chris Wilson
2013-02-21 16:55 ` [Intel-gfx] " Ville Syrjälä
2013-02-21 19:05   ` Chris Wilson
2013-02-21 19:54     ` Ville Syrjälä [this message]
2013-02-21 20:03       ` [Intel-gfx] " Chris Wilson
2013-02-21 20:04       ` Chris Wilson
2013-02-21 20:17         ` [Intel-gfx] " Ville Syrjälä
2013-02-21 20:52           ` Daniel Vetter

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=20130221195441.GI4469@intel.com \
    --to=ville.syrjala@linux.intel.com \
    --cc=chris@chris-wilson.co.uk \
    --cc=daniel.vetter@ffwll.ch \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=stable@vger.kernel.org \
    /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.