summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron Plattner <aplattner@nvidia.com>2007-03-14 21:16:04 -0700
committerAaron Plattner <aplattner@nvidia.com>2007-03-15 11:55:37 -0700
commit9d65abab153cdf3ab2b7e3e2843d573b22ea6769 (patch)
tree40ddf5dbca20efbe0614f24acf62237aa4ae2e79
parent26a9f1fa5a92eba7d4b6ddfa47c0517e604be130 (diff)
Fix VGA output with vesafb on nv4x and G7x GPUs.
SuSE bug #160812.
-rw-r--r--src/nv_hw.c12
-rw-r--r--src/nv_type.h1
2 files changed, 13 insertions, 0 deletions
diff --git a/src/nv_hw.c b/src/nv_hw.c
index ab703f1..6232cd6 100644
--- a/src/nv_hw.c
+++ b/src/nv_hw.c
@@ -878,6 +878,10 @@ void NVCalcStateExt (
state->general = bpp == 16 ? 0x00101100 : 0x00100100;
state->repaint1 = hDisplaySize < 1280 ? 0x04 : 0x00;
break;
+ case NV_ARCH_40:
+ if(!pNv->FlatPanel)
+ state->control = pNv->PRAMDAC0[0x0580/4] & 0xeffffeff;
+ /* fallthrough */
case NV_ARCH_10:
case NV_ARCH_20:
case NV_ARCH_30:
@@ -1475,6 +1479,10 @@ void NVLoadStateExt (
VGA_WR08(pNv->PCIO, 0x03D5, state->interlace);
if(!pNv->FlatPanel) {
+ if(pNv->Architecture >= NV_ARCH_40) {
+ pNv->PRAMDAC0[0x0580/4] = state->control;
+ }
+
pNv->PRAMDAC0[0x050C/4] = state->pllsel;
pNv->PRAMDAC0[0x0508/4] = state->vpll;
if(pNv->twoHeads)
@@ -1541,6 +1549,10 @@ void NVUnloadStateExt
state->scale = pNv->PRAMDAC[0x0848/4];
state->config = pNv->PFB[0x0200/4];
+ if(pNv->Architecture >= NV_ARCH_40 && !pNv->FlatPanel) {
+ state->control = pNv->PRAMDAC0[0x0580/4];
+ }
+
if(pNv->Architecture >= NV_ARCH_10) {
if(pNv->twoHeads) {
state->head = pNv->PCRTC0[0x0860/4];
diff --git a/src/nv_type.h b/src/nv_type.h
index d704e2e..6b29d99 100644
--- a/src/nv_type.h
+++ b/src/nv_type.h
@@ -56,6 +56,7 @@ typedef struct _riva_hw_state
U032 vpllB;
U032 vpll2B;
U032 pllsel;
+ U032 control;
U032 general;
U032 crtcOwner;
U032 head;