Commit 8e5fd599 authored by Ville Syrjälä's avatar Ville Syrjälä Committed by Daniel Vetter
Browse files

drm/i915/chv: Make CHV irq handler loop until all interrupts are consumed

parent 3278f67f
Loading
Loading
Loading
Loading
+14 −15
Original line number Original line Diff line number Diff line
@@ -1787,11 +1787,12 @@ static irqreturn_t cherryview_irq_handler(int irq, void *arg)
	u32 master_ctl, iir;
	u32 master_ctl, iir;
	irqreturn_t ret = IRQ_NONE;
	irqreturn_t ret = IRQ_NONE;


	master_ctl = I915_READ(GEN8_MASTER_IRQ) & ~DE_MASTER_IRQ_CONTROL;
	for (;;) {
		master_ctl = I915_READ(GEN8_MASTER_IRQ) & ~GEN8_MASTER_IRQ_CONTROL;
		iir = I915_READ(VLV_IIR);
		iir = I915_READ(VLV_IIR);


		if (master_ctl == 0 && iir == 0)
		if (master_ctl == 0 && iir == 0)
		return IRQ_NONE;
			break;


		I915_WRITE(GEN8_MASTER_IRQ, 0);
		I915_WRITE(GEN8_MASTER_IRQ, 0);


@@ -1800,10 +1801,7 @@ static irqreturn_t cherryview_irq_handler(int irq, void *arg)
		valleyview_pipestat_irq_handler(dev, iir);
		valleyview_pipestat_irq_handler(dev, iir);


		/* Consume port.  Then clear IIR or we'll miss events */
		/* Consume port.  Then clear IIR or we'll miss events */
	if (iir & I915_DISPLAY_PORT_INTERRUPT) {
		i9xx_hpd_irq_handler(dev);
		i9xx_hpd_irq_handler(dev);
		ret = IRQ_HANDLED;
	}


		I915_WRITE(VLV_IIR, iir);
		I915_WRITE(VLV_IIR, iir);


@@ -1811,6 +1809,7 @@ static irqreturn_t cherryview_irq_handler(int irq, void *arg)
		POSTING_READ(GEN8_MASTER_IRQ);
		POSTING_READ(GEN8_MASTER_IRQ);


		ret = IRQ_HANDLED;
		ret = IRQ_HANDLED;
	}


	return ret;
	return ret;
}
}