[PATCH] drm/i915: Stop using I915_TILING_* in client blit selftest

Matt Roper matthew.d.roper at intel.com
Tue Oct 12 21:43:20 UTC 2021


On Fri, Oct 08, 2021 at 12:49:57PM +0300, Ville Syrjälä wrote:
> On Thu, Sep 30, 2021 at 05:58:16PM -0700, Matt Roper wrote:
> > The I915_TILING_* definitions in the uapi header are intended solely for
> > tiling modes that are visible to the old de-tiling fence ioctls.  Since
> > modern hardware does not support de-tiling fences, we should not add new
> > definitions for new tiling types going forward.  However we do want the
> > client blit selftest to eventually cover other new tiling modes (such as
> > Tile4), so switch it to using its own enum of tiling modes.
> > 
> > Cc: Ville Syrjälä <ville.syrjala at linux.intel.com>
> > Cc: Stanislav Lisovskiy <stanislav.lisovskiy at intel.com>
> > Signed-off-by: Matt Roper <matthew.d.roper at intel.com>
> > ---
> >  .../i915/gem/selftests/i915_gem_client_blt.c  | 29 ++++++++++++-------
> >  include/uapi/drm/i915_drm.h                   |  6 ++++
> >  2 files changed, 24 insertions(+), 11 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_client_blt.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_client_blt.c
> > index ecbcbb86ae1e..8402ed925a69 100644
> > --- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_client_blt.c
> > +++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_client_blt.c
> > @@ -17,13 +17,20 @@
> >  #include "huge_gem_object.h"
> >  #include "mock_context.h"
> >  
> > +enum client_tiling {
> > +	CLIENT_TILING_LINEAR,
> > +	CLIENT_TILING_X,
> > +	CLIENT_TILING_Y,
> > +	CLIENT_NUM_TILING_TYPES
> > +};
> > +
> >  #define WIDTH 512
> >  #define HEIGHT 32
> >  
> >  struct blit_buffer {
> >  	struct i915_vma *vma;
> >  	u32 start_val;
> > -	u32 tiling;
> > +	enum client_tiling tiling;
> >  };
> >  
> >  struct tiled_blits {
> > @@ -53,9 +60,9 @@ static int prepare_blit(const struct tiled_blits *t,
> >  	*cs++ = MI_LOAD_REGISTER_IMM(1);
> >  	*cs++ = i915_mmio_reg_offset(BCS_SWCTRL);
> >  	cmd = (BCS_SRC_Y | BCS_DST_Y) << 16;
> > -	if (src->tiling == I915_TILING_Y)
> > +	if (src->tiling == CLIENT_TILING_Y)
> >  		cmd |= BCS_SRC_Y;
> > -	if (dst->tiling == I915_TILING_Y)
> > +	if (dst->tiling == CLIENT_TILING_Y)
> >  		cmd |= BCS_DST_Y;
> >  	*cs++ = cmd;
> >  
> > @@ -172,7 +179,7 @@ static int tiled_blits_create_buffers(struct tiled_blits *t,
> >  
> >  		t->buffers[i].vma = vma;
> >  		t->buffers[i].tiling =
> > -			i915_prandom_u32_max_state(I915_TILING_Y + 1, prng);
> > +			i915_prandom_u32_max_state(CLIENT_TILING_Y + 1, prng);
> >  	}
> >  
> >  	return 0;
> > @@ -197,17 +204,17 @@ static u64 swizzle_bit(unsigned int bit, u64 offset)
> >  static u64 tiled_offset(const struct intel_gt *gt,
> >  			u64 v,
> >  			unsigned int stride,
> > -			unsigned int tiling)
> > +			enum client_tiling tiling)
> >  {
> >  	unsigned int swizzle;
> >  	u64 x, y;
> >  
> > -	if (tiling == I915_TILING_NONE)
> > +	if (tiling == CLIENT_TILING_LINEAR)
> >  		return v;
> >  
> >  	y = div64_u64_rem(v, stride, &x);
> >  
> > -	if (tiling == I915_TILING_X) {
> > +	if (tiling == CLIENT_TILING_X) {
> >  		v = div64_u64_rem(y, 8, &y) * stride * 8;
> >  		v += y * 512;
> >  		v += div64_u64_rem(x, 512, &x) << 12;
> > @@ -244,12 +251,12 @@ static u64 tiled_offset(const struct intel_gt *gt,
> >  	return v;
> >  }
> >  
> > -static const char *repr_tiling(int tiling)
> > +static const char *repr_tiling(enum client_tiling tiling)
> >  {
> >  	switch (tiling) {
> > -	case I915_TILING_NONE: return "linear";
> > -	case I915_TILING_X: return "X";
> > -	case I915_TILING_Y: return "Y";
> > +	case CLIENT_TILING_LINEAR: return "linear";
> > +	case CLIENT_TILING_X: return "X";
> > +	case CLIENT_TILING_Y: return "Y";
> >  	default: return "unknown";
> >  	}
> >  }
> > diff --git a/include/uapi/drm/i915_drm.h b/include/uapi/drm/i915_drm.h
> > index bde5860b3686..00311a63068e 100644
> > --- a/include/uapi/drm/i915_drm.h
> > +++ b/include/uapi/drm/i915_drm.h
> > @@ -1522,6 +1522,12 @@ struct drm_i915_gem_caching {
> >  #define I915_TILING_NONE	0
> >  #define I915_TILING_X		1
> >  #define I915_TILING_Y		2
> > +/*
> > + * Do not add new tiling types here.  The I915_TILING_* values are for
> > + * de-tiling fence registers that no longer exist on modern platforms.  Although
> > + * the hardware may support new types of tiling in general (e.g., Tile4), we
> > + * do not need to add them to the uapi that is specific to now-defunct ioctls.
> > + */
> >  #define I915_TILING_LAST	I915_TILING_Y
> 
> I think we should split this one into a separate patch to give it
> some visibility. The people who care about gem uapi seem to be in
> some kind of early winter hibernation and no one read this.
> 
> Apart from that
> Reviewed-by: Ville Syrjälä <ville.syrjala at linux.intel.com>

Thanks.  I dropped the comment here and pushed the rest of the patch.
I'll re-send the uapi header comment separately to increase visibility.


Matt

> 
> >  
> >  #define I915_BIT_6_SWIZZLE_NONE		0
> > -- 
> > 2.33.0
> 
> -- 
> Ville Syrjälä
> Intel

-- 
Matt Roper
Graphics Software Engineer
VTT-OSGC Platform Enablement
Intel Corporation
(916) 356-2795


More information about the dri-devel mailing list