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 <[email protected]> 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 <[email protected]> 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 <[email protected]> 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 <[email protected]> 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 <[email protected]> Date: Wed Jun 22 17:02:29 2011 -0400 Don't include xf86Priv.h Signed-off-by: Adam Jackson <[email protected]> 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" -- To UNSUBSCRIBE, email to [email protected] with a subject of "unsubscribe". Trouble? Contact [email protected] Archive: http://lists.debian.org/[email protected]

