|
@@ -1892,6 +1892,9 @@ static irqreturn_t valleyview_irq_handler(int irq, void *arg)
|
|
|
u32 iir, gt_iir, pm_iir;
|
|
|
irqreturn_t ret = IRQ_NONE;
|
|
|
|
|
|
+ if (!intel_irqs_enabled(dev_priv))
|
|
|
+ return IRQ_NONE;
|
|
|
+
|
|
|
while (true) {
|
|
|
/* Find, clear, then process each source of interrupt */
|
|
|
|
|
@@ -1936,6 +1939,9 @@ static irqreturn_t cherryview_irq_handler(int irq, void *arg)
|
|
|
u32 master_ctl, iir;
|
|
|
irqreturn_t ret = IRQ_NONE;
|
|
|
|
|
|
+ if (!intel_irqs_enabled(dev_priv))
|
|
|
+ return IRQ_NONE;
|
|
|
+
|
|
|
for (;;) {
|
|
|
master_ctl = I915_READ(GEN8_MASTER_IRQ) & ~GEN8_MASTER_IRQ_CONTROL;
|
|
|
iir = I915_READ(VLV_IIR);
|
|
@@ -2208,6 +2214,9 @@ static irqreturn_t ironlake_irq_handler(int irq, void *arg)
|
|
|
u32 de_iir, gt_iir, de_ier, sde_ier = 0;
|
|
|
irqreturn_t ret = IRQ_NONE;
|
|
|
|
|
|
+ if (!intel_irqs_enabled(dev_priv))
|
|
|
+ return IRQ_NONE;
|
|
|
+
|
|
|
/* We get interrupts on unclaimed registers, so check for this before we
|
|
|
* do any I915_{READ,WRITE}. */
|
|
|
intel_uncore_check_errors(dev);
|
|
@@ -2279,6 +2288,9 @@ static irqreturn_t gen8_irq_handler(int irq, void *arg)
|
|
|
enum pipe pipe;
|
|
|
u32 aux_mask = GEN8_AUX_CHANNEL_A;
|
|
|
|
|
|
+ if (!intel_irqs_enabled(dev_priv))
|
|
|
+ return IRQ_NONE;
|
|
|
+
|
|
|
if (IS_GEN9(dev))
|
|
|
aux_mask |= GEN9_AUX_CHANNEL_B | GEN9_AUX_CHANNEL_C |
|
|
|
GEN9_AUX_CHANNEL_D;
|
|
@@ -3771,6 +3783,9 @@ static irqreturn_t i8xx_irq_handler(int irq, void *arg)
|
|
|
I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT |
|
|
|
I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT;
|
|
|
|
|
|
+ if (!intel_irqs_enabled(dev_priv))
|
|
|
+ return IRQ_NONE;
|
|
|
+
|
|
|
iir = I915_READ16(IIR);
|
|
|
if (iir == 0)
|
|
|
return IRQ_NONE;
|
|
@@ -3951,6 +3966,9 @@ static irqreturn_t i915_irq_handler(int irq, void *arg)
|
|
|
I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT;
|
|
|
int pipe, ret = IRQ_NONE;
|
|
|
|
|
|
+ if (!intel_irqs_enabled(dev_priv))
|
|
|
+ return IRQ_NONE;
|
|
|
+
|
|
|
iir = I915_READ(IIR);
|
|
|
do {
|
|
|
bool irq_received = (iir & ~flip_mask) != 0;
|
|
@@ -4171,6 +4189,9 @@ static irqreturn_t i965_irq_handler(int irq, void *arg)
|
|
|
I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT |
|
|
|
I915_DISPLAY_PLANE_B_FLIP_PENDING_INTERRUPT;
|
|
|
|
|
|
+ if (!intel_irqs_enabled(dev_priv))
|
|
|
+ return IRQ_NONE;
|
|
|
+
|
|
|
iir = I915_READ(IIR);
|
|
|
|
|
|
for (;;) {
|
|
@@ -4520,6 +4541,7 @@ void intel_runtime_pm_disable_interrupts(struct drm_i915_private *dev_priv)
|
|
|
{
|
|
|
dev_priv->dev->driver->irq_uninstall(dev_priv->dev);
|
|
|
dev_priv->pm.irqs_enabled = false;
|
|
|
+ synchronize_irq(dev_priv->dev->irq);
|
|
|
}
|
|
|
|
|
|
/**
|