|
@@ -427,6 +427,9 @@ static int init_render_ring(struct intel_ring_buffer *ring)
|
|
|
if (INTEL_INFO(dev)->gen >= 6)
|
|
|
I915_WRITE(INSTPM, _MASKED_BIT_ENABLE(INSTPM_FORCE_ORDERING));
|
|
|
|
|
|
+ if (IS_IVYBRIDGE(dev))
|
|
|
+ I915_WRITE_IMR(ring, ~GEN6_RENDER_L3_PARITY_ERROR);
|
|
|
+
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
@@ -814,7 +817,11 @@ gen6_ring_get_irq(struct intel_ring_buffer *ring)
|
|
|
|
|
|
spin_lock_irqsave(&dev_priv->irq_lock, flags);
|
|
|
if (ring->irq_refcount++ == 0) {
|
|
|
- I915_WRITE_IMR(ring, ~ring->irq_enable_mask);
|
|
|
+ if (IS_IVYBRIDGE(dev) && ring->id == RCS)
|
|
|
+ I915_WRITE_IMR(ring, ~(ring->irq_enable_mask |
|
|
|
+ GEN6_RENDER_L3_PARITY_ERROR));
|
|
|
+ else
|
|
|
+ I915_WRITE_IMR(ring, ~ring->irq_enable_mask);
|
|
|
dev_priv->gt_irq_mask &= ~ring->irq_enable_mask;
|
|
|
I915_WRITE(GTIMR, dev_priv->gt_irq_mask);
|
|
|
POSTING_READ(GTIMR);
|
|
@@ -833,7 +840,10 @@ gen6_ring_put_irq(struct intel_ring_buffer *ring)
|
|
|
|
|
|
spin_lock_irqsave(&dev_priv->irq_lock, flags);
|
|
|
if (--ring->irq_refcount == 0) {
|
|
|
- I915_WRITE_IMR(ring, ~0);
|
|
|
+ if (IS_IVYBRIDGE(dev) && ring->id == RCS)
|
|
|
+ I915_WRITE_IMR(ring, ~GEN6_RENDER_L3_PARITY_ERROR);
|
|
|
+ else
|
|
|
+ I915_WRITE_IMR(ring, ~0);
|
|
|
dev_priv->gt_irq_mask |= ring->irq_enable_mask;
|
|
|
I915_WRITE(GTIMR, dev_priv->gt_irq_mask);
|
|
|
POSTING_READ(GTIMR);
|