xf86-video-ati: Branch 'master'

Alex Deucher agd5f at kemper.freedesktop.org
Tue Mar 11 10:53:48 PDT 2008


 src/atombios_crtc.c |    7 ++++++-
 src/radeon.h        |    1 +
 src/radeon_crtc.c   |    6 ++++--
 3 files changed, 11 insertions(+), 3 deletions(-)

New commits:
commit eb90e235b58c94f3d4d75394725ab2fe246a42ff
Author: Alex Deucher <alex at cube.(none)>
Date:   Tue Mar 11 13:53:54 2008 -0400

    DCE3: adjust PLL for DCE3 chips
    
    this fixes stability issues on digital outputs and certain modes.

diff --git a/src/atombios_crtc.c b/src/atombios_crtc.c
index 7c628bf..d18f2cf 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 fe45428..a67f375 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 87514b0..b2c6e13 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);


More information about the xorg-commit mailing list