diff options
Diffstat (limited to 'drivers/gpu/drm/nouveau/nouveau_dp.c')
-rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_dp.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/gpu/drm/nouveau/nouveau_dp.c b/drivers/gpu/drm/nouveau/nouveau_dp.c index 8a1b188b4cd1..4562f309ae3d 100644 --- a/drivers/gpu/drm/nouveau/nouveau_dp.c +++ b/drivers/gpu/drm/nouveau/nouveau_dp.c | |||
@@ -317,7 +317,8 @@ train: | |||
317 | return false; | 317 | return false; |
318 | 318 | ||
319 | config[0] = nv_encoder->dp.link_nr; | 319 | config[0] = nv_encoder->dp.link_nr; |
320 | if (nv_encoder->dp.dpcd_version >= 0x11) | 320 | if (nv_encoder->dp.dpcd_version >= 0x11 && |
321 | nv_encoder->dp.enhanced_frame) | ||
321 | config[0] |= DP_LANE_COUNT_ENHANCED_FRAME_EN; | 322 | config[0] |= DP_LANE_COUNT_ENHANCED_FRAME_EN; |
322 | 323 | ||
323 | ret = nouveau_dp_lane_count_set(encoder, config[0]); | 324 | ret = nouveau_dp_lane_count_set(encoder, config[0]); |
@@ -468,10 +469,12 @@ nouveau_dp_detect(struct drm_encoder *encoder) | |||
468 | !nv_encoder->dcb->dpconf.link_bw) | 469 | !nv_encoder->dcb->dpconf.link_bw) |
469 | nv_encoder->dp.link_bw = DP_LINK_BW_1_62; | 470 | nv_encoder->dp.link_bw = DP_LINK_BW_1_62; |
470 | 471 | ||
471 | nv_encoder->dp.link_nr = dpcd[2] & 0xf; | 472 | nv_encoder->dp.link_nr = dpcd[2] & DP_MAX_LANE_COUNT_MASK; |
472 | if (nv_encoder->dp.link_nr > nv_encoder->dcb->dpconf.link_nr) | 473 | if (nv_encoder->dp.link_nr > nv_encoder->dcb->dpconf.link_nr) |
473 | nv_encoder->dp.link_nr = nv_encoder->dcb->dpconf.link_nr; | 474 | nv_encoder->dp.link_nr = nv_encoder->dcb->dpconf.link_nr; |
474 | 475 | ||
476 | nv_encoder->dp.enhanced_frame = (dpcd[2] & DP_ENHANCED_FRAME_CAP); | ||
477 | |||
475 | return true; | 478 | return true; |
476 | } | 479 | } |
477 | 480 | ||
@@ -524,7 +527,8 @@ nouveau_dp_auxch(struct nouveau_i2c_chan *auxch, int cmd, int addr, | |||
524 | nv_wr32(dev, NV50_AUXCH_CTRL(index), ctrl | 0x80000000); | 527 | nv_wr32(dev, NV50_AUXCH_CTRL(index), ctrl | 0x80000000); |
525 | nv_wr32(dev, NV50_AUXCH_CTRL(index), ctrl); | 528 | nv_wr32(dev, NV50_AUXCH_CTRL(index), ctrl); |
526 | nv_wr32(dev, NV50_AUXCH_CTRL(index), ctrl | 0x00010000); | 529 | nv_wr32(dev, NV50_AUXCH_CTRL(index), ctrl | 0x00010000); |
527 | if (!nv_wait(NV50_AUXCH_CTRL(index), 0x00010000, 0x00000000)) { | 530 | if (!nv_wait(dev, NV50_AUXCH_CTRL(index), |
531 | 0x00010000, 0x00000000)) { | ||
528 | NV_ERROR(dev, "expected bit 16 == 0, got 0x%08x\n", | 532 | NV_ERROR(dev, "expected bit 16 == 0, got 0x%08x\n", |
529 | nv_rd32(dev, NV50_AUXCH_CTRL(index))); | 533 | nv_rd32(dev, NV50_AUXCH_CTRL(index))); |
530 | ret = -EBUSY; | 534 | ret = -EBUSY; |