[Intel-gfx] [PATCH v2 5/5] drm/i915: Call intel_dp_dump_link_status() for CR failures
Imre Deak
imre.deak at intel.com
Wed Oct 6 16:12:23 UTC 2021
On Mon, Oct 04, 2021 at 08:05:35PM +0300, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala at linux.intel.com>
>
> I suppose intel_dp_dump_link_status() might be useful for diagnosing
> link training failures. Hoever we only call from the channel EQ phase
> currently. Let's call it from the CR phase as well.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
Reviewed-by: Imre Deak <imre.deak at intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_dp_link_training.c | 6 ++++--
> 1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_dp_link_training.c b/drivers/gpu/drm/i915/display/intel_dp_link_training.c
> index 18f4b469766e..c92044710012 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_link_training.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp_link_training.c
> @@ -649,6 +649,7 @@ intel_dp_link_training_clock_recovery(struct intel_dp *intel_dp,
> struct drm_i915_private *i915 = to_i915(encoder->base.dev);
> u8 old_link_status[DP_LINK_STATUS_SIZE] = {};
> int voltage_tries, cr_tries, max_cr_tries;
> + u8 link_status[DP_LINK_STATUS_SIZE];
> bool max_vswing_reached = false;
> char phy_name[10];
>
> @@ -678,8 +679,6 @@ intel_dp_link_training_clock_recovery(struct intel_dp *intel_dp,
>
> voltage_tries = 1;
> for (cr_tries = 0; cr_tries < max_cr_tries; ++cr_tries) {
> - u8 link_status[DP_LINK_STATUS_SIZE];
> -
> intel_dp_link_training_clock_recovery_delay(intel_dp, dp_phy);
>
> if (drm_dp_dpcd_read_phy_link_status(&intel_dp->aux, dp_phy,
> @@ -697,6 +696,7 @@ intel_dp_link_training_clock_recovery(struct intel_dp *intel_dp,
> }
>
> if (voltage_tries == 5) {
> + intel_dp_dump_link_status(intel_dp, dp_phy, link_status);
> drm_dbg_kms(&i915->drm,
> "[ENCODER:%d:%s][%s] Same voltage tried 5 times\n",
> encoder->base.base.id, encoder->base.name, phy_name);
> @@ -704,6 +704,7 @@ intel_dp_link_training_clock_recovery(struct intel_dp *intel_dp,
> }
>
> if (max_vswing_reached) {
> + intel_dp_dump_link_status(intel_dp, dp_phy, link_status);
> drm_dbg_kms(&i915->drm,
> "[ENCODER:%d:%s][%s] Max Voltage Swing reached\n",
> encoder->base.base.id, encoder->base.name, phy_name);
> @@ -732,6 +733,7 @@ intel_dp_link_training_clock_recovery(struct intel_dp *intel_dp,
> max_vswing_reached = true;
> }
>
> + intel_dp_dump_link_status(intel_dp, dp_phy, link_status);
> drm_err(&i915->drm,
> "[ENCODER:%d:%s][%s] Failed clock recovery %d times, giving up!\n",
> encoder->base.base.id, encoder->base.name, phy_name, max_cr_tries);
> --
> 2.32.0
>
More information about the Intel-gfx
mailing list