diff options
author | Paulo Zanoni <paulo.r.zanoni@intel.com> | 2013-08-06 17:57:15 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2013-08-23 08:52:28 -0400 |
commit | 605cd25b1ffa09a2f86b5c4bd120086dd5ea10a7 (patch) | |
tree | 1594fd024de2076832c5529b4980c8e560fb0c21 /drivers/gpu/drm/i915/i915_irq.c | |
parent | f52ecbcf8009ef18cda86b30efd837338cd25392 (diff) |
drm/i915: add dev_priv->pm_irq_mask
Just like irq_mask and gt_irq_mask, use it to track the status of
GEN6_PMIMR so we don't need to read it again every time we call
snb_update_pm_irq.
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/i915_irq.c')
-rw-r--r-- | drivers/gpu/drm/i915/i915_irq.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c index efe3fc671e1e..8872e1955c45 100644 --- a/drivers/gpu/drm/i915/i915_irq.c +++ b/drivers/gpu/drm/i915/i915_irq.c | |||
@@ -142,16 +142,17 @@ 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, new_val; | 145 | uint32_t new_val; |
146 | 146 | ||
147 | assert_spin_locked(&dev_priv->irq_lock); | 147 | assert_spin_locked(&dev_priv->irq_lock); |
148 | 148 | ||
149 | pmimr = new_val = I915_READ(GEN6_PMIMR); | 149 | new_val = dev_priv->pm_irq_mask; |
150 | new_val &= ~interrupt_mask; | 150 | new_val &= ~interrupt_mask; |
151 | new_val |= (~enabled_irq_mask & interrupt_mask); | 151 | new_val |= (~enabled_irq_mask & interrupt_mask); |
152 | 152 | ||
153 | if (new_val != pmimr) { | 153 | if (new_val != dev_priv->pm_irq_mask) { |
154 | I915_WRITE(GEN6_PMIMR, new_val); | 154 | dev_priv->pm_irq_mask = new_val; |
155 | I915_WRITE(GEN6_PMIMR, dev_priv->pm_irq_mask); | ||
155 | POSTING_READ(GEN6_PMIMR); | 156 | POSTING_READ(GEN6_PMIMR); |
156 | } | 157 | } |
157 | } | 158 | } |
@@ -2217,8 +2218,9 @@ static void gen5_gt_irq_postinstall(struct drm_device *dev) | |||
2217 | if (HAS_VEBOX(dev)) | 2218 | if (HAS_VEBOX(dev)) |
2218 | pm_irqs |= PM_VEBOX_USER_INTERRUPT; | 2219 | pm_irqs |= PM_VEBOX_USER_INTERRUPT; |
2219 | 2220 | ||
2221 | dev_priv->pm_irq_mask = 0xffffffff; | ||
2220 | I915_WRITE(GEN6_PMIIR, I915_READ(GEN6_PMIIR)); | 2222 | I915_WRITE(GEN6_PMIIR, I915_READ(GEN6_PMIIR)); |
2221 | I915_WRITE(GEN6_PMIMR, 0xffffffff); | 2223 | I915_WRITE(GEN6_PMIMR, dev_priv->pm_irq_mask); |
2222 | I915_WRITE(GEN6_PMIER, pm_irqs); | 2224 | I915_WRITE(GEN6_PMIER, pm_irqs); |
2223 | POSTING_READ(GEN6_PMIER); | 2225 | POSTING_READ(GEN6_PMIER); |
2224 | } | 2226 | } |