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

Jani Nikula
2026-04-30T07:49:41Z

On Wed, 29 Apr 2026, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote:
> 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.

That was lost on me with the rabbit hole the lpe irq handler is.

I think I can put this in the intel_display_irq_ack() part, although the
name becomes misleading as it also handles some parts. Oh well.

BR,
Jani.

>
>> -
>> /*
>> * 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

--
Jani Nikula, Intel