diff options
Diffstat (limited to 'drivers/gpu/drm/msm/dp/dp_link.c')
| -rw-r--r-- | drivers/gpu/drm/msm/dp/dp_link.c | 41 | 
1 files changed, 25 insertions, 16 deletions
| diff --git a/drivers/gpu/drm/msm/dp/dp_link.c b/drivers/gpu/drm/msm/dp/dp_link.c index c811da515fb3..be986da78c4a 100644 --- a/drivers/gpu/drm/msm/dp/dp_link.c +++ b/drivers/gpu/drm/msm/dp/dp_link.c @@ -773,7 +773,8 @@ static int dp_link_process_link_training_request(struct dp_link_private *link)  			link->request.test_lane_count);  	link->dp_link.link_params.num_lanes = link->request.test_lane_count; -	link->dp_link.link_params.rate = link->request.test_link_rate; +	link->dp_link.link_params.rate =  +		drm_dp_bw_code_to_link_rate(link->request.test_link_rate);  	return 0;  } @@ -869,6 +870,9 @@ static int dp_link_parse_vx_px(struct dp_link_private *link)  		drm_dp_get_adjust_request_voltage(link->link_status, 0);  	link->dp_link.phy_params.p_level =  		drm_dp_get_adjust_request_pre_emphasis(link->link_status, 0); + +	link->dp_link.phy_params.p_level >>= DP_TRAIN_PRE_EMPHASIS_SHIFT; +  	DRM_DEBUG_DP("Requested: v_level = 0x%x, p_level = 0x%x\n",  			link->dp_link.phy_params.v_level,  			link->dp_link.phy_params.p_level); @@ -911,7 +915,8 @@ static int dp_link_process_phy_test_pattern_request(  			link->request.test_lane_count);  	link->dp_link.link_params.num_lanes = link->request.test_lane_count; -	link->dp_link.link_params.rate = link->request.test_link_rate; +	link->dp_link.link_params.rate = +		drm_dp_bw_code_to_link_rate(link->request.test_link_rate);  	ret = dp_link_parse_vx_px(link); @@ -939,22 +944,20 @@ static u8 get_link_status(const u8 link_status[DP_LINK_STATUS_SIZE], int r)   */  static int dp_link_process_link_status_update(struct dp_link_private *link)  { -	if (!(get_link_status(link->link_status, -				DP_LANE_ALIGN_STATUS_UPDATED) & -				DP_LINK_STATUS_UPDATED) || -			(drm_dp_clock_recovery_ok(link->link_status, -					link->dp_link.link_params.num_lanes) && -			drm_dp_channel_eq_ok(link->link_status, -					link->dp_link.link_params.num_lanes))) -		return -EINVAL; +       bool channel_eq_done = drm_dp_channel_eq_ok(link->link_status, +                       link->dp_link.link_params.num_lanes); -	DRM_DEBUG_DP("channel_eq_done = %d, clock_recovery_done = %d\n", -			drm_dp_clock_recovery_ok(link->link_status, -			link->dp_link.link_params.num_lanes), -			drm_dp_clock_recovery_ok(link->link_status, -			link->dp_link.link_params.num_lanes)); +       bool clock_recovery_done = drm_dp_clock_recovery_ok(link->link_status, +                       link->dp_link.link_params.num_lanes); -	return 0; +       DRM_DEBUG_DP("channel_eq_done = %d, clock_recovery_done = %d\n", +                        channel_eq_done, clock_recovery_done); + +       if (channel_eq_done && clock_recovery_done) +               return -EINVAL; + + +       return 0;  }  /** @@ -1156,6 +1159,12 @@ int dp_link_adjust_levels(struct dp_link *dp_link, u8 *link_status)  	return 0;  } +void dp_link_reset_phy_params_vx_px(struct dp_link *dp_link) +{ +	dp_link->phy_params.v_level = 0; +	dp_link->phy_params.p_level = 0; +} +  u32 dp_link_get_test_bits_depth(struct dp_link *dp_link, u32 bpp)  {  	u32 tbd; | 
