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ä <ville.syrjala@linux.intel.com>
Link: https://patch.msgid.link/20251119185310.10428-2-ville.syrjala@linux.intel.com
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
}
}
+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;
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);
{
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;