[Intel-gfx] [PATCH 8/9] drm/i915: Eliminate unrequired dwords for MI_SET_CONTEXT
Chris Wilson
chris at chris-wilson.co.uk
Thu Sep 5 15:18:40 CEST 2013
A later patch adds yet another workaround for MI_SET_CONTEXT, at which
point we start to end up with more NOOPs than actual command dwords
along the non-workaround paths. It is time that we made the MI_SET_CONTEXT
a variable length block and only emit the dwords we truly need.
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
Reviewed-by: Ben Widawsky <ben at bwidawsk.net>
---
drivers/gpu/drm/i915/i915_gem_context.c | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_gem_context.c b/drivers/gpu/drm/i915/i915_gem_context.c
index 12b66cf..77400b9 100644
--- a/drivers/gpu/drm/i915/i915_gem_context.c
+++ b/drivers/gpu/drm/i915/i915_gem_context.c
@@ -348,7 +348,7 @@ mi_set_context(struct intel_ring_buffer *ring,
struct i915_hw_context *new_context,
u32 hw_flags)
{
- int ret;
+ int ret, len;
/* w/a: If Flush TLB Invalidation Mode is enabled, driver must do a TLB
* invalidation prior to MI_SET_CONTEXT. On GEN6 we don't set the value
@@ -361,7 +361,14 @@ mi_set_context(struct intel_ring_buffer *ring,
return ret;
}
- ret = intel_ring_begin(ring, 6);
+ len = 4;
+ switch (INTEL_INFO(ring->dev)->gen) {
+ case 7:
+ case 5: len += 2;
+ break;
+ }
+
+ ret = intel_ring_begin(ring, len);
if (ret)
return ret;
@@ -373,9 +380,6 @@ mi_set_context(struct intel_ring_buffer *ring,
case 5:
intel_ring_emit(ring, MI_SUSPEND_FLUSH | MI_SUSPEND_FLUSH_EN);
break;
- default:
- intel_ring_emit(ring, MI_NOOP);
- break;
}
intel_ring_emit(ring, MI_NOOP);
@@ -395,9 +399,6 @@ mi_set_context(struct intel_ring_buffer *ring,
case 5:
intel_ring_emit(ring, MI_SUSPEND_FLUSH);
break;
- default:
- intel_ring_emit(ring, MI_NOOP);
- break;
}
intel_ring_advance(ring);
--
1.7.9.5
More information about the Intel-gfx
mailing list