summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYannick Heneault <yheneaul@matrox.com>2008-11-20 23:02:49 -0500
committerYannick Heneault <yheneaul@matrox.com>2008-11-20 23:02:49 -0500
commitba376973ae0d25557fdcd920e03474c0e6632e97 (patch)
tree2c9e70f31c7b43bbad9951b265139dfa991341e3
parent01e60b391f39f2ebcf2eeb3be2424a2e291ec8ca (diff)
Fixed PLL m,n,p selection for G200eW to respect byte granularity.
Renamed G200 eW Winbond ID string to Nuvoton. Added EV suffix to G200 Maxim. Blocked double scan mode for G200 eW. Fixed memory bandwidth limitation for G200eW to 318.77 Mhz. Added a workaround (blit 1x1 with rop=xor) to fix the black screen problem for G200eW.
-rw-r--r--src/mga_dacG.c6
-rw-r--r--src/mga_driver.c8
-rw-r--r--src/mga_storm.c14
3 files changed, 22 insertions, 6 deletions
diff --git a/src/mga_dacG.c b/src/mga_dacG.c
index af5d1d9..a47b6f6 100644
--- a/src/mga_dacG.c
+++ b/src/mga_dacG.c
@@ -122,12 +122,12 @@ MGAG200IPComputePLLParam(ScrnInfoPtr pScrn, long lFo, int *M, int *N, int *P)
if (ulFTmpDelta < ulFDelta) {
ulFDelta = ulFTmpDelta;
if (pMga->is_G200WB) {
- *M = (ulTestM - 1) | (((ulTestN -1) >> 1) & 0x80);
+ *M = (CARD8)(ulTestM - 1) | (CARD8)(((ulTestN -1) >> 1) & 0x80);
} else {
*M = ulTestM - 1;
}
- *N = ulTestN - 1;
- *P = ulTestP - 1;
+ *N = (CARD8)(ulTestN - 1);
+ *P = (CARD8)(ulTestP - 1);
}
}
}
diff --git a/src/mga_driver.c b/src/mga_driver.c
index 7e84fd4..b363437 100644
--- a/src/mga_driver.c
+++ b/src/mga_driver.c
@@ -427,8 +427,8 @@ static SymTabRec MGAChipsets[] = {
{ PCI_CHIP_MGAG200_PCI, "mgag200 PCI" },
{ PCI_CHIP_MGAG200_SE_A_PCI, "mgag200 SE A PCI" },
{ PCI_CHIP_MGAG200_SE_B_PCI, "mgag200 SE B PCI" },
- { PCI_CHIP_MGAG200_EV_PCI, "mgag200 Maxim" },
- { PCI_CHIP_MGAG200_WINBOND_PCI, "mgag200 Winbond" },
+ { PCI_CHIP_MGAG200_EV_PCI, "mgag200 EV Maxim" },
+ { PCI_CHIP_MGAG200_WINBOND_PCI, "mgag200 eW Nuvoton" },
{ PCI_CHIP_MGAG400, "mgag400" },
{ PCI_CHIP_MGAG550, "mgag550" },
{-1, NULL }
@@ -4508,11 +4508,13 @@ MGAValidMode(int scrnIndex, DisplayModePtr mode, Bool verbose, int flags)
xf86ModeBandwidth(mode, pScrn->bitsPerPixel) > 256)
return MODE_BANDWIDTH;
} else if (pMga->is_G200WB){
+ if (mode->Flags & V_DBLSCAN)
+ return MODE_NO_DBLESCAN;
if (pMga->KVM && mode->HDisplay > 1280)
return MODE_VIRTUAL_X;
if (pMga->KVM && mode->VDisplay > 1024)
return MODE_VIRTUAL_Y;
- if (xf86ModeBandwidth(mode, pScrn->bitsPerPixel) > 315)
+ if (xf86ModeBandwidth(mode, pScrn->bitsPerPixel) > 318.77)
return MODE_BANDWIDTH;
} else if (pMga->is_G200EV
&& (xf86ModeBandwidth(mode, pScrn->bitsPerPixel) > 327)) {
diff --git a/src/mga_storm.c b/src/mga_storm.c
index aa6ad82..0d04c63 100644
--- a/src/mga_storm.c
+++ b/src/mga_storm.c
@@ -1138,6 +1138,20 @@ void MGAStormEngineInit( ScrnInfoPtr pScrn )
break;
}
+ if (pMga->is_G200WB)
+ {
+ CARD32 dwgctl = MGADWG_RSTR | 0x00060000 | MGADWG_SHIFTZERO |
+ MGADWG_BITBLT | MGADWG_BFCOL;
+ WAITFIFO(7);
+ OUTREG(MGAREG_DWGCTL, dwgctl);
+ OUTREG(MGAREG_SGN, 0);
+ OUTREG(MGAREG_AR5, 1);
+ OUTREG(MGAREG_AR0, 1);
+ OUTREG(MGAREG_AR3, 0);
+ OUTREG(MGAREG_FXBNDRY, (1 << 16) | (1 & 0xffff));
+ OUTREG(MGAREG_YDSTLEN + MGAREG_EXEC, (1 << 16) | 1);
+ }
+
xf86SetLastScrnFlag(pScrn->entityList[0], pScrn->scrnIndex);
}