[Intel-gfx] [PATCH v3 10/14] drm/i915/dp: add functions for max common link rate and lane count

Manasi Navare manasi.d.navare at intel.com
Tue Mar 28 21:47:33 UTC 2017


On Tue, Mar 28, 2017 at 05:59:10PM +0300, Jani Nikula wrote:
> These are the theoretical maximums common for source and sink. These are
> the maximums we should start with. They may be degraded in case of link
> training failures, and the dynamic link values are stored separately.
> 
> Cc: Manasi Navare <manasi.d.navare at intel.com>
> Cc: Ville Syrjälä <ville.syrjala at linux.intel.com>
> Signed-off-by: Jani Nikula <jani.nikula at intel.com>

 Reviewed-by: Manasi Navare <manasi.d.navare at intel.com>

> ---
>  drivers/gpu/drm/i915/intel_dp.c | 29 +++++++++++++++++------------
>  1 file changed, 17 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> index a0082a3784e8..b3df2082eac9 100644
> --- a/drivers/gpu/drm/i915/intel_dp.c
> +++ b/drivers/gpu/drm/i915/intel_dp.c
> @@ -161,22 +161,27 @@ static void intel_dp_set_sink_rates(struct intel_dp *intel_dp)
>  	intel_dp->num_sink_rates = num_rates;
>  }
>  
> -static int intel_dp_max_sink_rate(struct intel_dp *intel_dp)
> +/* Theoretical max between source and sink */
> +static int intel_dp_max_common_rate(struct intel_dp *intel_dp)
>  {
> -	return intel_dp->sink_rates[intel_dp->num_sink_rates - 1];
> +	return intel_dp->common_rates[intel_dp->num_common_rates - 1];
>  }
>  
> -static u8 intel_dp_max_lane_count(struct intel_dp *intel_dp)
> +/* Theoretical max between source and sink */
> +static int intel_dp_max_common_lane_count(struct intel_dp *intel_dp)
>  {
>  	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
> -	u8 source_max, sink_max;
> -
> -	source_max = intel_dig_port->max_lanes;
> -	sink_max = intel_dp->max_link_lane_count;
> +	int source_max = intel_dig_port->max_lanes;
> +	int sink_max = drm_dp_max_lane_count(intel_dp->dpcd);
>  
>  	return min(source_max, sink_max);
>  }
>  
> +static int intel_dp_max_lane_count(struct intel_dp *intel_dp)
> +{
> +	return intel_dp->max_link_lane_count;
> +}
> +
>  int
>  intel_dp_link_required(int pixel_clock, int bpp)
>  {
> @@ -329,7 +334,7 @@ int intel_dp_get_link_train_fallback_values(struct intel_dp *intel_dp,
>  		intel_dp->max_link_rate = intel_dp->common_rates[index - 1];
>  		intel_dp->max_link_lane_count = lane_count;
>  	} else if (lane_count > 1) {
> -		intel_dp->max_link_rate = intel_dp_max_sink_rate(intel_dp);
> +		intel_dp->max_link_rate = intel_dp_max_common_rate(intel_dp);
>  		intel_dp->max_link_lane_count = lane_count >> 1;
>  	} else {
>  		DRM_ERROR("Link Training Unsuccessful\n");
> @@ -4636,11 +4641,11 @@ intel_dp_long_pulse(struct intel_connector *intel_connector)
>  		      yesno(drm_dp_tps3_supported(intel_dp->dpcd)));
>  
>  	if (intel_dp->reset_link_params) {
> -		/* Set the max lane count for link */
> -		intel_dp->max_link_lane_count = drm_dp_max_lane_count(intel_dp->dpcd);
> +		/* Initial max link lane count */
> +		intel_dp->max_link_lane_count = intel_dp_max_common_lane_count(intel_dp);
>  
> -		/* Set the max link rate for link */
> -		intel_dp->max_link_rate = intel_dp_max_sink_rate(intel_dp);
> +		/* Initial max link rate */
> +		intel_dp->max_link_rate = intel_dp_max_common_rate(intel_dp);
>  
>  		intel_dp->reset_link_params = false;
>  	}
> -- 
> 2.1.4
> 


More information about the Intel-gfx mailing list