Quoting Oscar Mateo (2018-02-13 19:13:29)
> There are different kind of workarounds (those that modify registers that
> live in the context image, those that modify global registers, those that
> whitelist registers, etc...) and they have different requirements in terms
> of where they are applied and how. Also, by splitting them apart, it should
> be easier to decide where a new workaround should go.
> 
> v2:
>   - Add multiple MISSING_CASE
>   - Rebased
> 
> v3:
>   - Rename mmio_workarounds to gt_workarounds (Chris, Mika)
>   - Create empty placeholders for BDW and CHV GT WAs
>   - Rebased
> 
> v4: Rebased
> 
> Signed-off-by: Oscar Mateo <oscar.ma...@intel.com>
> Cc: Chris Wilson <ch...@chris-wilson.co.uk>
> Cc: Mika Kuoppala <mika.kuopp...@linux.intel.com>
> Cc: Ville Syrjälä <ville.syrj...@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/i915_gem.c          |   3 +
>  drivers/gpu/drm/i915/i915_gem_context.c  |   6 +
>  drivers/gpu/drm/i915/intel_lrc.c         |  10 +-
>  drivers/gpu/drm/i915/intel_ringbuffer.c  |   4 +-
>  drivers/gpu/drm/i915/intel_workarounds.c | 627 
> +++++++++++++++++++------------
>  drivers/gpu/drm/i915/intel_workarounds.h |   8 +-
>  6 files changed, 414 insertions(+), 244 deletions(-)
> 
> @@ -452,11 +453,16 @@ static bool needs_preempt_context(struct 
> drm_i915_private *i915)
>  int i915_gem_contexts_init(struct drm_i915_private *dev_priv)
>  {
>         struct i915_gem_context *ctx;
> +       int ret;
>  
>         /* Reassure ourselves we are only called once */
>         GEM_BUG_ON(dev_priv->kernel_context);
>         GEM_BUG_ON(dev_priv->preempt_context);
>  
> +       ret = intel_ctx_workarounds_init(dev_priv);
> +       if (ret)
> +               return ret;
> +
>         INIT_LIST_HEAD(&dev_priv->contexts.list);
>         INIT_WORK(&dev_priv->contexts.free_work, contexts_free_worker);
>         init_llist_head(&dev_priv->contexts.free_list);

>  static void reset_irq(struct intel_engine_cs *engine)
> @@ -1904,7 +1908,7 @@ static int gen8_init_rcs_context(struct 
> drm_i915_gem_request *req)
>  {
>         int ret;
>  
> -       ret = intel_ring_workarounds_emit(req);
> +       ret = intel_ctx_workarounds_emit(req);
>         if (ret)
>                 return ret;
>  
> diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c 
> b/drivers/gpu/drm/i915/intel_ringbuffer.c
> index ec580f5..0b6c20f 100644
> --- a/drivers/gpu/drm/i915/intel_ringbuffer.c
> +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
> @@ -600,7 +600,7 @@ static int intel_rcs_ctx_init(struct drm_i915_gem_request 
> *req)
>  {
>         int ret;
>  
> -       ret = intel_ring_workarounds_emit(req);
> +       ret = intel_ctx_workarounds_emit(req);
>         if (ret != 0)
>                 return ret;

Since the context w/a are only used once, is it worth separating the
init and emit any more?
-Chris
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to