From: Ville Syrjälä Date: Wed, 19 Nov 2025 18:53:09 +0000 (+0200) Subject: drm/i915: Enable DDI A/B AUX interrupts on LNL+ X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1513904c46b61e483e4d61519c31078581bb6cb8;p=thirdparty%2Fkernel%2Flinux.git drm/i915: Enable DDI A/B AUX interrupts on LNL+ Apparently the DDI A/B AUX interrupts move onto the PICA side on LNL. Unmask them properly so that we actually get the interrupts. The interrupt handler was already trying to handle them despite the interrupts remaining masked. Signed-off-by: Ville Syrjälä Link: https://patch.msgid.link/20251119185310.10428-2-ville.syrjala@linux.intel.com Reviewed-by: Jani Nikula --- diff --git a/drivers/gpu/drm/i915/display/intel_display_irq.c b/drivers/gpu/drm/i915/display/intel_display_irq.c index d2933ac3acb4..9adeebb376b1 100644 --- a/drivers/gpu/drm/i915/display/intel_display_irq.c +++ b/drivers/gpu/drm/i915/display/intel_display_irq.c @@ -2410,10 +2410,20 @@ void gen8_de_irq_postinstall(struct intel_display *display) } } +u32 xelpdp_pica_aux_mask(struct intel_display *display) +{ + u32 mask = XELPDP_AUX_TC_MASK; + + if (DISPLAY_VER(display) >= 20) + mask |= XE2LPD_AUX_DDI_MASK; + + return mask; +} + static void mtp_irq_postinstall(struct intel_display *display) { u32 sde_mask = SDE_GMBUS_ICP | SDE_PICAINTERRUPT; - u32 de_hpd_mask = XELPDP_AUX_TC_MASK; + u32 de_hpd_mask = xelpdp_pica_aux_mask(display); u32 de_hpd_enables = de_hpd_mask | XELPDP_DP_ALT_HOTPLUG_MASK | XELPDP_TBT_HOTPLUG_MASK; diff --git a/drivers/gpu/drm/i915/display/intel_display_irq.h b/drivers/gpu/drm/i915/display/intel_display_irq.h index 84acd31948cf..b25d180254d7 100644 --- a/drivers/gpu/drm/i915/display/intel_display_irq.h +++ b/drivers/gpu/drm/i915/display/intel_display_irq.h @@ -16,6 +16,8 @@ struct drm_printer; struct intel_display; struct intel_display_irq_snapshot; +u32 xelpdp_pica_aux_mask(struct intel_display *display); + void valleyview_enable_display_irqs(struct intel_display *display); void valleyview_disable_display_irqs(struct intel_display *display); diff --git a/drivers/gpu/drm/i915/display/intel_hotplug_irq.c b/drivers/gpu/drm/i915/display/intel_hotplug_irq.c index 46c47b3d6f42..82c39e4ffa37 100644 --- a/drivers/gpu/drm/i915/display/intel_hotplug_irq.c +++ b/drivers/gpu/drm/i915/display/intel_hotplug_irq.c @@ -519,12 +519,9 @@ void xelpdp_pica_irq_handler(struct intel_display *display, u32 iir) { enum hpd_pin pin; u32 hotplug_trigger = iir & (XELPDP_DP_ALT_HOTPLUG_MASK | XELPDP_TBT_HOTPLUG_MASK); - u32 trigger_aux = iir & XELPDP_AUX_TC_MASK; + u32 trigger_aux = iir & xelpdp_pica_aux_mask(display); u32 pin_mask = 0, long_mask = 0; - if (DISPLAY_VER(display) >= 20) - trigger_aux |= iir & XE2LPD_AUX_DDI_MASK; - for (pin = HPD_PORT_TC1; pin <= HPD_PORT_TC4; pin++) { u32 val;