Makefile.am      |    2 
 README           |   20 ++
 configure.ac     |   11 +
 man/mga.man      |    2 
 src/mga_bios.c   |    5 
 src/mga_dacG.c   |  375 +++++++++++++++++++++++++++++++++++--------------------
 src/mga_dh.c     |    4 
 src/mga_driver.c |  325 ++++++++++++++++++++++++++---------------------
 src/mga_exa.c    |    5 
 src/mga_storm.c  |   14 ++
 10 files changed, 477 insertions(+), 286 deletions(-)

New commits:
commit 626af26098ab5d0823bf1d6c08157b4c89ec578a
Author: Adam Jackson <a...@redhat.com>
Date:   Mon Apr 27 14:01:03 2009 -0400

    mga 1.4.10

diff --git a/configure.ac b/configure.ac
index f0119dd..3a04b21 100644
--- a/configure.ac
+++ b/configure.ac
@@ -22,9 +22,8 @@
 
 AC_PREREQ(2.57)
 
-# When the version number is modified here, also modify it in src/mga.h.
 AC_INIT([xf86-video-mga],
-        1.4.9,
+        1.4.10,
         [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
         xf86-video-mga)
 

commit d33b06038223b2b121be7e3f8c207de5f518b28c
Author: Adam Jackson <a...@redhat.com>
Date:   Mon Apr 27 14:00:00 2009 -0400

    Fix ChangeLog generation

diff --git a/Makefile.am b/Makefile.am
index 59e0db2..44f8234 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -27,6 +27,6 @@ EXTRA_DIST = README_HALLIB mga_PInS.txt ChangeLog
 .PHONY: ChangeLog
 
 ChangeLog:
-       (GIT_DIR=$(top_srcdir)/.git git-log > .changelog.tmp && mv 
.changelog.tmp ChangeLog; rm -f .changelog.tmp) || (touch ChangeLog; echo 'git 
directory not found: installing possibly empty changelog.' >&2)
+       (GIT_DIR=$(top_srcdir)/.git git log > .changelog.tmp && mv 
.changelog.tmp ChangeLog; rm -f .changelog.tmp) || (touch ChangeLog; echo 'git 
directory not found: installing possibly empty changelog.' >&2)
 
 dist-hook: ChangeLog

commit 06b6ead9a1b367e08ed6b3e75dfde0ee3b4a82b8
Author: Adam Jackson <a...@redhat.com>
Date:   Mon Apr 27 13:37:42 2009 -0400

    G200SE: Only force 16bpp on low-memory cards

diff --git a/src/mga_driver.c b/src/mga_driver.c
index 6876f6c..e229984 100644
--- a/src/mga_driver.c
+++ b/src/mga_driver.c
@@ -2045,7 +2045,7 @@ MGAPreInit(ScrnInfoPtr pScrn, int flags)
        pScrn->videoRam = MGACountRam(pScrn);
     }
 
-    if (pMga->is_G200SE)
+    if (pMga->is_G200SE && pScrn->videoRam < 2048)
        pScrn->confScreen->defaultdepth = 16;
 
     if (!xf86SetDepthBpp(pScrn, 0, 0, 0, flags24)) {

commit 8b84fe236a42336e87048317880cc437494655f1
Author: Adam Jackson <a...@redhat.com>
Date:   Mon Apr 27 13:36:45 2009 -0400

    Move device ID and memory sizing much earlier in setup

diff --git a/src/mga_driver.c b/src/mga_driver.c
index fcb9127..6876f6c 100644
--- a/src/mga_driver.c
+++ b/src/mga_driver.c
@@ -1907,8 +1907,106 @@ MGAPreInit(ScrnInfoPtr pScrn, int flags)
 #endif
     }
 
-   
-    
+    if (!(pMga->Options = xalloc(sizeof(MGAOptions))))
+       return FALSE;
+    memcpy(pMga->Options, MGAOptions, sizeof(MGAOptions));
+
+    /* ajv changes to reflect actual values. see sdk pp 3-2. */
+    /* these masks just get rid of the crap in the lower bits */
+
+    /* For the 2064 and older rev 1064, base0 is the MMIO and base1 is
+     * the framebuffer.
+     */
+
+    switch (pMga->chip_attribs->BARs) {
+    case old_BARs:
+       pMga->framebuffer_bar = 1;
+       pMga->io_bar = 0;
+       pMga->iload_bar = -1;
+       break;
+    case probe_BARs:
+       if (pMga->ChipRev < 3) {
+           pMga->framebuffer_bar = 1;
+           pMga->io_bar = 0;
+           pMga->iload_bar = 2;
+           break;
+       }
+       /* FALLTHROUGH */
+    case new_BARs:
+       pMga->framebuffer_bar = 0;
+       pMga->io_bar = 1;
+       pMga->iload_bar = 2;
+       break;
+    }
+
+#ifdef XSERVER_LIBPCIACCESS
+    pMga->FbAddress = pMga->PciInfo->regions[pMga->framebuffer_bar].base_addr;
+#else
+    pMga->FbAddress = pMga->PciInfo->memBase[pMga->framebuffer_bar] & 
0xff800000;
+#endif
+
+    xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "Linear framebuffer at 0x%lX\n",
+              (unsigned long)pMga->FbAddress);
+
+#ifdef XSERVER_LIBPCIACCESS
+    xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "MMIO registers at 0x%lX\n",
+              (unsigned long) pMga->PciInfo->regions[pMga->io_bar].base_addr);
+#else
+    pMga->IOAddress = pMga->PciInfo->memBase[pMga->io_bar] & 0xffffc000;
+
+    xf86DrvMsg(pScrn->scrnIndex, from, "MMIO registers at 0x%lX\n",
+              (unsigned long)pMga->IOAddress);
+#endif
+
+    if (pMga->iload_bar != -1) {
+#ifdef XSERVER_LIBPCIACCESS
+       xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
+                  "Pseudo-DMA transfer window at 0x%lX\n",
+                  (unsigned long) 
pMga->PciInfo->regions[pMga->iload_bar].base_addr);
+#else
+       if (pMga->PciInfo->memBase[2] != 0) {
+           pMga->ILOADAddress = pMga->PciInfo->memBase[2] & 0xffffc000;
+           xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
+                      "Pseudo-DMA transfer window at 0x%lX\n",
+                      (unsigned long)pMga->ILOADAddress);
+       }
+#endif
+    }
+
+#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.
+     */
+
+    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;
+           pMga->BiosFrom = X_PROBED;
+       } else if (pMga->Primary) {
+           pMga->BiosAddress = 0xc0000;
+           pMga->BiosFrom = X_DEFAULT;
+       }
+    }
+    if (pMga->BiosAddress) {
+       xf86DrvMsg(pScrn->scrnIndex, pMga->BiosFrom, "BIOS at 0x%lX\n",
+                  (unsigned long)pMga->BiosAddress);
+    }
+#endif
+
+    if (xf86RegisterResources(pMga->pEnt->index, NULL, ResExclusive)) {
+       xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+               "xf86RegisterResources() found resource conflicts\n");
+       MGAFreeRec(pScrn);
+       return FALSE;
+    }
+
     /*
      * The first thing we should figure out is the depth, bpp, etc.
      * Our default depth is 8, so pass it to the helper function.
@@ -1921,6 +2019,32 @@ MGAPreInit(ScrnInfoPtr pScrn, int flags)
     if (pMga->SecondCrtc)
        flags24 = Support32bppFb;
 
+    if (xf86ReturnOptValBool(pMga->Options, OPTION_FBDEV, FALSE)) {
+       pMga->FBDev = TRUE;
+       xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+               "Using framebuffer device\n");
+       /* check for linux framebuffer device */
+       if (!xf86LoadSubModule(pScrn, "fbdevhw"))
+           return FALSE;
+       xf86LoaderReqSymLists(fbdevHWSymbols, NULL);
+       if (!fbdevHWInit(pScrn, pMga->PciInfo, NULL))
+           return FALSE;
+    }
+
+    /*
+     * If the user has specified the amount of memory in the XF86Config
+     * file, we respect that setting.
+     */
+    from = X_PROBED;
+    if (pMga->device->videoRam != 0) {
+       pScrn->videoRam = pMga->device->videoRam;
+       from = X_CONFIG;
+    } else if (pMga->FBDev) {
+       pScrn->videoRam = fbdevHWGetVidmem(pScrn)/1024;
+    } else {
+       pScrn->videoRam = MGACountRam(pScrn);
+    }
+
     if (pMga->is_G200SE)
        pScrn->confScreen->defaultdepth = 16;
 
@@ -1971,9 +2095,6 @@ MGAPreInit(ScrnInfoPtr pScrn, int flags)
     xf86CollectOptions(pScrn, NULL);
 
     /* Process the options */
-    if (!(pMga->Options = xalloc(sizeof(MGAOptions))))
-       return FALSE;
-    memcpy(pMga->Options, MGAOptions, sizeof(MGAOptions));
     xf86ProcessOptions(pScrn->scrnIndex, pScrn->options, pMga->Options);
 
     if (pMga->is_G200SE) {
@@ -2122,11 +2243,6 @@ MGAPreInit(ScrnInfoPtr pScrn, int flags)
        xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
                "Using \"Shadow Framebuffer\" - acceleration disabled\n");
     }
-    if (xf86ReturnOptValBool(pMga->Options, OPTION_FBDEV, FALSE)) {
-       pMga->FBDev = TRUE;
-       xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
-               "Using framebuffer device\n");
-    }
     if (xf86ReturnOptValBool(pMga->Options, OPTION_OVERCLOCK_MEM, FALSE)) {
        pMga->OverclockMem = TRUE;
        xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Overclocking memory\n");
@@ -2170,12 +2286,6 @@ MGAPreInit(ScrnInfoPtr pScrn, int flags)
         } /* ISMGAGx50() */
     }
     if (pMga->FBDev) {
-       /* check for linux framebuffer device */
-       if (!xf86LoadSubModule(pScrn, "fbdevhw"))
-           return FALSE;
-       xf86LoaderReqSymLists(fbdevHWSymbols, NULL);
-       if (!fbdevHWInit(pScrn, pMga->PciInfo, NULL))
-           return FALSE;
        pScrn->SwitchMode    = fbdevHWSwitchModeWeak();
        pScrn->AdjustFrame   = fbdevHWAdjustFrameWeak();
        pScrn->EnterVT       = MGAEnterVTFBDev;
@@ -2233,105 +2343,6 @@ MGAPreInit(ScrnInfoPtr pScrn, int flags)
        break;
     }
 
-    /* ajv changes to reflect actual values. see sdk pp 3-2. */
-    /* these masks just get rid of the crap in the lower bits */
-
-    /* For the 2064 and older rev 1064, base0 is the MMIO and base1 is
-     * the framebuffer.
-     */
-
-    switch (pMga->chip_attribs->BARs) {
-    case old_BARs:
-       pMga->framebuffer_bar = 1;
-       pMga->io_bar = 0;
-       pMga->iload_bar = -1;
-       break;
-    case probe_BARs:
-       if (pMga->ChipRev < 3) {
-           pMga->framebuffer_bar = 1;
-           pMga->io_bar = 0;
-           pMga->iload_bar = 2;
-           break;
-       }
-       /* FALLTHROUGH */
-    case new_BARs:
-       pMga->framebuffer_bar = 0;
-       pMga->io_bar = 1;
-       pMga->iload_bar = 2;
-       break;
-    }
-
-
-#ifdef XSERVER_LIBPCIACCESS
-    pMga->FbAddress = pMga->PciInfo->regions[pMga->framebuffer_bar].base_addr;
-#else
-    pMga->FbAddress = pMga->PciInfo->memBase[pMga->framebuffer_bar] & 
0xff800000;
-#endif
-
-    xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "Linear framebuffer at 0x%lX\n",
-              (unsigned long)pMga->FbAddress);
-
-#ifdef XSERVER_LIBPCIACCESS
-    xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "MMIO registers at 0x%lX\n",
-              (unsigned long) pMga->PciInfo->regions[pMga->io_bar].base_addr);
-#else
-    pMga->IOAddress = pMga->PciInfo->memBase[pMga->io_bar] & 0xffffc000;
-
-    xf86DrvMsg(pScrn->scrnIndex, from, "MMIO registers at 0x%lX\n",
-              (unsigned long)pMga->IOAddress);
-#endif
-
-    if (pMga->iload_bar != -1) {
-#ifdef XSERVER_LIBPCIACCESS
-       xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
-                  "Pseudo-DMA transfer window at 0x%lX\n",
-                  (unsigned long) 
pMga->PciInfo->regions[pMga->iload_bar].base_addr);
-#else
-       if (pMga->PciInfo->memBase[2] != 0) {
-           pMga->ILOADAddress = pMga->PciInfo->memBase[2] & 0xffffc000;
-           xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
-                      "Pseudo-DMA transfer window at 0x%lX\n",
-                      (unsigned long)pMga->ILOADAddress);
-       }
-#endif
-    }
-
-
-#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.
-     */
-
-    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;
-           pMga->BiosFrom = X_PROBED;
-       } else if (pMga->Primary) {
-           pMga->BiosAddress = 0xc0000;
-           pMga->BiosFrom = X_DEFAULT;
-       }
-    }
-    if (pMga->BiosAddress) {
-       xf86DrvMsg(pScrn->scrnIndex, pMga->BiosFrom, "BIOS at 0x%lX\n",
-                  (unsigned long)pMga->BiosAddress);
-    }
-#endif
-
-
-    if (xf86RegisterResources(pMga->pEnt->index, NULL, ResExclusive)) {
-       xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-               "xf86RegisterResources() found resource conflicts\n");
-       MGAFreeRec(pScrn);
-       return FALSE;
-    }
-
     /*
      * Read the BIOS data struct
      */
@@ -2379,20 +2390,6 @@ MGAPreInit(ScrnInfoPtr pScrn, int flags)
     if ( (!pMga->Primary && !pMga->FBDev) || xf86IsPc98() )
         MGASoftReset(pScrn);
 
-    /*
-     * If the user has specified the amount of memory in the XF86Config
-     * file, we respect that setting.
-     */
-    from = X_PROBED;
-    if (pMga->device->videoRam != 0) {
-       pScrn->videoRam = pMga->device->videoRam;
-       from = X_CONFIG;
-    } else if (pMga->FBDev) {
-       pScrn->videoRam = fbdevHWGetVidmem(pScrn)/1024;
-    } else {
-       pScrn->videoRam = MGACountRam(pScrn);
-    }
-
     if (pScrn->videoRam == 0) {
        xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
                   "Unable to detect video RAM.\n");

commit 9a82c5db3f8332d10b31d68e5b86d3a6b136dc5e
Author: Adam Jackson <a...@redhat.com>
Date:   Mon Apr 27 13:26:03 2009 -0400

    Fix xf86ModeBandwidth check

diff --git a/configure.ac b/configure.ac
index 923b434..f0119dd 100644
--- a/configure.ac
+++ b/configure.ac
@@ -109,10 +109,16 @@ CFLAGS="$XORG_CFLAGS"
 AC_CHECK_DECL(XSERVER_LIBPCIACCESS,
               [XSERVER_LIBPCIACCESS=yes], [XSERVER_LIBPCIACCESS=no],
               [#include "xorg-server.h"])
+CFLAGS="$save_CFLAGS"
+
+save_CFLAGS="$CFLAGS"
+CFLAGS="$XORG_CFLAGS"
 AC_CHECK_DECL(xf86ModeBandwidth,
              [AC_DEFINE(HAVE_XF86MODEBANDWIDTH, 1, [Have xf86ModeBandwidth])],
              [],
-             [#include "xf86Modes.h"])
+             [#include <X11/extensions/randr.h>
+              #include "xorg-server.h"
+              #include "xf86Modes.h"])
 CFLAGS="$save_CFLAGS"
 
 if test "x$XSERVER_LIBPCIACCESS" = xyes; then

commit 58888aefd0bad7bfca231ec7a54865d9c26c8095
Author: Adam Jackson <a...@redhat.com>
Date:   Mon Apr 27 13:19:42 2009 -0400

    Remove a leftover from overlay support

diff --git a/src/mga_driver.c b/src/mga_driver.c
index e929311..fcb9127 100644
--- a/src/mga_driver.c
+++ b/src/mga_driver.c
@@ -492,7 +492,6 @@ static const OptionInfoRec MGAOptions[] = {
     { OPTION_SYNC_ON_GREEN,    "SyncOnGreen",  OPTV_BOOLEAN,   {0}, FALSE },
     { OPTION_NOACCEL,          "NoAccel",      OPTV_BOOLEAN,   {0}, FALSE },
     { OPTION_SHOWCACHE,                "ShowCache",    OPTV_BOOLEAN,   {0}, 
FALSE },
-    { OPTION_OVERLAY,          "Overlay",      OPTV_ANYSTR,    {0}, FALSE },
     { OPTION_MGA_SDRAM,                "MGASDRAM",     OPTV_BOOLEAN,   {0}, 
FALSE },
     { OPTION_SHADOW_FB,                "ShadowFB",     OPTV_BOOLEAN,   {0}, 
FALSE },
     { OPTION_FBDEV,            "UseFBDev",     OPTV_BOOLEAN,   {0}, FALSE },
@@ -1916,17 +1915,8 @@ MGAPreInit(ScrnInfoPtr pScrn, int flags)
      * We support both 24bpp and 32bpp layouts, so indicate that.
      */
 
-    /* Prefer 24bpp fb unless the Overlay option is set, or DRI is
-     * supported.
-     */
-    flags24 = Support24bppFb | Support32bppFb | SupportConvert32to24;
-    s = xf86TokenToOptName(MGAOptions, OPTION_OVERLAY);
-#ifndef XF86DRI
-    if (!(xf86FindOption(pScrn->confScreen->options, s) ||
-         xf86FindOption(pMga->device->options, s))) {
-       flags24 |= PreferConvert32to24;
-    }
-#endif
+    /* Prefer 32bpp */
+    flags24 = Support24bppFb | Support32bppFb | PreferConvert24to32;
 
     if (pMga->SecondCrtc)
        flags24 = Support32bppFb;

commit 19c44d537e982fcf0fe2dc9f3273ac6166302510
Author: Yannick Heneault <yhene...@matrox.com>
Date:   Tue Apr 21 10:00:24 2009 -0400

    Fixed bad vga access in memory count routine.

diff --git a/src/mga_driver.c b/src/mga_driver.c
index 7ed5c27..e929311 100644
--- a/src/mga_driver.c
+++ b/src/mga_driver.c
@@ -1346,7 +1346,7 @@ MGACountRam(ScrnInfoPtr pScrn)
                base[Offset+0x100] = 0x55;
                base[Offset+0x101] = 0xaa;
 
-               OUTREG(MGAREG_CRTC_INDEX, 0);
+               OUTREG8(MGAREG_CRTC_INDEX, 0);
                usleep(8);
 
                TestMemoryLocA = base[Offset];

commit 2388c4d512554258bce2b78c8f8aa1151b161c3e
Author: Yannick Heneault <yhene...@matrox.com>
Date:   Tue Apr 21 09:51:34 2009 -0400

    Force pitch of 1024 for G200SE Pilot1 when edid is used as modeline.

diff --git a/src/mga_driver.c b/src/mga_driver.c
index 7c67405..7ed5c27 100644
--- a/src/mga_driver.c
+++ b/src/mga_driver.c
@@ -2638,9 +2638,13 @@ MGAPreInit(ScrnInfoPtr pScrn, int flags)
        case PCI_CHIP_MGAG100_PCI:
           maxPitch = 2048;
           break;
+       case PCI_CHIP_MGAG200_SE_A_PCI:
+          if (pScrn->videoRam < 2048){
+              maxPitch = 1024;
+          }
+          break;
        case PCI_CHIP_MGAG200:
        case PCI_CHIP_MGAG200_PCI:
-       case PCI_CHIP_MGAG200_SE_A_PCI:
        case PCI_CHIP_MGAG200_SE_B_PCI:
         case PCI_CHIP_MGAG200_WINBOND_PCI:
        case PCI_CHIP_MGAG200_EV_PCI:
@@ -2664,6 +2668,10 @@ MGAPreInit(ScrnInfoPtr pScrn, int flags)
           xfree(linePitches);
     }
 
+    /* Some X compute displayWidth from inferred virtual without
+       checking pitch limit. */
+    if(pMga->Chipset == PCI_CHIP_MGAG200_SE_A_PCI && pScrn->videoRam < 2048)
+        pScrn->displayWidth = 1024;
 
     if (i < 1 && pMga->FBDev) {
        fbdevHWUseBuildinMode(pScrn);

commit 32bc0bcec815a363a47b9e7337d06370baf0c0d4
Author: Stefan Dirsch <sndir...@suse.de>
Date:   Thu Apr 16 15:34:12 2009 +0200

    Prevent MergedFB setups from crashing.
    
    Second time mga_read_and_process_bios() is called pMga->chip_attribs
    is a NULL pointer for some reason. (#21022)

diff --git a/src/mga_bios.c b/src/mga_bios.c
index b78890e..c015077 100644
--- a/src/mga_bios.c
+++ b/src/mga_bios.c
@@ -326,8 +326,9 @@ Bool mga_read_and_process_bios( ScrnInfoPtr pScrn )
      * isn't found or can't be read we'll still have some reasonable values
      * to use.
      */
-    (void) memcpy(& pMga->bios, & pMga->chip_attribs->default_bios_values,
-                 sizeof(struct mga_bios_values));
+    if (pMga->chip_attribs)
+       (void) memcpy(& pMga->bios, & pMga->chip_attribs->default_bios_values,
+                      sizeof(struct mga_bios_values));
 
 
     /* If the BIOS address was probed, it was found from the PCI config space

commit 70681daa0392e5fa413f888d92a30ddacdcc9c8c
Author: Yannick Heneault <yhene...@matrox.com>
Date:   Tue Mar 31 11:41:00 2009 -0400

    Fixed G200SE PLL selection routine of m,n,p.

diff --git a/src/mga_dacG.c b/src/mga_dacG.c
index 88a12cb..c98ae97 100644
--- a/src/mga_dacG.c
+++ b/src/mga_dacG.c
@@ -55,9 +55,8 @@ static void MGAGLoadPalette(ScrnInfoPtr, int, int*, LOCO*, 
VisualPtr);
 static Bool MGAG_i2cInit(ScrnInfoPtr pScrn);
 
 static void
-MGAG200IPComputePLLParam(ScrnInfoPtr pScrn, long lFo, int *M, int *N, int *P)
+MGAG200SEComputePLLParam(ScrnInfoPtr pScrn, long lFo, int *M, int *N, int *P)
 {
-    MGAPtr pMga = MGAPTR(pScrn);
     unsigned int ulComputedFo;
     unsigned int ulFDelta;
     unsigned int ulFPermitedDelta;
@@ -67,43 +66,68 @@ MGAG200IPComputePLLParam(ScrnInfoPtr pScrn, long lFo, int 
*M, int *N, int *P)
     unsigned int ulTestM;
     unsigned int ulTestN;
     unsigned int ulPLLFreqRef;
-    unsigned int ulTestPStart;
-    unsigned int ulTestNStart;
-    unsigned int ulTestNEnd;
-    unsigned int ulTestMStart;
-    unsigned int ulTestMEnd;
 
-    if (pMga->is_G200SE) {
-        ulVCOMax        = 320000;
-        ulVCOMin        = 160000;
-        ulPLLFreqRef    = 25000;
-        ulTestPStart    = 8;
-        ulTestNStart    = 17;
-        ulTestNEnd      = 32;
-        ulTestMStart    = 1;
-        ulTestMEnd      = 32;
-    } else { /* pMga->is_G200EV */
-        ulVCOMax        = 550000;
-        ulVCOMin        = 150000;
-        ulPLLFreqRef    = 50000;
-        ulTestPStart    = 16;
-        ulTestNStart    = 1;
-        ulTestNEnd      = 256;
-        ulTestMStart    = 1;
-        ulTestMEnd      = 16;
+    ulVCOMax        = 320000;
+    ulVCOMin        = 160000;
+    ulPLLFreqRef    = 25000;
+
+    ulFDelta = 0xFFFFFFFF;
+    /* Permited delta is 0.5% as VESA Specification */
+    ulFPermitedDelta = lFo * 5 / 1000;  
+
+    /* Then we need to minimize the M while staying within 0.5% */
+    for (ulTestP = 8; ulTestP > 0; ulTestP >>= 1) {
+        if ((lFo * ulTestP) > ulVCOMax) continue;
+        if ((lFo * ulTestP) < ulVCOMin) continue;
+
+        for (ulTestN = 17; ulTestN <= 256; ulTestN++) {
+            for (ulTestM = 1; ulTestM <= 32; ulTestM++) {
+                ulComputedFo = (ulPLLFreqRef * ulTestN) / (ulTestM * ulTestP);
+                if (ulComputedFo > lFo)
+                    ulFTmpDelta = ulComputedFo - lFo;
+                else
+                    ulFTmpDelta = lFo - ulComputedFo;
+
+                if (ulFTmpDelta < ulFDelta) {
+                    ulFDelta = ulFTmpDelta;
+                    *M = ulTestM - 1;
+                    *N = ulTestN - 1;
+                    *P = ulTestP - 1;
+                }
+            }
+        }
     }
+}
+
+static void
+MGAG200EVComputePLLParam(ScrnInfoPtr pScrn, long lFo, int *M, int *N, int *P)
+{
+    unsigned int ulComputedFo;
+    unsigned int ulFDelta;
+    unsigned int ulFPermitedDelta;
+    unsigned int ulFTmpDelta;
+    unsigned int ulTestP;
+    unsigned int ulTestM;
+    unsigned int ulTestN;
+    unsigned int ulVCOMax;
+    unsigned int ulVCOMin;
+    unsigned int ulPLLFreqRef;
+
+    ulVCOMax        = 550000;
+    ulVCOMin        = 150000;
+    ulPLLFreqRef    = 50000;
 
     ulFDelta = 0xFFFFFFFF;
     /* Permited delta is 0.5% as VESA Specification */
     ulFPermitedDelta = lFo * 5 / 1000;  
 
     /* Then we need to minimize the M while staying within 0.5% */
-    for (ulTestP = ulTestPStart; ulTestP > 0; ulTestP--) {
+    for (ulTestP = 16; ulTestP > 0; ulTestP--) {
        if ((lFo * ulTestP) > ulVCOMax) continue;
        if ((lFo * ulTestP) < ulVCOMin) continue;
 
-       for (ulTestN = ulTestNStart; ulTestN <= ulTestNEnd; ulTestN++) {
-           for (ulTestM = ulTestMStart; ulTestM <= ulTestMEnd; ulTestM++) {
+       for (ulTestN = 1; ulTestN <= 256; ulTestN++) {
+           for (ulTestM = 1; ulTestM <= 16; ulTestM++) {
                ulComputedFo = (ulPLLFreqRef * ulTestN) / (ulTestM * ulTestP);
                if (ulComputedFo > lFo)
                    ulFTmpDelta = ulComputedFo - lFo;
@@ -112,7 +136,7 @@ MGAG200IPComputePLLParam(ScrnInfoPtr pScrn, long lFo, int 
*M, int *N, int *P)
 
                if (ulFTmpDelta < ulFDelta) {
                        ulFDelta = ulFTmpDelta;
-                       *M = ulTestM - 1;
+                       *M = (CARD8)(ulTestM - 1);
                        *N = (CARD8)(ulTestN - 1);
                        *P = (CARD8)(ulTestP - 1);
                }
@@ -601,6 +625,7 @@ MGAGSetPCLK( ScrnInfoPtr pScrn, long f_out )
 
        /* Pixel clock values */
        int m, n, p, s;
+        m = n = p = s = 0;
 
        if(MGAISGx50(pMga)) {
            pReg->Clock = f_out;
@@ -608,13 +633,13 @@ MGAGSetPCLK( ScrnInfoPtr pScrn, long f_out )
        }
 
        if (pMga->is_G200SE) {
-           MGAG200IPComputePLLParam(pScrn, f_out, &m, &n, &p);
+           MGAG200SEComputePLLParam(pScrn, f_out, &m, &n, &p);
 
            pReg->DacRegs[ MGA1064_PIX_PLLC_M ] = m;
            pReg->DacRegs[ MGA1064_PIX_PLLC_N ] = n;
            pReg->DacRegs[ MGA1064_PIX_PLLC_P ] = p;
        } else if (pMga->is_G200EV) {
-           MGAG200IPComputePLLParam(pScrn, f_out, &m, &n, &p);
+           MGAG200EVComputePLLParam(pScrn, f_out, &m, &n, &p);
 
            pReg->PllM = m;
            pReg->PllN = n;

commit c955c1fdabfe0449369d0ccf31ab7e6ef3d7bffe
Author: Yannick Heneault <yhene...@matrox.com>
Date:   Mon Mar 30 13:38:39 2009 -0400

    fixed memory count rountine for G200eW to detect up to 16Megs on X server 
without libpciaccess.

diff --git a/src/mga_driver.c b/src/mga_driver.c
index 70bd280..7c67405 100644
--- a/src/mga_driver.c
+++ b/src/mga_driver.c
@@ -1293,8 +1293,7 @@ MGACountRam(ScrnInfoPtr pScrn)
             MaxMapSize = pMga->PciInfo->regions[0].size;
 #else
             Option = pciReadLong(pMga->PciTag, PCI_OPTION_REG);
-            MaxMapSize = 1UL << pciGetBaseSize(pMga->PciTag, 0, TRUE,
-                                            NULL);
+            MaxMapSize = 1UL << pMga->PciInfo->size[0];
 #endif
             Option = (Option & 0x3000000) >> 24 ;
 

commit 16a5e3a7e13c0a2c1091ad452250cbc231b8f427
Author: Yannick Heneault <yhene...@matrox.com>
Date:   Thu Mar 26 10:58:06 2009 -0400

    Modified memory count rountine for G200eW to detect up to 16Megs.

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);

commit 36ae47b82310d96f158694765105fc010911702f
Author: Yannick Heneault <yhene...@matrox.com>
Date:   Wed Mar 11 16:31:43 2009 -0400

    Fixed bad access issues and ddc1 implementation for IP core.
    Fixed a bug in PLL programming sequence for G200eW/G200eV where a register 
IO offset was used instead of
    a memory offset.
    Removed clock selection toggling in PLL programming sequence for G200eW.
    Fixed ddc1 protocol to support correct I/O lines according to chip 
attribute.
    Fixed a bug in CRTC2 programming seqence where a register IO offset was 
used instead of a memory offset.

diff --git a/src/mga_dacG.c b/src/mga_dacG.c
index ec04900..88a12cb 100644
--- a/src/mga_dacG.c
+++ b/src/mga_dacG.c
@@ -111,10 +111,10 @@ MGAG200IPComputePLLParam(ScrnInfoPtr pScrn, long lFo, int 
*M, int *N, int *P)
                    ulFTmpDelta = lFo - ulComputedFo;
 
                if (ulFTmpDelta < ulFDelta) {
-                   ulFDelta = ulFTmpDelta;
-                   *M = (CARD8)(ulTestM - 1);
-                   *N = (CARD8)(ulTestN - 1);
-                   *P = (CARD8)(ulTestP - 1);
+                       ulFDelta = ulFTmpDelta;
+                       *M = ulTestM - 1;
+                       *N = (CARD8)(ulTestN - 1);
+                       *P = (CARD8)(ulTestP - 1);
                }
            }
        }
@@ -199,9 +199,9 @@ MGAG200EVPIXPLLSET(ScrnInfoPtr pScrn, MGARegPtr mgaReg)
     outMGAdac(MGA1064_PIX_CLK_CTL, ucPixCtrl);
 
     // Select PLL Set C
-    ucTempByte = INREG8(MGAREG_MISC_READ);
+    ucTempByte = INREG8(MGAREG_MEM_MISC_READ);
     ucTempByte |= 0x3<<2; //select MGA pixel clock
-    OUTREG8(MGAREG_MISC_WRITE, ucTempByte);
+    OUTREG8(MGAREG_MEM_MISC_WRITE, ucTempByte);
 
     // Set pixlock to 0
     ucTempByte = inMGAdac(MGA1064_PIX_PLL_STAT);
@@ -281,9 +281,9 @@ MGAG200WBPIXPLLSET(ScrnInfoPtr pScrn, MGARegPtr mgaReg)
         outMGAdac(MGA1064_REMHEADCTL, ucTempByte);
 
         // Select PLL Set C
-        ucTempByte = INREG8(MGAREG_MISC_READ);
+        ucTempByte = INREG8(MGAREG_MEM_MISC_READ);
         ucTempByte |= 0x3<<2; //select MGA pixel clock
-        OUTREG8(MGAREG_MISC_WRITE, ucTempByte);
+        OUTREG8(MGAREG_MEM_MISC_WRITE, ucTempByte);
 
         // Set pixlock to 0
         ucTempByte = inMGAdac(MGA1064_PIX_PLL_STAT);
@@ -314,13 +314,13 @@ MGAG200WBPIXPLLSET(ScrnInfoPtr pScrn, MGARegPtr mgaReg)
         // Wait 50 us
         usleep(50);
 
-        ucTempByte = INREG8(MGAREG_MISC_READ);
-        OUTREG8(MGAREG_MISC_WRITE, ucTempByte & ~0x04);
+        ucTempByte = INREG8(MGAREG_MEM_MISC_READ);
+        OUTREG8(MGAREG_MEM_MISC_WRITE, ucTempByte);
 
         // Wait 50 us
         usleep(50);
 
-        OUTREG8(MGAREG_MISC_WRITE, ucTempByte);
+        OUTREG8(MGAREG_MEM_MISC_WRITE, ucTempByte);
 
         // Wait 500 us
         usleep(500);
@@ -1586,9 +1586,17 @@ MGAG_ddc1Read(ScrnInfoPtr pScrn)
 {
   MGAPtr pMga = MGAPTR(pScrn);
   unsigned char val;
-  
+  int i2c_index;
+
+  if (pMga->is_G200SE || pMga->is_G200WB || pMga->is_G200EV)
+    i2c_index = 3;
+  else
+    i2c_index = 0;
+
+  const struct mgag_i2c_private *p = & i2c_priv[i2c_index];
+ 
   /* Define the SDA as an input */
-  outMGAdacmsk(MGA1064_GEN_IO_CTL, ~(DDC_P1_SCL_MASK | DDC_P1_SDA_MASK), 0);
+  outMGAdacmsk(MGA1064_GEN_IO_CTL, ~(p->scl_mask | p->sda_mask), 0);
 
   /* wait for Vsync */
   if (pMga->is_G200SE) {
@@ -1599,7 +1607,7 @@ MGAG_ddc1Read(ScrnInfoPtr pScrn)
   }
 
   /* Get the result */
-  val = (inMGAdac(MGA1064_GEN_IO_DATA) & DDC_P1_SDA_MASK);
+  val = (inMGAdac(MGA1064_GEN_IO_DATA) & p->sda_mask);
   return val;
 }
 
@@ -1675,7 +1683,6 @@ Bool
 MGAG_i2cInit(ScrnInfoPtr pScrn)
 {
     MGAPtr pMga = MGAPTR(pScrn);
-    I2CBusPtr I2CPtr;
 
     if (pMga->SecondCrtc == FALSE) {
         int i2c_index;
diff --git a/src/mga_dh.c b/src/mga_dh.c
index 6ba2945..d9c0d34 100644
--- a/src/mga_dh.c
+++ b/src/mga_dh.c
@@ -251,9 +251,9 @@ void MGAEnableSecondOutPut(ScrnInfoPtr pScrn, xMODEINFO 
*pModeInfo)
     
     
     /* We don't use MISC synch pol, must be 0*/
-    ucByte = inMGAdreg( MGAREG_MISC_READ);
+    ucByte = INREG8( MGAREG_MEM_MISC_READ);
     
-    OUTREG8(MGAREG_MISC_WRITE, (CARD8)(ucByte & ~(HSYNCPOL| VSYNCPOL) ));
+    OUTREG8(MGAREG_MEM_MISC_WRITE, (CARD8)(ucByte & ~(HSYNCPOL| VSYNCPOL) ));
 
     
 

commit 669acb55023bce505f4a912bed6f1e9f3efa2856
Author: Thomas Jaeger <thjae...@gmail.com>
Date:   Fri Jan 30 16:18:34 2009 -0500

    Fall back to software for unsupported repeat modes
    
    [anholt: dropped unneded ->repeat check -- it's a misguided compat field for
    drivers from before repeatType existed]

diff --git a/src/mga_exa.c b/src/mga_exa.c
index 9321452..f292327 100644
--- a/src/mga_exa.c
+++ b/src/mga_exa.c
@@ -332,6 +332,11 @@ mgaCheckSourceTexture(int tmu, PicturePtr pPict)
         return FALSE;
     }
 
+    if (pPict->repeatType != RepeatNormal) {
+        DEBUG_MSG(("Unsupported repeat type %d\n", pPict->repeatType));
+        return FALSE;
+    }
+
     if (pPict->repeat && ((w & (w - 1)) != 0 || (h & (h - 1)) != 0)) {
         DEBUG_MSG(("NPOT repeat unsupported (%dx%d)\n", w, h));
         return FALSE;

commit 496342b09b7379bff95627ec357d4dd24123dc85
Author: Chris Ball <c...@laptop.org>
Date:   Fri Feb 27 10:54:17 2009 -0500

    Revert "Build fix for EXA 3"
    
    This reverts commit 4aac5618278d47a801bef40d3eede1c360c1ea28.
    The EXA developers have backed out this ABI bump.
    
    Signed-off-by: Chris Ball <c...@laptop.org>

diff --git a/configure.ac b/configure.ac
index 1a87b6d..923b434 100644
--- a/configure.ac
+++ b/configure.ac
@@ -129,7 +129,7 @@ if test "x$EXA" = xyes; then
     AC_MSG_RESULT(yes)
 
     SAVE_CPPFLAGS="$CPPFLAGS"
-    CPPFLAGS="$CPPFLAGS $XORG_CFLAGS -DEXA_DRIVER_KNOWN_MAJOR=3"
+    CPPFLAGS="$CPPFLAGS $XORG_CFLAGS"
     AC_CHECK_HEADER(exa.h,
                    [have_exa_h="yes"], [have_exa_h="no"])
     CPPFLAGS="$SAVE_CPPFLAGS"
@@ -138,7 +138,7 @@ else
 fi 
 
 SAVE_CPPFLAGS="$CPPFLAGS"
-CPPFLAGS="$CPPFLAGS $XORG_CFLAGS -DEXA_DRIVER_KNOWN_MAJOR=3"
+CPPFLAGS="$CPPFLAGS $XORG_CFLAGS"
 if test "x$have_exa_h" = xyes; then
     AC_MSG_CHECKING([whether EXA version is at least 2.0.0])
     AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
@@ -153,7 +153,6 @@ if test "x$have_exa_h" = xyes; then
 
     if test "x$USE_EXA" = xyes; then
         AC_DEFINE(USE_EXA, 1, [Build support for Exa])
-        AC_DEFINE(EXA_DRIVER_KNOWN_MAJOR, 3, [Major version of EXA we know how 
to handle])
     fi
 fi
 CPPFLAGS="$SAVE_CPPFLAGS"

commit 4aac5618278d47a801bef40d3eede1c360c1ea28
Author: Chris Ball <c...@laptop.org>
Date:   Tue Feb 24 12:48:54 2009 -0500

    Build fix for EXA 3
    
    EXA in xserver head now requires us to pass -DEXA_DRIVER_KNOWN_MAJOR=3.
    
    Signed-off-by: Chris Ball <c...@laptop.org>

diff --git a/configure.ac b/configure.ac
index 923b434..1a87b6d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -129,7 +129,7 @@ if test "x$EXA" = xyes; then
     AC_MSG_RESULT(yes)
 
     SAVE_CPPFLAGS="$CPPFLAGS"
-    CPPFLAGS="$CPPFLAGS $XORG_CFLAGS"
+    CPPFLAGS="$CPPFLAGS $XORG_CFLAGS -DEXA_DRIVER_KNOWN_MAJOR=3"
     AC_CHECK_HEADER(exa.h,
                    [have_exa_h="yes"], [have_exa_h="no"])
     CPPFLAGS="$SAVE_CPPFLAGS"
@@ -138,7 +138,7 @@ else
 fi 
 
 SAVE_CPPFLAGS="$CPPFLAGS"
-CPPFLAGS="$CPPFLAGS $XORG_CFLAGS"
+CPPFLAGS="$CPPFLAGS $XORG_CFLAGS -DEXA_DRIVER_KNOWN_MAJOR=3"
 if test "x$have_exa_h" = xyes; then
     AC_MSG_CHECKING([whether EXA version is at least 2.0.0])
     AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
@@ -153,6 +153,7 @@ if test "x$have_exa_h" = xyes; then
 
     if test "x$USE_EXA" = xyes; then
         AC_DEFINE(USE_EXA, 1, [Build support for Exa])
+        AC_DEFINE(EXA_DRIVER_KNOWN_MAJOR, 3, [Major version of EXA we know how 
to handle])
     fi
 fi
 CPPFLAGS="$SAVE_CPPFLAGS"

commit 0e9df5fe820d69387355c3ef857cde4cc72220b0
Author: Alan Coopersmith <alan.coopersm...@sun.com>
Date:   Fri Jan 30 20:41:56 2009 -0800

    Add README with pointers to mailing list, bugzilla & git repos


-- 
To UNSUBSCRIBE, email to debian-x-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to