diff options
author | Paulo Zanoni <paulo.r.zanoni@intel.com> | 2013-08-06 17:57:12 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2013-08-23 08:52:26 -0400 |
commit | 43eaea131823c5ca13d03364e61bd15f0b22a0f7 (patch) | |
tree | 48bd1ea6a98a7bf294abe73e10b1e14fa85ebfe5 /drivers/gpu/drm/i915/intel_ringbuffer.c | |
parent | a40066412cc2ace1c1299e7a4d7a81dc33395b6f (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.c | 22 |
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 | ||