diff options
-rw-r--r-- | drivers/gpu/drm/i915/i915_irq.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c index af5c335a69db..efe3fc671e1e 100644 --- a/drivers/gpu/drm/i915/i915_irq.c +++ b/drivers/gpu/drm/i915/i915_irq.c | |||
@@ -142,14 +142,18 @@ static void snb_update_pm_irq(struct drm_i915_private *dev_priv, | |||
142 | uint32_t interrupt_mask, | 142 | uint32_t interrupt_mask, |
143 | uint32_t enabled_irq_mask) | 143 | uint32_t enabled_irq_mask) |
144 | { | 144 | { |
145 | uint32_t pmimr = I915_READ(GEN6_PMIMR); | 145 | uint32_t pmimr, new_val; |
146 | pmimr &= ~interrupt_mask; | ||
147 | pmimr |= (~enabled_irq_mask & interrupt_mask); | ||
148 | 146 | ||
149 | assert_spin_locked(&dev_priv->irq_lock); | 147 | assert_spin_locked(&dev_priv->irq_lock); |
150 | 148 | ||
151 | I915_WRITE(GEN6_PMIMR, pmimr); | 149 | pmimr = new_val = I915_READ(GEN6_PMIMR); |
152 | POSTING_READ(GEN6_PMIMR); | 150 | new_val &= ~interrupt_mask; |
151 | new_val |= (~enabled_irq_mask & interrupt_mask); | ||
152 | |||
153 | if (new_val != pmimr) { | ||
154 | I915_WRITE(GEN6_PMIMR, new_val); | ||
155 | POSTING_READ(GEN6_PMIMR); | ||
156 | } | ||
153 | } | 157 | } |
154 | 158 | ||
155 | void snb_enable_pm_irq(struct drm_i915_private *dev_priv, uint32_t mask) | 159 | void snb_enable_pm_irq(struct drm_i915_private *dev_priv, uint32_t mask) |