drm/i915/dp: Prevent link training fallback on disconnected port
authorImre Deak <imre.deak@intel.com>
Wed, 10 May 2023 10:31:27 +0000 (13:31 +0300)
committerImre Deak <imre.deak@intel.com>
Tue, 16 May 2023 13:53:49 +0000 (16:53 +0300)
Prevent downgrading the link training maximum lane count/rate if the
sink is disconnected - and so the link training failure is expected. In
such cases modeset failures due to the reduced max link params would be
just confusing for user space (instead of which the correct thing it
should act on is the sink disconnect signaled by a hotplug event,
requiring a disabling modeset).

v2:
- Check the actual HPD state to handle the forced connector state case.
  (Vinod)

Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Vinod Govindapillai <vinod.govindapillai@intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> (v1)
Reviewed-by: Vinod Govindapillai <vinod.govindapillai@intel.com>
Signed-off-by: Imre Deak <imre.deak@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230510103131.1618266-11-imre.deak@intel.com
drivers/gpu/drm/i915/display/intel_dp_link_training.c

index 51d1e4b4b2f1985a0a19936d5e2cc04fe27f5a81..0952a707358c18abbf1010a63d4078e3a47ad7e2 100644 (file)
@@ -1065,6 +1065,11 @@ static void intel_dp_schedule_fallback_link_training(struct intel_dp *intel_dp,
 {
        struct intel_connector *intel_connector = intel_dp->attached_connector;
 
+       if (!intel_digital_port_connected(&dp_to_dig_port(intel_dp)->base)) {
+               lt_dbg(intel_dp, DP_PHY_DPRX, "Link Training failed on disconnected sink.\n");
+               return;
+       }
+
        if (intel_dp->hobl_active) {
                lt_dbg(intel_dp, DP_PHY_DPRX,
                       "Link Training failed with HOBL active, not enabling it from now on\n");