xf86-video-ati: Branch 'master'
Dave Airlie
airlied at kemper.freedesktop.org
Mon Jun 26 13:39:38 EEST 2006
src/radeon_driver.c | 16 ++++++++++++++++
1 files changed, 16 insertions(+)
New commits:
diff-tree 4b1904017caa976c138594a86e75feaf470e72b5 (from c5d8c8db3e75976687bfb364f0a7b235c7ae8793)
Author: Dave Airlie <airlied at linux.ie>
Date: Mon Jun 26 20:34:34 2006 +1000
radeon: force CP and VIP clocks on some r300 and rv100 chips.
fglrx appears to do this on r300 and Jerome Glisse has spent most of his
life tracking down what caused the 9800 to lockup. This is my attempt to
fix this. Please report if it works for you.
Signed-off-by: Dave Airlie <airlied at linux.ie>
diff --git a/src/radeon_driver.c b/src/radeon_driver.c
index 2381831..753b1ab 100644
--- a/src/radeon_driver.c
+++ b/src/radeon_driver.c
@@ -133,6 +133,7 @@ static void RADEONInitDispBandwidth(Scrn
static void RADEONGetMergedFBOptions(ScrnInfoPtr pScrn);
static int RADEONValidateMergeModes(ScrnInfoPtr pScrn);
static void RADEONSetDynamicClock(ScrnInfoPtr pScrn, int mode);
+static void RADEONForceSomeClocks(ScrnInfoPtr pScrn);
static void RADEONUpdatePanelSize(ScrnInfoPtr pScrn);
static void RADEONSaveMemMapRegisters(ScrnInfoPtr pScrn, RADEONSavePtr save);
@@ -5738,6 +5739,9 @@ _X_EXPORT Bool RADEONScreenInit(int scrn
}
}
+ if ((!info->IsSecondary) && (IS_R300_VARIANT || IS_RV100_VARIANT))
+ RADEONForceSomeClocks(pScrn);
+
if (info->allowColorTiling && (pScrn->virtualX > info->MaxSurfaceWidth)) {
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
"Color tiling not supported with virtual x resolutions larger than %d, disabling\n",
@@ -9751,6 +9755,18 @@ RADEONGetMergedFBOptions(ScrnInfoPtr pSc
}
}
+static void RADEONForceSomeClocks(ScrnInfoPtr pScrn)
+{
+ /* It appears from r300 and rv100 may need some clocks forced-on */
+ RADEONInfoPtr info = RADEONPTR(pScrn);
+ unsigned char *RADEONMMIO = info->MMIO;
+ CARD32 tmp;
+
+ tmp = INPLL(pScrn, RADEON_SCLK_CNTL);
+ tmp |= RADEON_SCLK_FORCE_CP | RADEON_SCLK_FORCE_VIP;
+ OUTPLL(pScrn, RADEON_SCLK_CNTL, tmp);
+}
+
static void RADEONSetDynamicClock(ScrnInfoPtr pScrn, int mode)
{
RADEONInfoPtr info = RADEONPTR(pScrn);
More information about the xorg-commit
mailing list