diff options
author | Yannick Heneault <yheneaul@matrox.com> | 2008-11-20 23:02:49 -0500 |
---|---|---|
committer | Yannick Heneault <yheneaul@matrox.com> | 2008-11-20 23:02:49 -0500 |
commit | ba376973ae0d25557fdcd920e03474c0e6632e97 (patch) | |
tree | 2c9e70f31c7b43bbad9951b265139dfa991341e3 | |
parent | 01e60b391f39f2ebcf2eeb3be2424a2e291ec8ca (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.c | 6 | ||||
-rw-r--r-- | src/mga_driver.c | 8 | ||||
-rw-r--r-- | src/mga_storm.c | 14 |
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); } |