summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/atombios_crtc.c7
-rw-r--r--src/radeon.h1
-rw-r--r--src/radeon_crtc.c6
3 files changed, 11 insertions, 3 deletions
diff --git a/src/atombios_crtc.c b/src/atombios_crtc.c
index 7c628bfb..d18f2cf3 100644
--- a/src/atombios_crtc.c
+++ b/src/atombios_crtc.c
@@ -174,6 +174,7 @@ atombios_crtc_set_pll(xf86CrtcPtr crtc, DisplayModePtr mode)
SET_PIXEL_CLOCK_PS_ALLOCATION spc_param;
PIXEL_CLOCK_PARAMETERS_V2 *spc2_ptr;
PIXEL_CLOCK_PARAMETERS_V3 *spc3_ptr;
+ int pll_flags = 0;
xf86OutputPtr output;
RADEONOutputPrivatePtr radeon_output = NULL;
@@ -185,7 +186,11 @@ atombios_crtc_set_pll(xf86CrtcPtr crtc, DisplayModePtr mode)
if (IS_AVIVO_VARIANT) {
CARD32 temp;
- RADEONComputePLL(&info->pll, mode->Clock, &temp, &fb_div, &ref_div, &post_div, 0);
+
+ if (IS_DCE3_VARIANT)
+ pll_flags |= RADEON_PLL_DCE3;
+
+ RADEONComputePLL(&info->pll, mode->Clock, &temp, &fb_div, &ref_div, &post_div, pll_flags);
sclock = temp;
/* disable spread spectrum clocking for now -- thanks Hedy Lamarr */
diff --git a/src/radeon.h b/src/radeon.h
index fe45428e..a67f375c 100644
--- a/src/radeon.h
+++ b/src/radeon.h
@@ -214,6 +214,7 @@ typedef struct {
#define RADEON_PLL_NO_ODD_POST_DIV (1 << 1)
#define RADEON_PLL_USE_REF_DIV (1 << 2)
#define RADEON_PLL_LEGACY (1 << 3)
+#define RADEON_PLL_DCE3 (1 << 4)
typedef struct {
CARD16 reference_freq;
diff --git a/src/radeon_crtc.c b/src/radeon_crtc.c
index 87514b02..b2c6e133 100644
--- a/src/radeon_crtc.c
+++ b/src/radeon_crtc.c
@@ -190,8 +190,10 @@ RADEONComputePLL(RADEONPLLPtr pll,
best_vco_diff = vco_diff;
}
}
- if (best_freq == freq)
- break;
+ if (!(flags & RADEON_PLL_DCE3)) {
+ if (best_freq == freq)
+ break;
+ }
}
ErrorF("best_freq: %u\n", (unsigned int)best_freq);