Quoting Tvrtko Ursulin (2018-04-18 12:33:42) > From: Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxx> > > Currently our driver assumes BSD2 means hardware engine instance number > two. This does not work for Icelake parts with two VCS engines, but which > are hardware instances 0 and 2, and not 0 and 1 as with previous parts. > > This makes the second engine not discoverable via HAS_BSD2 get param, nor > it can be targetted by execbuf. > > While we are working on the next generation execbuf put in a hack which > allows discovery and access to this second VCS engine using legacy ABI. > > Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxx> > Cc: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> > Cc: Jon Bloomfield <jon.bloomfield@xxxxxxxxx> > Cc: Tony Ye <tony.ye@xxxxxxxxx> > --- > Compile tested only. > > Also, one could argue if this is just a temporary hack or could actually > make sense to have this permanently in. It feels like the ABI semantics of > BSD2 are blurry, or at least could be re-blurred for Gen11. > --- > drivers/gpu/drm/i915/i915_drv.c | 8 +++++++- > drivers/gpu/drm/i915/i915_gem_execbuffer.c | 10 +++++++++- > 2 files changed, 16 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c > index b7dbeba72dec..a185366d9beb 100644 > --- a/drivers/gpu/drm/i915/i915_drv.c > +++ b/drivers/gpu/drm/i915/i915_drv.c > @@ -331,7 +331,13 @@ static int i915_getparam_ioctl(struct drm_device *dev, void *data, > value = !!dev_priv->engine[VECS]; > break; > case I915_PARAM_HAS_BSD2: > - value = !!dev_priv->engine[VCS2]; > + /* > + * FIXME: Temporary hack for Icelake. > + * > + * Make semantics of HAS_BSD2 "has second", or "has two" VDBOXes > + * instead of "has VDBOX 2nd hardware instance". > + */ > + value = dev_priv->engine[VCS2] || dev_priv->engine[VCS3]; There can be no temporary hacks for the uAPI... You either sign yourself up to keep it working indefinitely or don't :) Regards, Joonas > break; > case I915_PARAM_HAS_LLC: > value = HAS_LLC(dev_priv); > diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c > index c74f5df3fb5a..80b32460567d 100644 > --- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c > +++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c > @@ -2052,7 +2052,9 @@ eb_select_engine(struct drm_i915_private *dev_priv, > return NULL; > } > > - if (user_ring_id == I915_EXEC_BSD && HAS_BSD2(dev_priv)) { > + if (user_ring_id == I915_EXEC_BSD && > + (INTEL_INFO(dev_priv)->ring_mask & > + (ENGINE_MASK(_VCS(1)) | ENGINE_MASK(_VCS(2))))) { > unsigned int bsd_idx = args->flags & I915_EXEC_BSD_MASK; > > if (bsd_idx == I915_EXEC_BSD_DEFAULT) { > @@ -2068,6 +2070,12 @@ eb_select_engine(struct drm_i915_private *dev_priv, > } > > engine = dev_priv->engine[_VCS(bsd_idx)]; > + > + /* > + * FIXME Temporarily map VCS2 to VCS1 on Icelake. > + */ > + if (!engine && bsd_idx) > + engine = dev_priv->engine[_VCS(2)]; > } else { > engine = dev_priv->engine[user_ring_map[user_ring_id]]; > } > -- > 2.14.1 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/intel-gfx _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx