Re: [PATCH 10/15] drm/i915/irq: move VLV/CHV LPE irq handler call after irq acks

Ville Syrjälä
2026-04-29T11:12:48Z

On Wed, Apr 29, 2026 at 01:24:50PM +0300, Jani Nikula wrote:
> The location of the intel_lpe_audio_irq_handler() call seems too
> early. Group the handler calls together slightly later.
>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
> drivers/gpu/drm/i915/i915_irq.c | 18 +++++++++---------
> 1 file changed, 9 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
> index ef9eadf38a53..1c87f56d668d 100644
> --- a/drivers/gpu/drm/i915/i915_irq.c
> +++ b/drivers/gpu/drm/i915/i915_irq.c
> @@ -282,10 +282,6 @@ static irqreturn_t valleyview_irq_handler(int irq, void *arg)
> * signalled in IIR */
> i9xx_pipestat_irq_ack(display, iir, pipe_stats);
>
> - if (iir & (I915_LPE_PIPE_A_INTERRUPT |
> - I915_LPE_PIPE_B_INTERRUPT))
> - intel_lpe_audio_irq_handler(display);

This thing acks the irq too, so I believe it needs to stay here.

> -
> /*
> * VLV_IIR is single buffered, and reflects the level
> * from PIPESTAT/PORT_HOTPLUG_STAT, hence clear it last.
> @@ -301,6 +297,10 @@ static irqreturn_t valleyview_irq_handler(int irq, void *arg)
> if (pm_iir)
> gen6_rps_irq_handler(&to_gt(dev_priv)->rps, pm_iir);
>
> + if (iir & (I915_LPE_PIPE_A_INTERRUPT |
> + I915_LPE_PIPE_B_INTERRUPT))
> + intel_lpe_audio_irq_handler(display);
> +
> if (hotplug_status)
> i9xx_hpd_irq_handler(display, hotplug_status);
>
> @@ -372,11 +372,6 @@ static irqreturn_t cherryview_irq_handler(int irq, void *arg)
> * signalled in IIR */
> i9xx_pipestat_irq_ack(display, iir, pipe_stats);
>
> - if (iir & (I915_LPE_PIPE_A_INTERRUPT |
> - I915_LPE_PIPE_B_INTERRUPT |
> - I915_LPE_PIPE_C_INTERRUPT))
> - intel_lpe_audio_irq_handler(display);
> -
> /*
> * VLV_IIR is single buffered, and reflects the level
> * from PIPESTAT/PORT_HOTPLUG_STAT, hence clear it last.
> @@ -387,6 +382,11 @@ static irqreturn_t cherryview_irq_handler(int irq, void *arg)
> intel_uncore_write(&dev_priv->uncore, VLV_IER, ier);
> intel_uncore_write(&dev_priv->uncore, GEN8_MASTER_IRQ, GEN8_MASTER_IRQ_CONTROL);
>
> + if (iir & (I915_LPE_PIPE_A_INTERRUPT |
> + I915_LPE_PIPE_B_INTERRUPT |
> + I915_LPE_PIPE_C_INTERRUPT))
> + intel_lpe_audio_irq_handler(display);
> +
> if (hotplug_status)
> i9xx_hpd_irq_handler(display, hotplug_status);
>
> --
> 2.47.3

--
Ville Syrjälä
Intel