[Intel-gfx] [PATCH 20/21] drm/i915: Simplify enabling user-interrupts with L3-remapping
Tvrtko Ursulin
tvrtko.ursulin at linux.intel.com
Tue Jun 7 12:50:42 UTC 2016
On 03/06/16 17:08, Chris Wilson wrote:
> Borrow the idea from intel_lrc.c to precompute the mask of interrupts we
> wish to always enable to avoid having lots of conditionals inside the
> interrupt enabling.
>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> ---
> drivers/gpu/drm/i915/intel_ringbuffer.c | 35 +++++++++++----------------------
> drivers/gpu/drm/i915/intel_ringbuffer.h | 4 ++--
> 2 files changed, 14 insertions(+), 25 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
> index ba84b469f13f..161c0792b1bf 100644
> --- a/drivers/gpu/drm/i915/intel_ringbuffer.c
> +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
> @@ -1227,8 +1227,7 @@ static int init_render_ring(struct intel_engine_cs *engine)
> if (IS_GEN(dev_priv, 6, 7))
> I915_WRITE(INSTPM, _MASKED_BIT_ENABLE(INSTPM_FORCE_ORDERING));
>
> - if (HAS_L3_DPF(dev_priv))
> - I915_WRITE_IMR(engine, ~GT_PARITY_ERROR(dev_priv));
> + I915_WRITE_IMR(engine, ~engine->irq_keep_mask);
>
> return init_workarounds_ring(engine);
> }
> @@ -1644,12 +1643,9 @@ gen6_ring_enable_irq(struct intel_engine_cs *engine)
> {
> struct drm_i915_private *dev_priv = engine->i915;
>
> - if (HAS_L3_DPF(dev_priv) && engine->id == RCS)
> - I915_WRITE_IMR(engine,
> - ~(engine->irq_enable_mask |
> - GT_PARITY_ERROR(dev_priv)));
> - else
> - I915_WRITE_IMR(engine, ~engine->irq_enable_mask);
> + I915_WRITE_IMR(engine,
> + ~(engine->irq_enable_mask |
> + engine->irq_keep_mask));
> gen5_enable_gt_irq(dev_priv, engine->irq_enable_mask);
> }
>
> @@ -1658,10 +1654,7 @@ gen6_ring_disable_irq(struct intel_engine_cs *engine)
> {
> struct drm_i915_private *dev_priv = engine->i915;
>
> - if (HAS_L3_DPF(dev_priv) && engine->id == RCS)
> - I915_WRITE_IMR(engine, ~GT_PARITY_ERROR(dev_priv));
> - else
> - I915_WRITE_IMR(engine, ~0);
> + I915_WRITE_IMR(engine, ~engine->irq_keep_mask);
> gen5_disable_gt_irq(dev_priv, engine->irq_enable_mask);
> }
>
> @@ -1688,12 +1681,9 @@ gen8_ring_enable_irq(struct intel_engine_cs *engine)
> {
> struct drm_i915_private *dev_priv = engine->i915;
>
> - if (HAS_L3_DPF(dev_priv) && engine->id == RCS)
> - I915_WRITE_IMR(engine,
> - ~(engine->irq_enable_mask |
> - GT_RENDER_L3_PARITY_ERROR_INTERRUPT));
> - else
> - I915_WRITE_IMR(engine, ~engine->irq_enable_mask);
> + I915_WRITE_IMR(engine,
> + ~(engine->irq_enable_mask |
> + engine->irq_keep_mask));
> POSTING_READ_FW(RING_IMR(engine->mmio_base));
> }
>
> @@ -1702,11 +1692,7 @@ gen8_ring_disable_irq(struct intel_engine_cs *engine)
> {
> struct drm_i915_private *dev_priv = engine->i915;
>
> - if (HAS_L3_DPF(dev_priv) && engine->id == RCS)
> - I915_WRITE_IMR(engine,
> - ~GT_RENDER_L3_PARITY_ERROR_INTERRUPT);
> - else
> - I915_WRITE_IMR(engine, ~0);
> + I915_WRITE_IMR(engine, ~engine->irq_keep_mask);
> }
>
> static int
> @@ -2621,6 +2607,9 @@ int intel_init_render_ring_buffer(struct drm_device *dev)
> engine->hw_id = 0;
> engine->mmio_base = RENDER_RING_BASE;
>
> + if (HAS_L3_DPF(dev_priv))
> + engine->irq_keep_mask = GT_RENDER_L3_PARITY_ERROR_INTERRUPT;
> +
> if (INTEL_GEN(dev_priv) >= 8) {
> if (i915_semaphore_is_enabled(dev_priv)) {
> obj = i915_gem_object_create(dev, 4096);
> diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.h b/drivers/gpu/drm/i915/intel_ringbuffer.h
> index 182cae767bf1..166f1a3829b0 100644
> --- a/drivers/gpu/drm/i915/intel_ringbuffer.h
> +++ b/drivers/gpu/drm/i915/intel_ringbuffer.h
> @@ -202,7 +202,8 @@ struct intel_engine_cs {
> struct i915_ctx_workarounds wa_ctx;
>
> bool irq_posted;
> - u32 irq_enable_mask; /* bitmask to enable ring interrupt */
> + u32 irq_keep_mask; /* bitmask for interrupts that should not be masked */
> + u32 irq_enable_mask;/* bitmask to enable ring interrupt */
> void (*irq_enable)(struct intel_engine_cs *ring);
> void (*irq_disable)(struct intel_engine_cs *ring);
>
> @@ -299,7 +300,6 @@ struct intel_engine_cs {
> unsigned int idle_lite_restore_wa;
> bool disable_lite_restore_wa;
> u32 ctx_desc_template;
> - u32 irq_keep_mask; /* bitmask for interrupts that should not be masked */
> int (*emit_request)(struct drm_i915_gem_request *request);
> int (*emit_flush)(struct drm_i915_gem_request *request,
> u32 invalidate_domains,
>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
Regards,
Tvrtko
More information about the Intel-gfx
mailing list