summaryrefslogtreecommitdiff
path: root/testing/xf86-video-mga/git-fixes.patch
diff options
context:
space:
mode:
Diffstat (limited to 'testing/xf86-video-mga/git-fixes.patch')
-rw-r--r--testing/xf86-video-mga/git-fixes.patch800
1 files changed, 0 insertions, 800 deletions
diff --git a/testing/xf86-video-mga/git-fixes.patch b/testing/xf86-video-mga/git-fixes.patch
deleted file mode 100644
index 3534342e6..000000000
--- a/testing/xf86-video-mga/git-fixes.patch
+++ /dev/null
@@ -1,800 +0,0 @@
-diff --git a/man/Makefile.am b/man/Makefile.am
-index b3688ce..1ea26b3 100644
---- a/man/Makefile.am
-+++ b/man/Makefile.am
-@@ -1,5 +1,5 @@
- #
--# Copyright 2005 Sun Microsystems, Inc. All rights reserved.
-+# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
- #
- # Permission is hereby granted, free of charge, to any person obtaining a
- # copy of this software and associated documentation files (the "Software"),
-@@ -19,7 +19,7 @@
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- # DEALINGS IN THE SOFTWARE.
--#
-+#
-
- drivermandir = $(DRIVER_MAN_DIR)
-
-diff --git a/man/mga.man b/man/mga.man
-index 3a7a9f8..e1e674f 100644
---- a/man/mga.man
-+++ b/man/mga.man
-@@ -1,4 +1,3 @@
--.\" $XFree86: xc/programs/Xserver/hw/xfree86/drivers/mga/mga.man,v 1.7 2003/04/03 07:11:03 herrb Exp $
- .\" shorthand for double quote that works everywhere.
- .ds q \N'34'
- .TH mga __drivermansuffix__ __vendorversion__
-diff --git a/src/binding.h b/src/binding.h
-index 6dcd1e9..57e9b92 100644
---- a/src/binding.h
-+++ b/src/binding.h
-@@ -13,7 +13,6 @@
- @end
-
- ***************************************************************************************/
--/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/mga/HALlib/binding.h,v 1.3 2000/10/24 22:45:08 dawes Exp $ */
-
- #ifndef _BINDING
- #define _BINDING
-diff --git a/src/mga.h b/src/mga.h
-index 2cb3d88..c520e86 100644
---- a/src/mga.h
-+++ b/src/mga.h
-@@ -1,4 +1,3 @@
--/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/mga/mga.h,v 1.87tsi Exp $ */
- /*
- * MGA Millennium (MGA2064W) functions
- *
-@@ -137,6 +136,10 @@ void MGAdbg_outreg32(ScrnInfoPtr, int,int, char*);
- #define PCI_CHIP_MGAG200_EH_PCI 0x0533
- #endif
-
-+#ifndef PCI_CHIP_MGAG200_ER_PCI
-+#define PCI_CHIP_MGAG200_ER_PCI 0x0534
-+#endif
-+
- /*
- * Read/write to the DAC via MMIO
- */
-@@ -200,7 +203,9 @@ void MGAdbg_outreg32(ScrnInfoPtr, int,int, char*);
- typedef struct {
- unsigned char ExtVga[6];
- unsigned char DacClk[6];
-- unsigned char * DacRegs;
-+ unsigned char ExtVga_Index24;
-+ unsigned char Dac_Index90;
-+ unsigned char * DacRegs;
- unsigned long crtc2[0x58];
- unsigned char dac2[0x21];
- CARD32 Option;
-@@ -479,6 +484,7 @@ typedef struct {
- int is_G200WB:1;
- int is_G200EV:1;
- int is_G200EH:1;
-+ int is_G200ER:1;
-
- int KVM;
-
-diff --git a/src/mga_common.h b/src/mga_common.h
-index 90f6b37..81be2bc 100644
---- a/src/mga_common.h
-+++ b/src/mga_common.h
-@@ -25,8 +25,6 @@
- * Converted to common header format:
- * Jens Owen <jens@tungstengraphics.com>
- *
-- * $XFree86: xc/programs/Xserver/hw/xfree86/drivers/mga/mga_common.h,v 1.2 2002/12/16 16:19:18 dawes Exp $
-- *
- */
-
- #ifndef _MGA_COMMON_H_
-diff --git a/src/mga_dacG.c b/src/mga_dacG.c
-index df00765..fca1031 100644
---- a/src/mga_dacG.c
-+++ b/src/mga_dacG.c
-@@ -444,6 +444,116 @@ MGAG200WBPIXPLLSET(ScrnInfoPtr pScrn, MGARegPtr mgaReg)
- outMGAdac(MGA1064_REMHEADCTL, ucTempByte);
- }
-
-+#define G200ER_PLLREF 48000
-+#define G200ER_VCOMIN 1056000
-+#define G200ER_VCOMAX 1488000
-+
-+static void MGAG200ERComputePLLParam(ScrnInfoPtr pScrn, long lFo, int *piM, int *piN, int *piP)
-+{
-+
-+ int ulM;
-+ int ulN;
-+ int ulO;
-+ int ulR;
-+
-+ CARD32 ulComputedFo;
-+ CARD32 ulVco;
-+ CARD32 ulFDelta;
-+ CARD32 ulFTmpDelta;
-+
-+ CARD32 aulMDivValue[] = {1, 2, 4, 8};
-+
-+ CARD32 ulFo = lFo;
-+
-+ ulFDelta = 0xFFFFFFFF;
-+
-+ for (ulR = 0; ulR < 4; ulR++)
-+ {
-+ if(ulFDelta==0) break;
-+ for (ulN = 5; (ulN <= 128) ; ulN++)
-+ {
-+ if(ulFDelta==0) break;
-+ for (ulM = 3; ulM >= 0; ulM--)
-+ {
-+ if(ulFDelta==0) break;
-+ for (ulO = 5; ulO <= 32; ulO++)
-+ {
-+ ulVco = (G200ER_PLLREF * (ulN+1)) / (ulR+1);
-+ // Validate vco
-+ if (ulVco < G200ER_VCOMIN) continue;
-+ if (ulVco > G200ER_VCOMAX) continue;
-+ ulComputedFo = ulVco / (aulMDivValue[ulM] * (ulO+1));
-+
-+ if (ulComputedFo > ulFo)
-+ {
-+ ulFTmpDelta = ulComputedFo - ulFo;
-+ }
-+ else
-+ {
-+ ulFTmpDelta = ulFo - ulComputedFo;
-+ }
-+
-+ if (ulFTmpDelta < ulFDelta)
-+ {
-+ ulFDelta = ulFTmpDelta;
-+ // XG200ERPIXPLLCM M<1:0> O<7:3>
-+ *piM = (CARD8)ulM | (CARD8)(ulO<<3);
-+ //
-+ // XG200ERPIXPLLCN N<6:0>
-+ *piN = (CARD8)ulN;
-+ //
-+ // XG200ERPIXPLLCP R<1:0> cg<7:4> (Use R value)
-+ *piP = (CARD8)ulR | (CARD8)(ulR<<3);
-+
-+ // Test
-+ int ftest = (G200ER_PLLREF * (ulN+1)) / ((ulR+1) * aulMDivValue[ulM] * (ulO+1));
-+ ftest=ftest;
-+ }
-+ } // End O Loop
-+ } // End M Loop
-+ } // End N Loop
-+ } // End R Loop
-+}
-+
-+static void
-+MGAG200ERPIXPLLSET(ScrnInfoPtr pScrn, MGARegPtr mgaReg)
-+{
-+ //TODO G200ER Validate sequence
-+ CARD8 ucPixCtrl, ucTempByte;
-+ MGAPtr pMga = MGAPTR(pScrn);
-+
-+
-+ // Set pixclkdis to 1
-+ ucPixCtrl = inMGAdac(MGA1064_PIX_CLK_CTL);
-+ ucPixCtrl |= MGA1064_PIX_CLK_CTL_CLK_DIS;
-+ outMGAdac(MGA1064_PIX_CLK_CTL, ucPixCtrl);
-+
-+ ucTempByte = inMGAdac(MGA1064_REMHEADCTL);
-+ ucTempByte |= MGA1064_REMHEADCTL_CLKDIS;
-+ outMGAdac(MGA1064_REMHEADCTL, ucTempByte);
-+
-+ // Select PLL Set C
-+ ucTempByte = INREG8(MGAREG_MEM_MISC_READ);
-+ ucTempByte |= (0x3<<2) | 0xc0; //select MGA pixel clock
-+ OUTREG8(MGAREG_MEM_MISC_WRITE, ucTempByte);
-+
-+ ucPixCtrl &= ~MGA1064_PIX_CLK_CTL_CLK_DIS;
-+ ucPixCtrl |= MGA1064_PIX_CLK_CTL_CLK_POW_DOWN;
-+ outMGAdac(MGA1064_PIX_CLK_CTL, ucPixCtrl);
-+
-+ // Wait 500 us
-+ usleep(500);
-+
-+ // Program the Pixel PLL Register
-+ outMGAdac(MGA1064_ER_PIX_PLLC_N, mgaReg->PllN);
-+ outMGAdac(MGA1064_ER_PIX_PLLC_M, mgaReg->PllM);
-+ outMGAdac(MGA1064_ER_PIX_PLLC_P, mgaReg->PllP);
-+
-+ // Wait 50 us
-+ usleep(50);
-+
-+}
-+
- static void
- MGAG200WBPrepareForModeSwitch(ScrnInfoPtr pScrn)
- {
-@@ -768,8 +878,13 @@ MGAGSetPCLK( ScrnInfoPtr pScrn, long f_out )
-
- pReg->PllM = m;
- pReg->PllN = n;
-- pReg->PllP = p;
-- } else {
-+ pReg->PllP = p;
-+ } else if (pMga->is_G200ER) {
-+ MGAG200ERComputePLLParam(pScrn, f_out, &m, &n, &p);
-+ pReg->PllM = m;
-+ pReg->PllN = n;
-+ pReg->PllP = p;
-+ } else {
- /* Do the calculations for m, n, p and s */
- MGAGCalcClock( pScrn, f_out, &m, &n, &p, &s );
-
-@@ -966,6 +1081,10 @@ MGAGInit(ScrnInfoPtr pScrn, DisplayModePtr mode)
- pReg->Option2 = 0x0000b000;
- break;
-
-+ case PCI_CHIP_MGAG200_ER_PCI:
-+ pReg->Dac_Index90 = 0;
-+ break;
-+
- case PCI_CHIP_MGAG200_EH_PCI:
- pReg->DacRegs[MGA1064_MISC_CTL] =
- MGA1064_MISC_CTL_VGA8 |
-@@ -1088,6 +1207,7 @@ MGAGInit(ScrnInfoPtr pScrn, DisplayModePtr mode)
- if (pMga->is_G200WB){
- pReg->ExtVga[1] |= 0x88;
- }
-+ pReg->ExtVga_Index24 = 0x05;
-
- pVga->CRTC[0] = ht - 4;
- pVga->CRTC[1] = hd;
-@@ -1327,10 +1447,15 @@ MGA_NOT_HAL(
- if ( (pMga->is_G200EV || pMga->is_G200WB || pMga->is_G200EH) &&
- (i >= 0x44) && (i <= 0x4E))
- continue;
--
-+
- outMGAdac(i, mgaReg->DacRegs[i]);
- }
-
-+ if (pMga->is_G200ER)
-+ {
-+ outMGAdac(0x90, mgaReg->Dac_Index90);
-+ }
-+
- if (!MGAISGx50(pMga)) {
- /* restore pci_option register */
- #ifdef XSERVER_LIBPCIACCESS
-@@ -1361,7 +1486,9 @@ MGA_NOT_HAL(
- #endif
- }
-
-- if (pMga->is_G200EV) {
-+ if (pMga->is_G200ER) {
-+ MGAG200ERPIXPLLSET(pScrn, mgaReg);
-+ } else if (pMga->is_G200EV) {
- MGAG200EVPIXPLLSET(pScrn, mgaReg);
- } else if (pMga->is_G200WB) {
- MGAG200WBPIXPLLSET(pScrn, mgaReg);
-@@ -1388,6 +1515,11 @@ MGA_NOT_HAL(
- for (i = 0; i < 6; i++)
- OUTREG16(MGAREG_CRTCEXT_INDEX, (mgaReg->ExtVga[i] << 8) | i);
-
-+ if (pMga->is_G200ER) {
-+ OUTREG8(MGAREG_CRTCEXT_INDEX, 0x24);
-+ OUTREG8(MGAREG_CRTCEXT_DATA, mgaReg->ExtVga_Index24);
-+ }
-+
- /* This handles restoring the generic VGA registers. */
- if (pMga->is_G200SE) {
- MGAG200SERestoreMode(pScrn, vgaReg);
-@@ -1404,7 +1536,7 @@ MGA_NOT_HAL(
- OUTREG16(MGAREG_CRTCEXT_INDEX, 6);
- OUTREG16(MGAREG_CRTCEXT_DATA, 0);
- }
--
-+
- /*
- * this is needed to properly restore start address
- */
-@@ -1555,6 +1687,11 @@ MGAGSave(ScrnInfoPtr pScrn, vgaRegPtr vgaReg, MGARegPtr mgaReg,
- mgaReg->PllM = inMGAdac(MGA1064_EH_PIX_PLLC_M);
- mgaReg->PllN = inMGAdac(MGA1064_EH_PIX_PLLC_N);
- mgaReg->PllP = inMGAdac(MGA1064_EH_PIX_PLLC_P);
-+ } else if (pMga->is_G200ER) {
-+ mgaReg->PllM = inMGAdac(MGA1064_ER_PIX_PLLC_M);
-+ mgaReg->PllN = inMGAdac(MGA1064_ER_PIX_PLLC_N);
-+ mgaReg->PllP = inMGAdac(MGA1064_ER_PIX_PLLC_P);
-+ mgaReg->Dac_Index90 = inMGAdac(0x90);
- }
-
- mgaReg->PIXPLLCSaved = TRUE;
-@@ -1583,6 +1720,11 @@ MGAGSave(ScrnInfoPtr pScrn, vgaRegPtr vgaReg, MGARegPtr mgaReg,
- OUTREG8(MGAREG_CRTCEXT_INDEX, i);
- mgaReg->ExtVga[i] = INREG8(MGAREG_CRTCEXT_DATA);
- }
-+ if (pMga->is_G200ER)
-+ {
-+ OUTREG8(MGAREG_CRTCEXT_INDEX, 0x24);
-+ mgaReg->ExtVga_Index24 = INREG8(MGAREG_CRTCEXT_DATA);
-+ }
-
- #ifdef DEBUG
- ErrorF("Saved values:\nDAC:");
-@@ -1737,7 +1879,7 @@ static const struct mgag_i2c_private {
- { (1 << 0), (1 << 2) },
- { (1 << 4), (1 << 5) },
- { (1 << 0), (1 << 1) }, /* G200SE, G200EV and G200WB I2C bits */
-- { (1 << 1), (1 << 0) }, /* G200EH I2C bits */
-+ { (1 << 1), (1 << 0) }, /* G200EH, G200ER I2C bits */
- };
-
-
-@@ -1750,7 +1892,7 @@ MGAG_ddc1Read(ScrnInfoPtr pScrn)
-
- if (pMga->is_G200SE || pMga->is_G200WB || pMga->is_G200EV)
- i2c_index = 3;
-- else if (pMga->is_G200EH)
-+ else if (pMga->is_G200EH || pMga->is_G200ER)
- i2c_index = 4;
- else
- i2c_index = 0;
-@@ -1851,7 +1993,7 @@ MGAG_i2cInit(ScrnInfoPtr pScrn)
-
- if (pMga->is_G200SE || pMga->is_G200WB || pMga->is_G200EV)
- i2c_index = 3;
-- else if (pMga->is_G200EH)
-+ else if (pMga->is_G200EH || pMga->is_G200ER)
- i2c_index = 4;
- else
- i2c_index = 0;
-@@ -1976,7 +2118,7 @@ void MGAGSetupFuncs(ScrnInfoPtr pScrn)
- pMga->Save = MGAGSave;
- pMga->Restore = MGAGRestore;
- pMga->ModeInit = MGAGInit;
-- if (!pMga->is_G200WB){
-+ if ((!pMga->is_G200WB) && (!pMga->is_G200ER)) {
- pMga->ddc1Read = MGAG_ddc1Read;
- /* vgaHWddc1SetSpeed will only work if the card is in VGA mode */
- pMga->DDC1SetSpeed = vgaHWddc1SetSpeedWeak();
-diff --git a/src/mga_dri.c b/src/mga_dri.c
-index 3fda623..14f342f 100644
---- a/src/mga_dri.c
-+++ b/src/mga_dri.c
-@@ -32,7 +32,6 @@
-
- #include "xf86.h"
- #include "xf86_OSproc.h"
--#include "xf86Priv.h"
-
- #include "xf86PciInfo.h"
- #include "xf86Pci.h"
-diff --git a/src/mga_dri.h b/src/mga_dri.h
-index f1afb5d..1984b9c 100644
---- a/src/mga_dri.h
-+++ b/src/mga_dri.h
-@@ -1,5 +1,3 @@
--/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/mga/mga_dri.h,v 1.6 2001/04/10 16:08:01 dawes Exp $ */
--
- /*
- * Copyright 2000 VA Linux Systems Inc., Fremont, California.
- * All Rights Reserved.
-diff --git a/src/mga_dripriv.h b/src/mga_dripriv.h
-index 3ddd133..feca134 100644
---- a/src/mga_dripriv.h
-+++ b/src/mga_dripriv.h
-@@ -1,5 +1,3 @@
--/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/mga/mga_dripriv.h,v 1.4 2001/04/10 16:08:01 dawes Exp $ */
--
- /*
- * Copyright 2000 VA Linux Systems Inc., Fremont, California.
- * All Rights Reserved.
-diff --git a/src/mga_driver.c b/src/mga_driver.c
-index 5a1e9b4..b140013 100644
---- a/src/mga_driver.c
-+++ b/src/mga_driver.c
-@@ -1,4 +1,3 @@
--/* $XConsortium: mga_driver.c /main/12 1996/10/28 05:13:26 kaleb $ */
- /*
- * MGA Millennium (MGA2064W) with Ti3026 RAMDAC driver v.1.1
- *
-@@ -404,6 +403,21 @@ static const struct mga_device_attributes attribs[] = {
- 8192, 0x4000, /* Memory probe size & offset values */
- },
-
-+ /* G200ER */
-+ [15] = { 0, 1, 0, 0, 1, 0, 0, 0, new_BARs,
-+ (TRANSC_SOLID_FILL | TWO_PASS_COLOR_EXPAND | USE_LINEAR_EXPANSION),
-+ {
-+ { 50000, 230000 }, /* System VCO frequencies */
-+ { 50000, 203400 }, /* Pixel VCO frequencies */
-+ { 0, 0 }, /* Video VCO frequencies */
-+ 45000, /* Memory clock */
-+ 27050, /* PLL reference frequency */
-+ 0, /* Supports fast bitblt? */
-+ MGA_HOST_PCI /* Host interface */
-+ },
-+
-+ 16384, 0x4000, /* Memory probe size & offset values */
-+ }
- };
-
- #ifdef XSERVER_LIBPCIACCESS
-@@ -433,6 +447,8 @@ static const struct pci_id_match mga_device_match[] = {
-
- MGA_DEVICE_MATCH( PCI_CHIP_MGAG200_EH_PCI, 14 ),
-
-+ MGA_DEVICE_MATCH(PCI_CHIP_MGAG200_ER_PCI, 15 ),
-+
- { 0, 0, 0 },
- };
- #endif
-@@ -450,6 +466,7 @@ static SymTabRec MGAChipsets[] = {
- { 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 EV Maxim" },
-+ { PCI_CHIP_MGAG200_ER_PCI, "mgag200 ER SH7757" },
- { PCI_CHIP_MGAG200_WINBOND_PCI, "mgag200 eW Nuvoton" },
- { PCI_CHIP_MGAG200_EH_PCI, "mgag200eH" },
- { PCI_CHIP_MGAG400, "mgag400" },
-@@ -472,6 +489,8 @@ static PciChipsets MGAPciChipsets[] = {
- RES_SHARED_VGA },
- { PCI_CHIP_MGAG200_EV_PCI, PCI_CHIP_MGAG200_EV_PCI,
- RES_SHARED_VGA },
-+ { PCI_CHIP_MGAG200_ER_PCI, PCI_CHIP_MGAG200_ER_PCI,
-+ RES_SHARED_VGA },
- { PCI_CHIP_MGAG200_WINBOND_PCI, PCI_CHIP_MGAG200_WINBOND_PCI,
- RES_SHARED_VGA },
- { PCI_CHIP_MGAG200_EH_PCI, PCI_CHIP_MGAG200_EH_PCI,
-@@ -913,6 +932,11 @@ MGAProbe(DriverPtr drv, int flags)
- case PCI_CHIP_MGAG200_EH_PCI:
- attrib_no = 14;
- break;
-+
-+ case PCI_CHIP_MGAG200_ER_PCI:
-+ attrib_no = 15;
-+ break;
-+
-
- default:
- return FALSE;
-@@ -1081,7 +1105,7 @@ MGACountRam(ScrnInfoPtr pScrn)
-
- if (pMga->is_G200SE)
- pMga->reg_1e24 = INREG(0x1e24); /* stash the model for later */
-- if (pMga->reg_1e24 == 0x01) {
-+ if (pMga->reg_1e24 >= 0x01) {
- MGAUnmapMem(pScrn);
- ProbeSize = 16384;
- ProbeSizeOffset = 0x10000;
-@@ -1286,6 +1310,11 @@ MGAdoDDC(ScrnInfoPtr pScrn)
- MGASave(pScrn);
-
- /* It is now safe to talk to the card */
-+ /* Allow access to DDC */
-+ if (pMga->is_G200ER) {
-+ CARD8 ucData = inMGAdac(MGA1064_GEN_IO_CTL2);
-+ outMGAdac(MGA1064_GEN_IO_CTL2, ucData | 1);
-+ }
-
- /* Initialize I2C buses - used by DDC if available */
- if (pMga->i2cInit) {
-@@ -1327,6 +1356,12 @@ MGAdoDDC(ScrnInfoPtr pScrn)
- xf86DrvMsg(pScrn->scrnIndex, X_INFO, "end of monitor info\n");
- }
-
-+ /* Remove access to DDC */
-+ if (pMga->is_G200ER) {
-+ CARD8 ucData = inMGAdac(MGA1064_GEN_IO_CTL2);
-+ outMGAdac(MGA1064_GEN_IO_CTL2, ucData & ~1);
-+ }
-+
- /* Restore previous state and unmap MGA memory and MMIO areas */
- MGARestore(pScrn);
- MGAUnmapMem(pScrn);
-@@ -1620,6 +1655,7 @@ MGAPreInit(ScrnInfoPtr pScrn, int flags)
- pMga->is_G200EV = (pMga->Chipset == PCI_CHIP_MGAG200_EV_PCI);
- pMga->is_G200WB = (pMga->Chipset == PCI_CHIP_MGAG200_WINBOND_PCI);
- pMga->is_G200EH = (pMga->Chipset == PCI_CHIP_MGAG200_EH_PCI);
-+ pMga->is_G200ER = (pMga->Chipset == PCI_CHIP_MGAG200_ER_PCI);
-
- #ifdef USEMGAHAL
- if (pMga->chip_attribs->HAL_chipset) {
-@@ -1780,15 +1816,9 @@ MGAPreInit(ScrnInfoPtr pScrn, int flags)
- #ifndef XSERVER_LIBPCIACCESS
- /*
- * Find the BIOS base. Get it from the PCI config if possible. Otherwise
-- * use the VGA default. Allow the config file to override this.
-+ * use the VGA default.
- */
-
-- pMga->BiosFrom = X_NONE;
-- if (pMga->device->BiosBase != 0) {
-- /* XXX This isn't used */
-- pMga->BiosAddress = pMga->device->BiosBase;
-- pMga->BiosFrom = X_CONFIG;
-- } else {
- /* details: rombase sdk pp 4-15 */
- if (pMga->PciInfo->biosBase != 0) {
- pMga->BiosAddress = pMga->PciInfo->biosBase & 0xffff0000;
-@@ -1797,7 +1827,6 @@ MGAPreInit(ScrnInfoPtr pScrn, int flags)
- pMga->BiosAddress = 0xc0000;
- pMga->BiosFrom = X_DEFAULT;
- }
-- }
- if (pMga->BiosAddress) {
- xf86DrvMsg(pScrn->scrnIndex, pMga->BiosFrom, "BIOS at 0x%lX\n",
- (unsigned long)pMga->BiosAddress);
-@@ -2142,6 +2171,7 @@ MGAPreInit(ScrnInfoPtr pScrn, int flags)
- case PCI_CHIP_MGAG200_WINBOND_PCI:
- case PCI_CHIP_MGAG200_EV_PCI:
- case PCI_CHIP_MGAG200_EH_PCI:
-+ case PCI_CHIP_MGAG200_ER_PCI:
- case PCI_CHIP_MGAG400:
- case PCI_CHIP_MGAG550:
- MGAGSetupFuncs(pScrn);
-@@ -2255,6 +2285,7 @@ MGAPreInit(ScrnInfoPtr pScrn, int flags)
- case PCI_CHIP_MGAG200_WINBOND_PCI:
- case PCI_CHIP_MGAG200_EV_PCI:
- case PCI_CHIP_MGAG200_EH_PCI:
-+ case PCI_CHIP_MGAG200_ER_PCI:
- pMga->SrcOrg = 0;
- pMga->DstOrg = 0;
- break;
-@@ -2432,16 +2463,17 @@ MGAPreInit(ScrnInfoPtr pScrn, int flags)
- maxPitch = 2048;
- break;
- case PCI_CHIP_MGAG200_SE_A_PCI:
-- if (pScrn->videoRam < 2048){
-+ if (pScrn->videoRam < 2048){
- maxPitch = 1280;
-- }
-- break;
-+ }
-+ break;
- case PCI_CHIP_MGAG200:
- case PCI_CHIP_MGAG200_PCI:
- case PCI_CHIP_MGAG200_SE_B_PCI:
- case PCI_CHIP_MGAG200_WINBOND_PCI:
- case PCI_CHIP_MGAG200_EV_PCI:
- case PCI_CHIP_MGAG200_EH_PCI:
-+ case PCI_CHIP_MGAG200_ER_PCI:
- case PCI_CHIP_MGAG400:
- case PCI_CHIP_MGAG550:
- maxPitch = 4096;
-@@ -3250,15 +3282,71 @@ MGA_HAL(
- outb(0xfac, 0x02);
- }
-
-- MGA_NOT_HAL(
-- if (pMga->is_G200SE) {
-+ /*
-+ This function optimize the Priority Request control
-+ Higher HiPriLvl will reduce drawing performance
-+ We need to give enough bandwith to crtc to avoid visual artifact
-+ */
-+ if (pMga->is_G200SE)
-+ {
-+ if (pMga->reg_1e24 >= 0x02)
-+ {
-+ /* Calulate CRTC Priority value */
-+ CARD8 ucHiPriLvl;
-+ CARD32 ulBitsPerPixel;
-+ CARD32 ulMemoryBandwidth;
-+
-+ /* uiBitsPerPixel can only be 8,16 or32 */
-+ if (pScrn->bitsPerPixel > 16)
-+ {
-+ ulBitsPerPixel = 32;
-+ }
-+ else if (pScrn->bitsPerPixel > 8)
-+ {
-+ ulBitsPerPixel = 16;
-+ }
-+ else
-+ {
-+ ulBitsPerPixel = 8;
-+ }
-+
-+
-+ ulMemoryBandwidth = (mode->Clock * ulBitsPerPixel) / 1000;
-+
-+ if (ulMemoryBandwidth > 3100) ucHiPriLvl = 0;
-+ else if (ulMemoryBandwidth > 2600) ucHiPriLvl = 1;
-+ else if (ulMemoryBandwidth > 1900) ucHiPriLvl = 2;
-+ else if (ulMemoryBandwidth > 1160) ucHiPriLvl = 3;
-+ else if (ulMemoryBandwidth > 440) ucHiPriLvl = 4;
-+ else ucHiPriLvl = 5;
-+
- OUTREG8(0x1FDE, 0x06);
-- if (pMga->reg_1e24 == 0x01)
-- OUTREG8(0x1FDF, 0x03);
-- else
-- OUTREG8(0x1FDF, 0x14);
-+ OUTREG8(0x1FDF, ucHiPriLvl);
-+
-+ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Clock == %d\n", mode->Clock);
-+ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "BitsPerPixel == %d\n", pScrn->bitsPerPixel);
-+ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "MemoryBandwidth == %d\n", ulMemoryBandwidth);
-+ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "HiPriLvl == %02X\n", ucHiPriLvl);
- }
-- );
-+ else
-+ {
-+ MGA_NOT_HAL(
-+ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Clock == %d\n", mode->Clock);
-+ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "BitsPerPixel == %d\n", pScrn->bitsPerPixel);
-+ OUTREG8(0x1FDE, 0x06);
-+ if (pMga->reg_1e24 >= 0x01)
-+ {
-+ OUTREG8(0x1FDF, 0x03);
-+ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "HiPriLvl == 03\n");
-+ }
-+ else
-+ {
-+ OUTREG8(0x1FDF, 0x14);
-+ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "HiPriLvl == 14h\n");
-+ }
-+ );
-+ }
-+ }
-
- pMga->CurrentLayout.mode = mode;
-
-@@ -4322,13 +4410,23 @@ MGAValidMode(int scrnIndex, DisplayModePtr mode, Bool verbose, int flags)
- MGAPtr pMga = MGAPTR(pScrn);
-
- if (pMga->Chipset == PCI_CHIP_MGAG200_SE_A_PCI) {
-- if (mode->HDisplay > 1600)
-- return MODE_VIRTUAL_X;
-- if (mode->VDisplay > 1200)
-- return MODE_VIRTUAL_Y;
-- if (pMga->reg_1e24 == 0x01 &&
-- xf86ModeBandwidth(mode, pScrn->bitsPerPixel) > 244)
-- return MODE_BANDWIDTH;
-+ if (pMga->reg_1e24 == 0x01) {
-+ if (mode->HDisplay > 1600)
-+ return MODE_VIRTUAL_X;
-+ if (mode->VDisplay > 1200)
-+ return MODE_VIRTUAL_Y;
-+ if (xf86ModeBandwidth(mode, pScrn->bitsPerPixel) > 244)
-+ return MODE_BANDWIDTH;
-+ } else {
-+ if (pMga->reg_1e24 >= 0x02) {
-+ if (mode->HDisplay > 1920)
-+ return MODE_VIRTUAL_X;
-+ if (mode->VDisplay > 1200)
-+ return MODE_VIRTUAL_Y;
-+ if (xf86ModeBandwidth(mode, pScrn->bitsPerPixel) > 301)
-+ return MODE_BANDWIDTH;
-+ }
-+ }
- } else if (pMga->is_G200WB){
- if (mode->Flags & V_DBLSCAN)
- return MODE_NO_DBLESCAN;
-@@ -4340,10 +4438,13 @@ MGAValidMode(int scrnIndex, DisplayModePtr mode, Bool verbose, int flags)
- return MODE_BANDWIDTH;
- } else if (pMga->is_G200EV
- && (xf86ModeBandwidth(mode, pScrn->bitsPerPixel) > 327)) {
-- return MODE_BANDWIDTH;
-+ return MODE_BANDWIDTH;
- } else if (pMga->is_G200EH
- && (xf86ModeBandwidth(mode, pScrn->bitsPerPixel) > 375)) {
- return MODE_BANDWIDTH;
-+ } else if (pMga->is_G200ER
-+ && (xf86ModeBandwidth(mode, pScrn->bitsPerPixel) > 550)) {
-+ return MODE_BANDWIDTH;
- }
-
- lace = 1 + ((mode->Flags & V_INTERLACE) != 0);
-diff --git a/src/mga_macros.h b/src/mga_macros.h
-index 69dc8e3..bffd063 100644
---- a/src/mga_macros.h
-+++ b/src/mga_macros.h
-@@ -1,5 +1,3 @@
--/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/mga/mga_macros.h,v 1.21 2001/09/26 12:59:17 alanh Exp $ */
--
- #ifndef _MGA_MACROS_H_
- #define _MGA_MACROS_H_
-
-diff --git a/src/mga_merge.c b/src/mga_merge.c
-index 753f752..1fd0572 100644
---- a/src/mga_merge.c
-+++ b/src/mga_merge.c
-@@ -363,6 +363,7 @@ MGAPreInitMergedFB(ScrnInfoPtr pScrn1, int flags)
- case PCI_CHIP_MGAG200_WINBOND_PCI:
- case PCI_CHIP_MGAG200_EV_PCI:
- case PCI_CHIP_MGAG200_EH_PCI:
-+ case PCI_CHIP_MGAG200_ER_PCI:
- case PCI_CHIP_MGAG400:
- case PCI_CHIP_MGAG550:
- MGAGSetupFuncs(pScrn);
-@@ -518,6 +519,7 @@ MGAPreInitMergedFB(ScrnInfoPtr pScrn1, int flags)
- case PCI_CHIP_MGAG200_WINBOND_PCI:
- case PCI_CHIP_MGAG200_EV_PCI:
- case PCI_CHIP_MGAG200_EH_PCI:
-+ case PCI_CHIP_MGAG200_ER_PCI:
- case PCI_CHIP_MGAG400:
- case PCI_CHIP_MGAG550:
- maxPitch = 4096;
-diff --git a/src/mga_reg.h b/src/mga_reg.h
-index 6251976..5a37db6 100644
---- a/src/mga_reg.h
-+++ b/src/mga_reg.h
-@@ -1,11 +1,3 @@
--/* $XConsortium: mgareg.h /main/2 1996/10/25 10:33:21 kaleb $ */
--
--
--
--/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/mga/mga_reg.h,v 1.18 2001/09/26 12:59:18 alanh Exp $ */
--
--
--
- /*
- * MGA Millennium (MGA2064W) functions
- * MGA Mystique (MGA1064SG) functions
-@@ -377,6 +369,7 @@
- #define MGA1064_MISC_CTL_VGA8 ( 0x01 << 3 )
- #define MGA1064_MISC_CTL_DAC_RAM_CS ( 0x01 << 4 )
-
-+#define MGA1064_GEN_IO_CTL2 0x29
- #define MGA1064_GEN_IO_CTL 0x2a
- #define MGA1064_GEN_IO_DATA 0x2b
- #define MGA1064_SYS_PLL_M 0x2c
-@@ -437,6 +430,10 @@
- #define MGA1064_EH_PIX_PLLC_N 0xb7
- #define MGA1064_EH_PIX_PLLC_P 0xb8
-
-+/* Modified PLL for G200 Maxim (G200ER) */
-+#define MGA1064_ER_PIX_PLLC_M 0xb7
-+#define MGA1064_ER_PIX_PLLC_N 0xb6
-+#define MGA1064_ER_PIX_PLLC_P 0xb8
-
- #define MGA1064_DISP_CTL 0x8a
- #define MGA1064_DISP_CTL_DAC1OUTSEL_MASK 0x01
-diff --git a/src/mga_sarea.h b/src/mga_sarea.h
-index c5ffbbc..16fc9ce 100644
---- a/src/mga_sarea.h
-+++ b/src/mga_sarea.h
-@@ -1,5 +1,3 @@
--/* $XFree86$ */
--
- /*
- * Copyright 2000 Gareth Hughes
- * All Rights Reserved.
-diff --git a/src/mga_storm.c b/src/mga_storm.c
-index 87473c8..db7fae7 100644
---- a/src/mga_storm.c
-+++ b/src/mga_storm.c
-@@ -1131,6 +1131,7 @@ void MGAStormEngineInit( ScrnInfoPtr pScrn )
- case PCI_CHIP_MGAG200_WINBOND_PCI:
- case PCI_CHIP_MGAG200_EV_PCI:
- case PCI_CHIP_MGAG200_EH_PCI:
-+ case PCI_CHIP_MGAG200_ER_PCI:
- pMga->SrcOrg = 0;
- OUTREG(MGAREG_SRCORG, pMga->realSrcOrg);
- OUTREG(MGAREG_DSTORG, pMga->DstOrg);
-diff --git a/src/mgareg_flags.h b/src/mgareg_flags.h
-index 69050fc..548af86 100644
---- a/src/mgareg_flags.h
-+++ b/src/mgareg_flags.h
-@@ -19,7 +19,6 @@
- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
- * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
--/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/mga/mgareg_flags.h,v 1.2 2003/01/12 03:55:47 tsi Exp $ */
-
- #ifndef _MGAREGS_H_
- #define _MGAREGS_H_
-diff --git a/util/stormdwg.c b/util/stormdwg.c
-index 99f76cc..b43cc32 100644
---- a/util/stormdwg.c
-+++ b/util/stormdwg.c
-@@ -1,8 +1,3 @@
--/* $XConsortium: dwg.c /main/2 1996/10/28 06:57:55 kaleb $ */
--
--
--
--/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/mga/util/stormdwg.c,v 1.1 1997/04/12 14:11:29 hohndel Exp $ */
-
- #include <stdio.h>
- #include <stdlib.h>