diff options
Diffstat (limited to 'drivers/gpu/drm/i915/intel_ringbuffer.c')
-rw-r--r-- | drivers/gpu/drm/i915/intel_ringbuffer.c | 32 |
1 files changed, 10 insertions, 22 deletions
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c index 74d02a704515..7de29d40d1ad 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 | ||
@@ -1072,10 +1062,8 @@ hsw_vebox_get_irq(struct intel_ring_buffer *ring) | |||
1072 | 1062 | ||
1073 | spin_lock_irqsave(&dev_priv->irq_lock, flags); | 1063 | spin_lock_irqsave(&dev_priv->irq_lock, flags); |
1074 | if (ring->irq_refcount++ == 0) { | 1064 | if (ring->irq_refcount++ == 0) { |
1075 | u32 pm_imr = I915_READ(GEN6_PMIMR); | ||
1076 | I915_WRITE_IMR(ring, ~ring->irq_enable_mask); | 1065 | I915_WRITE_IMR(ring, ~ring->irq_enable_mask); |
1077 | I915_WRITE(GEN6_PMIMR, pm_imr & ~ring->irq_enable_mask); | 1066 | snb_enable_pm_irq(dev_priv, ring->irq_enable_mask); |
1078 | POSTING_READ(GEN6_PMIMR); | ||
1079 | } | 1067 | } |
1080 | spin_unlock_irqrestore(&dev_priv->irq_lock, flags); | 1068 | spin_unlock_irqrestore(&dev_priv->irq_lock, flags); |
1081 | 1069 | ||
@@ -1094,10 +1082,8 @@ hsw_vebox_put_irq(struct intel_ring_buffer *ring) | |||
1094 | 1082 | ||
1095 | spin_lock_irqsave(&dev_priv->irq_lock, flags); | 1083 | spin_lock_irqsave(&dev_priv->irq_lock, flags); |
1096 | if (--ring->irq_refcount == 0) { | 1084 | if (--ring->irq_refcount == 0) { |
1097 | u32 pm_imr = I915_READ(GEN6_PMIMR); | ||
1098 | I915_WRITE_IMR(ring, ~0); | 1085 | I915_WRITE_IMR(ring, ~0); |
1099 | I915_WRITE(GEN6_PMIMR, pm_imr | ring->irq_enable_mask); | 1086 | snb_disable_pm_irq(dev_priv, ring->irq_enable_mask); |
1100 | POSTING_READ(GEN6_PMIMR); | ||
1101 | } | 1087 | } |
1102 | spin_unlock_irqrestore(&dev_priv->irq_lock, flags); | 1088 | spin_unlock_irqrestore(&dev_priv->irq_lock, flags); |
1103 | } | 1089 | } |
@@ -1594,6 +1580,8 @@ void intel_ring_init_seqno(struct intel_ring_buffer *ring, u32 seqno) | |||
1594 | if (INTEL_INFO(ring->dev)->gen >= 6) { | 1580 | if (INTEL_INFO(ring->dev)->gen >= 6) { |
1595 | I915_WRITE(RING_SYNC_0(ring->mmio_base), 0); | 1581 | I915_WRITE(RING_SYNC_0(ring->mmio_base), 0); |
1596 | I915_WRITE(RING_SYNC_1(ring->mmio_base), 0); | 1582 | I915_WRITE(RING_SYNC_1(ring->mmio_base), 0); |
1583 | if (HAS_VEBOX(ring->dev)) | ||
1584 | I915_WRITE(RING_SYNC_2(ring->mmio_base), 0); | ||
1597 | } | 1585 | } |
1598 | 1586 | ||
1599 | ring->set_seqno(ring, seqno); | 1587 | ring->set_seqno(ring, seqno); |