diff options
author | Yannick Heneault <yheneaul@matrox.com> | 2009-03-26 10:58:06 -0400 |
---|---|---|
committer | Yannick Heneault <yheneaul@matrox.com> | 2009-03-26 10:58:06 -0400 |
commit | 16a5e3a7e13c0a2c1091ad452250cbc231b8f427 (patch) | |
tree | 1dba71e9b6c14435d307e85a413d8d2d05394a55 /src/mga_driver.c | |
parent | 36ae47b82310d96f158694765105fc010911702f (diff) |
Modified memory count rountine for G200eW to detect up to 16Megs.
Diffstat (limited to 'src/mga_driver.c')
-rw-r--r-- | src/mga_driver.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/mga_driver.c b/src/mga_driver.c index b363437..70bd280 100644 --- a/src/mga_driver.c +++ b/src/mga_driver.c @@ -1284,6 +1284,38 @@ MGACountRam(ScrnInfoPtr pScrn) usleep(20000); } + if (pMga->is_G200WB) { + CARD32 Option, MaxMapSize; + +#ifdef XSERVER_LIBPCIACCESS + pci_device_cfg_read_u32(pMga->PciInfo, &Option, + PCI_OPTION_REG); + MaxMapSize = pMga->PciInfo->regions[0].size; +#else + Option = pciReadLong(pMga->PciTag, PCI_OPTION_REG); + MaxMapSize = 1UL << pciGetBaseSize(pMga->PciTag, 0, TRUE, + NULL); +#endif + Option = (Option & 0x3000000) >> 24 ; + + if (Option == 2) + ProbeSize = 4*1024; + else if(Option == 1) + ProbeSize = 8*1024; + else if(Option == 0) + ProbeSize = 16*1024; + + if (ProbeSize * 1024 > MaxMapSize) + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "Fb size from config space doesn't fit option register\n"); + else { + MGAUnmapMem(pScrn); + pMga->FbMapSize = ProbeSize * 1024; + MGAMapMem(pScrn); + base = pMga->FbBase; + } + } + /* turn MGA mode on - enable linear frame buffer (CRTCEXT3) */ OUTREG8(MGAREG_CRTCEXT_INDEX, 3); tmp = INREG8(MGAREG_CRTCEXT_DATA); |