|
@@ -324,10 +324,15 @@ mi_set_context(struct intel_ring_buffer *ring,
|
|
{
|
|
{
|
|
int ret;
|
|
int ret;
|
|
|
|
|
|
- ret = intel_ring_begin(ring, 4);
|
|
|
|
|
|
+ ret = intel_ring_begin(ring, 6);
|
|
if (ret)
|
|
if (ret)
|
|
return ret;
|
|
return ret;
|
|
|
|
|
|
|
|
+ if (IS_GEN7(ring->dev))
|
|
|
|
+ intel_ring_emit(ring, MI_ARB_ON_OFF | MI_ARB_DISABLE);
|
|
|
|
+ else
|
|
|
|
+ intel_ring_emit(ring, MI_NOOP);
|
|
|
|
+
|
|
intel_ring_emit(ring, MI_NOOP);
|
|
intel_ring_emit(ring, MI_NOOP);
|
|
intel_ring_emit(ring, MI_SET_CONTEXT);
|
|
intel_ring_emit(ring, MI_SET_CONTEXT);
|
|
intel_ring_emit(ring, new_context->obj->gtt_offset |
|
|
intel_ring_emit(ring, new_context->obj->gtt_offset |
|
|
@@ -338,6 +343,11 @@ mi_set_context(struct intel_ring_buffer *ring,
|
|
/* w/a: MI_SET_CONTEXT must always be followed by MI_NOOP */
|
|
/* w/a: MI_SET_CONTEXT must always be followed by MI_NOOP */
|
|
intel_ring_emit(ring, MI_NOOP);
|
|
intel_ring_emit(ring, MI_NOOP);
|
|
|
|
|
|
|
|
+ if (IS_GEN7(ring->dev))
|
|
|
|
+ intel_ring_emit(ring, MI_ARB_ON_OFF | MI_ARB_ENABLE);
|
|
|
|
+ else
|
|
|
|
+ intel_ring_emit(ring, MI_NOOP);
|
|
|
|
+
|
|
intel_ring_advance(ring);
|
|
intel_ring_advance(ring);
|
|
|
|
|
|
return ret;
|
|
return ret;
|