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: Ack only the handled link service IRQs

Ack only those SST link service IRQs that will be handled, similarly to
device service IRQs. While at it add asserts that only the known/acked
link service IRQs are handled both in the MST and SST case.

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

Imre Deak 7dc457ac 683853b1

+16 -1
+16 -1
drivers/gpu/drm/i915/display/intel_dp.c
··· 4937 4937 DP_DOWN_REP_MSG_RDY | \ 4938 4938 DP_UP_REQ_MSG_RDY) 4939 4939 4940 + #define INTEL_DP_LINK_SERVICE_IRQ_MASK_SST (RX_CAP_CHANGED | \ 4941 + LINK_STATUS_CHANGED | \ 4942 + HDMI_LINK_STATUS_CHANGED | \ 4943 + CONNECTED_OFF_ENTRY_REQUESTED | \ 4944 + DP_TUNNELING_IRQ) 4945 + 4946 + #define INTEL_DP_LINK_SERVICE_IRQ_MASK_MST (RX_CAP_CHANGED | \ 4947 + LINK_STATUS_CHANGED | \ 4948 + DP_TUNNELING_IRQ) 4949 + 4940 4950 static bool 4941 4951 intel_dp_get_sink_irq_esi(struct intel_dp *intel_dp, u8 *esi) 4942 4952 { ··· 5045 5035 esi); 5046 5036 5047 5037 esi[1] &= INTEL_DP_DEVICE_SERVICE_IRQ_MASK_SST; 5038 + esi[3] &= INTEL_DP_LINK_SERVICE_IRQ_MASK_SST; 5048 5039 5049 5040 if (mem_is_zero(&esi[1], 3)) 5050 5041 return true; ··· 5584 5573 5585 5574 drm_dbg_kms(display->drm, "DPRX ESI: %4ph\n", esi); 5586 5575 5587 - ack[3] |= esi[3] & (RX_CAP_CHANGED | LINK_STATUS_CHANGED | DP_TUNNELING_IRQ); 5576 + ack[3] |= esi[3] & INTEL_DP_LINK_SERVICE_IRQ_MASK_MST; 5588 5577 5589 5578 intel_dp_mst_hpd_irq(intel_dp, esi, ack); 5590 5579 ··· 5592 5581 break; 5593 5582 5594 5583 drm_WARN_ON(display->drm, ack[1] & ~INTEL_DP_DEVICE_SERVICE_IRQ_MASK_MST); 5584 + drm_WARN_ON(display->drm, ack[3] & ~INTEL_DP_LINK_SERVICE_IRQ_MASK_MST); 5595 5585 5596 5586 if (!intel_dp_ack_sink_irq_esi(intel_dp, ack)) 5597 5587 drm_dbg_kms(display->drm, "Failed to ack ESI\n"); ··· 5901 5889 struct intel_connector *connector = intel_dp->attached_connector; 5902 5890 struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base; 5903 5891 bool reprobe_needed = false; 5892 + 5893 + drm_WARN_ON(display->drm, irq_mask & ~(INTEL_DP_LINK_SERVICE_IRQ_MASK_SST | 5894 + INTEL_DP_LINK_SERVICE_IRQ_MASK_MST)); 5904 5895 5905 5896 if (irq_mask & RX_CAP_CHANGED) 5906 5897 reprobe_needed = true;