diff --git a/man/sis.man b/man/sis.man index 59d0904..2a75725 100644 --- a/man/sis.man +++ b/man/sis.man @@ -44,7 +44,7 @@ driver supports PCI, AGP and PCIe video cards based on the following chipsets: .B SiS650/651/661/741 .B SiS330 (Xabre) .B SiS760/761 -.B XGI Volari V3XT/V5/V8 +.B XGI Volari V3/V5/V8 .B XGI Volari Z7 .PP In the following text, the following terms are used: diff --git a/src/init.c b/src/init.c index 2af0da1..5e4827c 100644 --- a/src/init.c +++ b/src/init.c @@ -4,6 +4,7 @@ * Mode initializing code (CRT1 section) for * for SiS 300/305/540/630/730 and * SiS 315/550/[M]650/651/[M]661[FGM]X/[M]74x[GX]/330/[M]76x[GX] + * XGI Volari V3[XT]/V5/V8, Z7 * (Universal module for Linux kernel framebuffer and X.org/XFree86 4.x) * * Copyright (C) 2001-2005 by Thomas Winischhofer, Vienna, Austria @@ -1098,7 +1099,6 @@ SiSInitPCIetc(struct SiS_Private *SiS_Pr) case SIS_760: case SIS_761: case SIS_340: - case XGI_20: case XGI_40: SiS_SetReg(SiS_Pr->SiS_P3c4,0x20,0xa1); /* - Enable 3D G/L transformation engine (0x80) @@ -1109,6 +1109,7 @@ SiSInitPCIetc(struct SiS_Private *SiS_Pr) */ SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x1E,0xDA); break; + case XGI_20: case SIS_550: SiS_SetReg(SiS_Pr->SiS_P3c4,0x20,0xa1); /* No 3D engine ! */ diff --git a/src/sis_setup.c b/src/sis_setup.c index 600de68..1e24af7 100644 --- a/src/sis_setup.c +++ b/src/sis_setup.c @@ -430,18 +430,29 @@ sis315Setup(ScrnInfoPtr pScrn) pSiS->IsAGPCard = TRUE; - if(pSiS->ChipRev == 2) { - if(config1 & 0x01) config1 = 0x02; - else config1 = 0x00; - } - if(config1 == 0x02) pScrn->videoRam <<= 1; /* dual rank */ - else if(config1 == 0x03) pScrn->videoRam <<= 2; /* quad rank */ + if(pSiS->ChipType != XGI_20) { /* SIS340, XGI_40 */ + + if(pSiS->ChipRev == 2) { + if(config1 & 0x01) config1 = 0x02; + else config1 = 0x00; + } + if(config1 == 0x02) pScrn->videoRam <<= 1; /* dual rank */ + else if(config1 == 0x03) pScrn->videoRam <<= 2; /* quad rank */ + + inSISIDXREG(SISSR, 0x39, config2); + config2 &= 0x02; + if(!config2) { + inSISIDXREG(SISSR, 0x3a, config2); + config2 = (config2 & 0x02) >> 1; + } + + } else { /* XGI_20 (Z7) */ + + config1 = 0x00; + inSISIDXREG(SISCR, 0x97, config2); + config2 &= 0x01; + if(config2) config2++; - inSISIDXREG(SISSR, 0x39, config2); - config2 &= 0x02; - if(!config2) { - inSISIDXREG(SISSR, 0x3a, config2); - config2 = (config2 & 0x02) >> 1; } xf86DrvMsg(pScrn->scrnIndex, X_PROBED,