aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_ringbuffer.c
diff options
context:
space:
mode:
authorPaulo Zanoni <paulo.r.zanoni@intel.com>2013-08-06 17:57:12 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2013-08-23 08:52:26 -0400
commit43eaea131823c5ca13d03364e61bd15f0b22a0f7 (patch)
tree48bd1ea6a98a7bf294abe73e10b1e14fa85ebfe5 /drivers/gpu/drm/i915/intel_ringbuffer.c
parenta40066412cc2ace1c1299e7a4d7a81dc33395b6f (diff)
drm/i915: wrap GTIMR changes
Just like the functions that touch DEIMR and SDEIMR, but for GTIMR. The new functions contain a POSTING_READ(GTIMR) which was not present at the 2 callers inside i915_irq.c. The implementation is based on ibx_display_interrupt_update. Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com> Reviewed-by: Rodrigo Vivi <rodrigo.vivi@gmail.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_ringbuffer.c')
-rw-r--r--drivers/gpu/drm/i915/intel_ringbuffer.c22
1 files changed, 6 insertions, 16 deletions
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
index 34777168f700..2e370804248f 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
@@ -836,11 +836,8 @@ gen5_ring_get_irq(struct intel_ring_buffer *ring)
836 return false; 836 return false;
837 837
838 spin_lock_irqsave(&dev_priv->irq_lock, flags); 838 spin_lock_irqsave(&dev_priv->irq_lock, flags);
839 if (ring->irq_refcount++ == 0) { 839 if (ring->irq_refcount++ == 0)
840 dev_priv->gt_irq_mask &= ~ring->irq_enable_mask; 840 ilk_enable_gt_irq(dev_priv, ring->irq_enable_mask);
841 I915_WRITE(GTIMR, dev_priv->gt_irq_mask);
842 POSTING_READ(GTIMR);
843 }
844 spin_unlock_irqrestore(&dev_priv->irq_lock, flags); 841 spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
845 842
846 return true; 843 return true;
@@ -854,11 +851,8 @@ gen5_ring_put_irq(struct intel_ring_buffer *ring)
854 unsigned long flags; 851 unsigned long flags;
855 852
856 spin_lock_irqsave(&dev_priv->irq_lock, flags); 853 spin_lock_irqsave(&dev_priv->irq_lock, flags);
857 if (--ring->irq_refcount == 0) { 854 if (--ring->irq_refcount == 0)
858 dev_priv->gt_irq_mask |= ring->irq_enable_mask; 855 ilk_disable_gt_irq(dev_priv, ring->irq_enable_mask);
859 I915_WRITE(GTIMR, dev_priv->gt_irq_mask);
860 POSTING_READ(GTIMR);
861 }
862 spin_unlock_irqrestore(&dev_priv->irq_lock, flags); 856 spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
863} 857}
864 858
@@ -1028,9 +1022,7 @@ gen6_ring_get_irq(struct intel_ring_buffer *ring)
1028 GT_RENDER_L3_PARITY_ERROR_INTERRUPT)); 1022 GT_RENDER_L3_PARITY_ERROR_INTERRUPT));
1029 else 1023 else
1030 I915_WRITE_IMR(ring, ~ring->irq_enable_mask); 1024 I915_WRITE_IMR(ring, ~ring->irq_enable_mask);
1031 dev_priv->gt_irq_mask &= ~ring->irq_enable_mask; 1025 ilk_enable_gt_irq(dev_priv, ring->irq_enable_mask);
1032 I915_WRITE(GTIMR, dev_priv->gt_irq_mask);
1033 POSTING_READ(GTIMR);
1034 } 1026 }
1035 spin_unlock_irqrestore(&dev_priv->irq_lock, flags); 1027 spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
1036 1028
@@ -1051,9 +1043,7 @@ gen6_ring_put_irq(struct intel_ring_buffer *ring)
1051 ~GT_RENDER_L3_PARITY_ERROR_INTERRUPT); 1043 ~GT_RENDER_L3_PARITY_ERROR_INTERRUPT);
1052 else 1044 else
1053 I915_WRITE_IMR(ring, ~0); 1045 I915_WRITE_IMR(ring, ~0);
1054 dev_priv->gt_irq_mask |= ring->irq_enable_mask; 1046 ilk_disable_gt_irq(dev_priv, ring->irq_enable_mask);
1055 I915_WRITE(GTIMR, dev_priv->gt_irq_mask);
1056 POSTING_READ(GTIMR);
1057 } 1047 }
1058 spin_unlock_irqrestore(&dev_priv->irq_lock, flags); 1048 spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
1059 1049