aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/i915/i915_irq.c14
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
155void snb_enable_pm_irq(struct drm_i915_private *dev_priv, uint32_t mask) 159void snb_enable_pm_irq(struct drm_i915_private *dev_priv, uint32_t mask)