Re: [PATCH 3/7] drm/i915/skl: Adjust intel_fb_align_height() for Yb/Yf tiling

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Feb 23, 2015 at 03:55:57PM +0000, Tvrtko Ursulin wrote:
> From: Damien Lespiau <damien.lespiau@xxxxxxxxx>
> 
> We now need the bpp of the fb as Yf tiling has different tile widths
> depending on it.
> 
> v2: Rebased for the new addfb2 interface. (Tvrtko Ursulin)
> v3: Rebased for fb modifier changes. (Tvrtko Ursulin)
> 
> Signed-off-by: Damien Lespiau <damien.lespiau@xxxxxxxxx>
> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxx>
> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxx>

Might want to add a MISSING_CASE() here as well. For the record, the
vertical alignments for Yf are taken from a dodgy looking document found
by chance.

We don't have a 128bpp format supported by display

Now that I think about it, for the horizontal stride, BSpec says:

  - 8 bpp -> 64 bytes
  - * bpp -> 128 bytes

Given that a tile is a page size this would give for the vertical
alignment:

  - 8 bpp -> 64 byes (that's what we have)
  - * -> 32 bytes

So the 64bpp cases look a bit suspicious. Given that one the goals for
this new tiling format is to have tiles as square as possible (in terms
of pixels, not byte size), it'd make sense to have different strides
constraints for the 64bpp format, so it could be BSpec being wrong on
the horizontal stride constraint for 64bpp?

-- 
Damien

> ---
>  drivers/gpu/drm/i915/intel_display.c | 31 +++++++++++++++++++++++++++++--
>  1 file changed, 29 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index a523d84..4f0033a 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -2195,9 +2195,36 @@ intel_fb_align_height(struct drm_device *dev, int height,
>  		      uint64_t fb_format_modifier)
>  {
>  	int tile_height;
> +	uint32_t bits_per_pixel;
>  
> -	tile_height = fb_format_modifier == I915_FORMAT_MOD_X_TILED ?
> -		(IS_GEN2(dev) ? 16 : 8) : 1;
> +	switch (fb_format_modifier) {
> +	case I915_FORMAT_MOD_X_TILED:
> +		tile_height = IS_GEN2(dev) ? 16 : 8;
> +		break;
> +	case I915_FORMAT_MOD_Y_TILED:
> +		tile_height = 32;
> +		break;
> +	case I915_FORMAT_MOD_Yf_TILED:
> +		bits_per_pixel = drm_format_plane_cpp(pixel_format, 0) * 8;
> +		switch (bits_per_pixel) {
> +		default:
> +		case 8:
> +			tile_height = 64;
> +			break;
> +		case 16:
> +		case 32:
> +			tile_height = 32;
> +			break;
> +		case 64:
> +		case 128:
> +			tile_height = 16;
> +			break;
> +		}
> +		break;
> +	default:
> +		tile_height = 1;
> +		break;
> +	}
>  
>  	return ALIGN(height, tile_height);
>  }
> -- 
> 2.3.0
> 
_______________________________________________
Intel-gfx mailing list
Intel-gfx@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/intel-gfx





[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux