xserver-xorg-video-mga: Changes to 'upstream-unstable'
src/mga_dri.c | 1
src/mga_driver.c | 116 ++++++++++++++++++++++++++++++++++++++++++++++++-------
src/mga_reg.h | 3 +
3 files changed, 105 insertions(+), 15 deletions(-)
New commits:
commit 01ca2186ea028b2549de509b51726aa08519fce0
Author: Christian Toutant <ctoutant@matrox.com>
Date: Tue Sep 20 13:07:16 2011 -0400
Reset tagfifo for renesas.
For renesas, we need to reset tagfifo after a mode switch.
Signed-off-by: Christian Toutant <ctoutant@matrox.com>
diff --git a/src/mga_driver.c b/src/mga_driver.c
index b140013..58a1390 100644
--- a/src/mga_driver.c
+++ b/src/mga_driver.c
@@ -3282,6 +3282,28 @@ MGA_HAL(
outb(0xfac, 0x02);
}
+ /* Reset tagfifo*/
+ if (pMga->is_G200ER)
+ {
+ CARD32 ulMemCtl = INREG(MGAREG_MEMCTL);
+ CARD8 ucSeq1;
+
+ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Reset tagfifo\n");
+ /* Screen off */
+ OUTREG8(MGAREG_SEQ_INDEX, 0x01); /* Select SEQ1 */
+ ucSeq1 = INREG8(MGAREG_SEQ_DATA) | 0x20;
+ OUTREG8(MGAREG_SEQ_DATA, ucSeq1);
+
+ /* Reset tagfifo */
+ OUTREG(MGAREG_MEMCTL, ulMemCtl | 0x002000000);
+ usleep(1000); /* wait 1ms */
+ OUTREG(MGAREG_MEMCTL, ulMemCtl & ~0x002000000);
+
+ /* Screen on */
+ OUTREG8(MGAREG_SEQ_DATA, ucSeq1 & ~0x20);
+
+ }
+
/*
This function optimize the Priority Request control
Higher HiPriLvl will reduce drawing performance
diff --git a/src/mga_reg.h b/src/mga_reg.h
index 5a37db6..ae0fe8c 100644
--- a/src/mga_reg.h
+++ b/src/mga_reg.h
@@ -119,6 +119,9 @@
#define MGAREG_WACCEPTSEQ 0x1dd4
#define MGAREG_WMISC 0x1e70
+
+#define MGAREG_MEMCTL 0x2E08
+
/* OPMODE register additives */
#define MGAOPM_DMA_GENERAL (0x00 << 2)
commit c083bf0a66bef9a4345847f39be5fb895c211f79
Author: Christian Toutant <ctoutant@matrox.com>
Date: Wed Aug 3 09:45:13 2011 -0400
Added support for G200SE Pilot3
Optimize use of bandwidth and increase maximum resolution to 1920x1200
Signed-off-by: Christian Toutant <ctoutant@matrox.com>
diff --git a/src/mga_driver.c b/src/mga_driver.c
index 7232c73..b140013 100644
--- a/src/mga_driver.c
+++ b/src/mga_driver.c
@@ -3282,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;
@@ -4354,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;
commit 43280e6521815582f219d42821d896093c9c0d5f
Author: Adam Jackson <ajax@redhat.com>
Date: Wed Jun 22 17:02:29 2011 -0400
Don't include xf86Priv.h
Signed-off-by: Adam Jackson <ajax@redhat.com>
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"
Reply to: