[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