Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

drm/i915/dp: Check SST link status while handling link service IRQs

Move checking the link status for SST to
intel_dp_handle_link_service_irq(). This is the logical place for the
check which should only happen in response to a LINK_STATUS_CHANGE sink
IRQ. This IRQ is only supported by DPCD revision >= 1.2, so for sinks
with an older DPCD revision the link status is checked in response to
any HPD IRQ. For newer DPCD revisions however the link status check can
be made conditional on LINK_STATUS_CHANGE.

For now keep the current behavior of always forcing a link status check
regardless of LINK_STATUS_CHANGE being set or not.

This also prepares for a follow-up change sharing the link service IRQ
handler for SST and MST (on MST the link status check only happening in
response to a LINK_STATUS_CHANGE IRQ).

Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
Signed-off-by: Imre Deak <imre.deak@intel.com>
Link: https://patch.msgid.link/20260225164618.1261368-18-imre.deak@intel.com

Imre Deak 9b9e4f09 d036488a

+9 -2
+9 -2
drivers/gpu/drm/i915/display/intel_dp.c
··· 5884 5884 if (irq_mask & RX_CAP_CHANGED) 5885 5885 reprobe_needed = true; 5886 5886 5887 + if (irq_mask & LINK_STATUS_CHANGED) 5888 + intel_dp_check_link_state(intel_dp); 5889 + 5887 5890 if (irq_mask & HDMI_LINK_STATUS_CHANGED) 5888 5891 intel_dp_handle_hdmi_link_status_change(intel_dp); 5889 5892 ··· 5940 5937 5941 5938 intel_dp_handle_device_service_irq(intel_dp, esi[1]); 5942 5939 5940 + /* 5941 + * Force checking the link status for DPCD_REV < 1.2 5942 + * TODO: let the link status check depend on LINK_STATUS_CHANGED 5943 + * for DPCD_REV >= 1.2 5944 + */ 5945 + esi[3] |= LINK_STATUS_CHANGED; 5943 5946 if (intel_dp_handle_link_service_irq(intel_dp, esi[3])) 5944 5947 reprobe_needed = true; 5945 5948 5946 5949 /* Handle CEC interrupts, if any */ 5947 5950 drm_dp_cec_irq(&intel_dp->aux); 5948 - 5949 - intel_dp_check_link_state(intel_dp); 5950 5951 5951 5952 if (READ_ONCE(intel_dp->downstream_port_changed)) { 5952 5953 WRITE_ONCE(intel_dp->downstream_port_changed, false);