diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/atombios_dp.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/atombios_dp.c | 20 | 
1 files changed, 16 insertions, 4 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/atombios_dp.c b/drivers/gpu/drm/amd/amdgpu/atombios_dp.c index 21aacc1f45c1..bf731e9f643e 100644 --- a/drivers/gpu/drm/amd/amdgpu/atombios_dp.c +++ b/drivers/gpu/drm/amd/amdgpu/atombios_dp.c @@ -265,15 +265,27 @@ static int amdgpu_atombios_dp_get_dp_link_config(struct drm_connector *connector  	unsigned max_lane_num = drm_dp_max_lane_count(dpcd);  	unsigned lane_num, i, max_pix_clock; -	for (lane_num = 1; lane_num <= max_lane_num; lane_num <<= 1) { -		for (i = 0; i < ARRAY_SIZE(link_rates) && link_rates[i] <= max_link_rate; i++) { -			max_pix_clock = (lane_num * link_rates[i] * 8) / bpp; +	if (amdgpu_connector_encoder_get_dp_bridge_encoder_id(connector) == +	    ENCODER_OBJECT_ID_NUTMEG) { +		for (lane_num = 1; lane_num <= max_lane_num; lane_num <<= 1) { +			max_pix_clock = (lane_num * 270000 * 8) / bpp;  			if (max_pix_clock >= pix_clock) {  				*dp_lanes = lane_num; -				*dp_rate = link_rates[i]; +				*dp_rate = 270000;  				return 0;  			}  		} +	} else { +		for (lane_num = 1; lane_num <= max_lane_num; lane_num <<= 1) { +			for (i = 0; i < ARRAY_SIZE(link_rates) && link_rates[i] <= max_link_rate; i++) { +				max_pix_clock = (lane_num * link_rates[i] * 8) / bpp; +				if (max_pix_clock >= pix_clock) { +					*dp_lanes = lane_num; +					*dp_rate = link_rates[i]; +					return 0; +				} +			} +		}  	}  	return -EINVAL; | 
