|
@@ -5684,6 +5684,7 @@ static void __intel_set_power_well(struct drm_device *dev, bool enable)
|
|
|
{
|
|
|
struct drm_i915_private *dev_priv = dev->dev_private;
|
|
|
bool is_enabled, enable_requested;
|
|
|
+ unsigned long irqflags;
|
|
|
uint32_t tmp;
|
|
|
|
|
|
tmp = I915_READ(HSW_PWR_WELL_DRIVER);
|
|
@@ -5701,9 +5702,24 @@ static void __intel_set_power_well(struct drm_device *dev, bool enable)
|
|
|
HSW_PWR_WELL_STATE_ENABLED), 20))
|
|
|
DRM_ERROR("Timeout enabling power well\n");
|
|
|
}
|
|
|
+
|
|
|
+ if (IS_BROADWELL(dev)) {
|
|
|
+ spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
|
|
|
+ I915_WRITE(GEN8_DE_PIPE_IMR(PIPE_B),
|
|
|
+ dev_priv->de_irq_mask[PIPE_B]);
|
|
|
+ I915_WRITE(GEN8_DE_PIPE_IER(PIPE_B),
|
|
|
+ ~dev_priv->de_irq_mask[PIPE_B] |
|
|
|
+ GEN8_PIPE_VBLANK);
|
|
|
+ I915_WRITE(GEN8_DE_PIPE_IMR(PIPE_C),
|
|
|
+ dev_priv->de_irq_mask[PIPE_C]);
|
|
|
+ I915_WRITE(GEN8_DE_PIPE_IER(PIPE_C),
|
|
|
+ ~dev_priv->de_irq_mask[PIPE_C] |
|
|
|
+ GEN8_PIPE_VBLANK);
|
|
|
+ POSTING_READ(GEN8_DE_PIPE_IER(PIPE_C));
|
|
|
+ spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
|
|
|
+ }
|
|
|
} else {
|
|
|
if (enable_requested) {
|
|
|
- unsigned long irqflags;
|
|
|
enum pipe p;
|
|
|
|
|
|
I915_WRITE(HSW_PWR_WELL_DRIVER, 0);
|