aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon
diff options
context:
space:
mode:
authorAlex Deucher <alexdeucher@gmail.com>2010-12-16 18:40:29 -0500
committerDave Airlie <airlied@redhat.com>2010-12-20 21:58:18 -0500
commitb61c99de8e7905916d1508ba7c9a9c08656e169d (patch)
treee6805df26c18166ade50ca071a67f00fdecd443b /drivers/gpu/drm/radeon
parent48c36c8f9a3e881953bb72deb55623a53795a684 (diff)
drm/radeon/kms: fix DCE4.1 dig routing (v2)
Works more like DCE4.0 despite what the docs say. This fixes blank screen issues when changing crtc routing due to incorrect crtc to dig mapping. v2: only two DIGx blocks, routing is hardcoded based on link. Signed-off-by: Alex Deucher <alexdeucher@gmail.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/radeon')
-rw-r--r--drivers/gpu/drm/radeon/radeon_encoders.c54
1 files changed, 25 insertions, 29 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_encoders.c b/drivers/gpu/drm/radeon/radeon_encoders.c
index e4e64a80b58..55b84b8e6b2 100644
--- a/drivers/gpu/drm/radeon/radeon_encoders.c
+++ b/drivers/gpu/drm/radeon/radeon_encoders.c
@@ -910,15 +910,9 @@ atombios_dig_transmitter_setup(struct drm_encoder *encoder, int action, uint8_t
910 else 910 else
911 args.v3.ucLaneNum = 4; 911 args.v3.ucLaneNum = 4;
912 912
913 if (ASIC_IS_DCE41(rdev)) { 913 if (dig->linkb) {
914 args.v3.acConfig.ucEncoderSel = dig->dig_encoder; 914 args.v3.acConfig.ucLinkSel = 1;
915 if (dig->linkb) 915 args.v3.acConfig.ucEncoderSel = 1;
916 args.v3.acConfig.ucLinkSel = 1;
917 } else {
918 if (dig->linkb) {
919 args.v3.acConfig.ucLinkSel = 1;
920 args.v3.acConfig.ucEncoderSel = 1;
921 }
922 } 916 }
923 917
924 /* Select the PLL for the PHY 918 /* Select the PLL for the PHY
@@ -1535,32 +1529,34 @@ static int radeon_atom_pick_dig_encoder(struct drm_encoder *encoder)
1535 struct radeon_encoder_atom_dig *dig; 1529 struct radeon_encoder_atom_dig *dig;
1536 uint32_t dig_enc_in_use = 0; 1530 uint32_t dig_enc_in_use = 0;
1537 1531
1538 /* on DCE41 and encoder can driver any phy so just crtc id */
1539 if (ASIC_IS_DCE41(rdev)) {
1540 return radeon_crtc->crtc_id;
1541 }
1542
1543 if (ASIC_IS_DCE4(rdev)) { 1532 if (ASIC_IS_DCE4(rdev)) {
1544 dig = radeon_encoder->enc_priv; 1533 dig = radeon_encoder->enc_priv;
1545 switch (radeon_encoder->encoder_id) { 1534 if (ASIC_IS_DCE41(rdev)) {
1546 case ENCODER_OBJECT_ID_INTERNAL_UNIPHY:
1547 if (dig->linkb) 1535 if (dig->linkb)
1548 return 1; 1536 return 1;
1549 else 1537 else
1550 return 0; 1538 return 0;
1551 break; 1539 } else {
1552 case ENCODER_OBJECT_ID_INTERNAL_UNIPHY1: 1540 switch (radeon_encoder->encoder_id) {
1553 if (dig->linkb) 1541 case ENCODER_OBJECT_ID_INTERNAL_UNIPHY:
1554 return 3; 1542 if (dig->linkb)
1555 else 1543 return 1;
1556 return 2; 1544 else
1557 break; 1545 return 0;
1558 case ENCODER_OBJECT_ID_INTERNAL_UNIPHY2: 1546 break;
1559 if (dig->linkb) 1547 case ENCODER_OBJECT_ID_INTERNAL_UNIPHY1:
1560 return 5; 1548 if (dig->linkb)
1561 else 1549 return 3;
1562 return 4; 1550 else
1563 break; 1551 return 2;
1552 break;
1553 case ENCODER_OBJECT_ID_INTERNAL_UNIPHY2:
1554 if (dig->linkb)
1555 return 5;
1556 else
1557 return 4;
1558 break;
1559 }
1564 } 1560 }
1565 } 1561 }
1566 1562