summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Deucher <alexdeucher@gmail.com>2010-02-03 15:22:22 -0500
committerAlex Deucher <alexdeucher@gmail.com>2010-02-03 15:22:22 -0500
commit8d63d70f7ebaf9d250f0449d3720ef47516c05df (patch)
tree19735472a3d360a3c9ff3332dd429432f4375d5b
parentecbc26431914216a8b207e81451282ea07c8b92f (diff)
evergreen: use external clock source for DP PHY
DP CRTC clock always comes from DCPLL. This frees up PPll1/2 for non-DP-mode PHYs and CRTCs
-rw-r--r--src/atombios_crtc.c6
-rw-r--r--src/atombios_output.c11
2 files changed, 11 insertions, 6 deletions
diff --git a/src/atombios_crtc.c b/src/atombios_crtc.c
index 5a88bad2..07fa8075 100644
--- a/src/atombios_crtc.c
+++ b/src/atombios_crtc.c
@@ -324,9 +324,11 @@ atombios_pick_pll(xf86CrtcPtr crtc)
}
}
}
- /* All DP ports need to use the same PPLL */
+ /* DP clock comes from DCPLL, DP PHY CLK comes from ext source
+ * setting ATOM_PPLL_INVALID skips the PPLL programming for DP
+ */
if (is_dp)
- radeon_crtc->pll_id = ATOM_PPLL2;
+ radeon_crtc->pll_id = ATOM_PPLL_INVALID;
else if (!(pll_use_mask & 1))
radeon_crtc->pll_id = ATOM_PPLL1;
else
diff --git a/src/atombios_output.c b/src/atombios_output.c
index 547cd139..61f5373d 100644
--- a/src/atombios_output.c
+++ b/src/atombios_output.c
@@ -762,11 +762,14 @@ atombios_output_dig_transmitter_setup(xf86OutputPtr output, int action, uint8_t
if (radeon_output->linkb)
disp_data.v3.acConfig.ucLinkSel = 1;
- //if (radeon_output->dig_encoder)
- // disp_data.v2.acConfig.ucEncoderSel = 1;
+ if (radeon_output->dig_encoder & 1)
+ disp_data.v2.acConfig.ucEncoderSel = 1;
- // select the PLL
- disp_data.v3.acConfig.ucRefClkSource = radeon_output->pll_id;
+ // select the PLL for the UNIPHY
+ if (radeon_output->MonType == MT_DP)
+ disp_data.v3.acConfig.ucRefClkSource = 2; /* ext clk */
+ else
+ disp_data.v3.acConfig.ucRefClkSource = radeon_output->pll_id;
switch (radeon_encoder->encoder_id) {
case ENCODER_OBJECT_ID_INTERNAL_UNIPHY: