summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAaron Plattner <aplattner@nvidia.com>2007-06-18 12:36:29 -0700
committerAaron Plattner <aplattner@nvidia.com>2008-01-24 18:25:27 -0800
commita4ee96c9fb344560945db220c530f9308dd5def4 (patch)
tree587f01b8f478319a94e68667d4106a693b54a9a0 /src
parent41d9013e2087c4eb415e1a862e216c5fe477228f (diff)
Fix some random colormap corruption on DFPs with certain pre-G80 GPUs.
(cherry picked from commit 24770ccf880f056bc0db9464249caca10692fb56)
Diffstat (limited to 'src')
-rw-r--r--src/nv_dac.c3
-rw-r--r--src/nv_hw.c2
-rw-r--r--src/nv_setup.c1
-rw-r--r--src/nv_type.h2
4 files changed, 7 insertions, 1 deletions
diff --git a/src/nv_dac.c b/src/nv_dac.c
index 3fb687f..e1f0740 100644
--- a/src/nv_dac.c
+++ b/src/nv_dac.c
@@ -1,6 +1,6 @@
/***************************************************************************\
|* *|
-|* Copyright 2003 NVIDIA, Corporation. All rights reserved. *|
+|* Copyright 2007 NVIDIA, Corporation. All rights reserved. *|
|* *|
|* NOTICE TO USER: The source code is copyrighted under U.S. and *|
|* international laws. Users and possessors of this source code are *|
@@ -221,6 +221,7 @@ NVDACInit(ScrnInfoPtr pScrn, DisplayModePtr mode)
}
nvReg->crtcSync = pNv->PRAMDAC[0x0828/4];
nvReg->crtcSync += NVDACPanelTweaks(pNv, nvReg);
+ nvReg->crtcVSync = pNv->fpVTotal - 6;
}
nvReg->vpll = nvReg->pll;
diff --git a/src/nv_hw.c b/src/nv_hw.c
index ae499fa..63f9067 100644
--- a/src/nv_hw.c
+++ b/src/nv_hw.c
@@ -1501,6 +1501,7 @@ void NVLoadStateExt (
} else {
pNv->PRAMDAC[0x0848/4] = state->scale;
pNv->PRAMDAC[0x0828/4] = state->crtcSync;
+ pNv->PRAMDAC[0x0808/4] = state->crtcVSync;
}
pNv->PRAMDAC[0x0600/4] = state->general;
@@ -1588,6 +1589,7 @@ void NVUnloadStateExt
if(pNv->FlatPanel) {
state->crtcSync = pNv->PRAMDAC[0x0828/4];
+ state->crtcVSync = pNv->PRAMDAC[0x0808/4];
}
}
diff --git a/src/nv_setup.c b/src/nv_setup.c
index 71d7955..1bf58e0 100644
--- a/src/nv_setup.c
+++ b/src/nv_setup.c
@@ -687,6 +687,7 @@ NVCommonSetup(ScrnInfoPtr pScrn)
if(pNv->FlatPanel && !pNv->Television) {
pNv->fpWidth = pNv->PRAMDAC[0x0820/4] + 1;
pNv->fpHeight = pNv->PRAMDAC[0x0800/4] + 1;
+ pNv->fpVTotal = pNv->PRAMDAC[0x804/4] + 1;
pNv->fpSyncs = pNv->PRAMDAC[0x0848/4] & 0x30000033;
xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "Panel size is %i x %i\n",
pNv->fpWidth, pNv->fpHeight);
diff --git a/src/nv_type.h b/src/nv_type.h
index b10babc..b4f1cd3 100644
--- a/src/nv_type.h
+++ b/src/nv_type.h
@@ -70,6 +70,7 @@ typedef struct _riva_hw_state
U032 timingV;
U032 displayV;
U032 crtcSync;
+ U032 crtcVSync;
} RIVA_HW_STATE, *NVRegPtr;
@@ -161,6 +162,7 @@ typedef struct {
Bool fpScaler;
int fpWidth;
int fpHeight;
+ CARD32 fpVTotal;
CARD32 fpSyncs;
Bool usePanelTweak;
int PanelTweak;