diff options
author | Alex Deucher <alexander.deucher@amd.com> | 2016-03-03 19:34:28 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2016-03-08 11:26:34 -0500 |
commit | 02d27234759dc4fe14a880ec1e1dee108cb0b503 (patch) | |
tree | d97682a1040a80b0190202a7767833e2c8b09d96 | |
parent | c8213a638f65bf487c10593c216525952cca3690 (diff) |
drm/amdgpu/dp: add back special handling for NUTMEG
When I fixed the dp rate selection in:
3b73b168cffd9c392584d3f665021fa2190f8612
drm/amdgpu: fix dp link rate selection (v2)
I accidently dropped the special handling for NUTMEG
DP bridge chips. They require a fixed link rate.
Reviewed-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Ken Wang <Qingqing.Wang@amd.com>
Reviewed-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org
-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 | |||
265 | unsigned max_lane_num = drm_dp_max_lane_count(dpcd); | 265 | unsigned max_lane_num = drm_dp_max_lane_count(dpcd); |
266 | unsigned lane_num, i, max_pix_clock; | 266 | unsigned lane_num, i, max_pix_clock; |
267 | 267 | ||
268 | for (lane_num = 1; lane_num <= max_lane_num; lane_num <<= 1) { | 268 | if (amdgpu_connector_encoder_get_dp_bridge_encoder_id(connector) == |
269 | for (i = 0; i < ARRAY_SIZE(link_rates) && link_rates[i] <= max_link_rate; i++) { | 269 | ENCODER_OBJECT_ID_NUTMEG) { |
270 | max_pix_clock = (lane_num * link_rates[i] * 8) / bpp; | 270 | for (lane_num = 1; lane_num <= max_lane_num; lane_num <<= 1) { |
271 | max_pix_clock = (lane_num * 270000 * 8) / bpp; | ||
271 | if (max_pix_clock >= pix_clock) { | 272 | if (max_pix_clock >= pix_clock) { |
272 | *dp_lanes = lane_num; | 273 | *dp_lanes = lane_num; |
273 | *dp_rate = link_rates[i]; | 274 | *dp_rate = 270000; |
274 | return 0; | 275 | return 0; |
275 | } | 276 | } |
276 | } | 277 | } |
278 | } else { | ||
279 | for (lane_num = 1; lane_num <= max_lane_num; lane_num <<= 1) { | ||
280 | for (i = 0; i < ARRAY_SIZE(link_rates) && link_rates[i] <= max_link_rate; i++) { | ||
281 | max_pix_clock = (lane_num * link_rates[i] * 8) / bpp; | ||
282 | if (max_pix_clock >= pix_clock) { | ||
283 | *dp_lanes = lane_num; | ||
284 | *dp_rate = link_rates[i]; | ||
285 | return 0; | ||
286 | } | ||
287 | } | ||
288 | } | ||
277 | } | 289 | } |
278 | 290 | ||
279 | return -EINVAL; | 291 | return -EINVAL; |