• Imre Deak's avatar
    drm/i915: Fix modesetting in case of unexpected AUX timeouts · e42e7e58
    Imre Deak authored
    In case AUX failures happen unexpectedly during a modeset, the driver
    should still complete the modeset. In particular the driver should
    perform the link training sequence steps even in case of an AUX failure,
    as this sequence also includes port initialization steps. Not doing that
    can leave the port/pipe in a broken state and lead for instance to a
    flip done timeout.
    
    Fix this by continuing with link training (in a no-LTTPR mode) if the
    DPRX DPCD readout failed for some reason at the beginning of link
    training. After a successful connector detection we already have the
    DPCD read out and cached, so the failed repeated read for it should not
    cause a problem. Note that a partial AUX read could in theory partly
    overwrite the cached DPCD (and return error) but this overwrite should
    not happen if the returned values are corrupted (due to a timeout or
    some other IO error).
    
    Kudos to Ville to root cause the problem.
    
    Fixes: 264613b4 ("drm/i915: Disable LTTPR support when the DPCD rev < 1.4")
    References: https://gitlab.freedesktop.org/drm/intel/-/issues/3308
    Cc: stable@vger.kernel.org # 5.11
    Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Signed-off-by: default avatarImre Deak <imre.deak@intel.com>
    Reviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20210412232413.2755054-1-imre.deak@intel.com
    e42e7e58
intel_dp_link_training.c 26.4 KB