diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c index bd6c5eb5786c..9a75f4a9b339 100644 --- a/drivers/gpu/drm/i915/display/intel_dp.c +++ b/drivers/gpu/drm/i915/display/intel_dp.c @@ -5884,6 +5884,9 @@ static bool intel_dp_handle_link_service_irq(struct intel_dp *intel_dp, u8 irq_m if (irq_mask & RX_CAP_CHANGED) reprobe_needed = true; + if (irq_mask & LINK_STATUS_CHANGED) + intel_dp_check_link_state(intel_dp); + if (irq_mask & HDMI_LINK_STATUS_CHANGED) intel_dp_handle_hdmi_link_status_change(intel_dp); @@ -5937,14 +5940,18 @@ intel_dp_short_pulse(struct intel_dp *intel_dp) intel_dp_handle_device_service_irq(intel_dp, esi[1]); + /* + * Force checking the link status for DPCD_REV < 1.2 + * TODO: let the link status check depend on LINK_STATUS_CHANGED + * for DPCD_REV >= 1.2 + */ + esi[3] |= LINK_STATUS_CHANGED; if (intel_dp_handle_link_service_irq(intel_dp, esi[3])) reprobe_needed = true; /* Handle CEC interrupts, if any */ drm_dp_cec_irq(&intel_dp->aux); - intel_dp_check_link_state(intel_dp); - if (READ_ONCE(intel_dp->downstream_port_changed)) { WRITE_ONCE(intel_dp->downstream_port_changed, false); reprobe_needed = true;