From 8283931df76f6c1dd1ebb8dcce697b6000dfdf01 Mon Sep 17 00:00:00 2001 From: dborca <> Date: Fri, 1 Aug 2003 10:06:41 +0000 Subject: [PATCH] Four chip by Koolsmoky --- glide3x/h5/minihwc/dos_mode.c | 45 ++++++++++++++++++++++++----------- 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/glide3x/h5/minihwc/dos_mode.c b/glide3x/h5/minihwc/dos_mode.c index b9d5a59..6f20f93 100644 --- a/glide3x/h5/minihwc/dos_mode.c +++ b/glide3x/h5/minihwc/dos_mode.c @@ -813,19 +813,35 @@ void hwcSetSLIAAMode(hwcBoardInfo *bInfo, /* cfgSliLfbCtrl */ if(sliEnable && (!aaEnable || !aaSampleHigh)) { - /* No aa or 2 sample AA w/SLI */ - sliRenderMask = (numChips - 1) << sliBandHeightLog2; - sliCompareMask = chipNum << sliBandHeightLog2; - sliScanMask = sliBandHeight - 1; + if(numChips == 4 && aaEnable && !aaSampleHigh && analogSLI) { + /* 4 chip 2 sample AA. two 2-way SLI units with 1 subsample per SLI unit */ + sliRenderMask = ((numChips >> 1) - 1) << sliBandHeightLog2; + sliCompareMask = (chipNum >> 1) << sliBandHeightLog2; + sliScanMask = sliBandHeight - 1; - temp = (sliRenderMask << SST_SLI_LFB_RENDERMASK_SHIFT) | - (sliCompareMask << SST_SLI_LFB_COMPAREMASK_SHIFT) | - (sliScanMask << SST_SLI_LFB_SCANMASK_SHIFT) | - (numChipsLog2 << SST_SLI_LFB_NUMCHIPS_LOG2_SHIFT) | - SST_SLI_LFB_CPU_WRITE_ENABLE | - SST_SLI_LFB_DISPATCH_WRITE_ENABLE | - SST_SLI_LFB_READ_ENABLE; - CFG_WRITE(chipNum, cfgSliLfbCtrl, temp); + temp = (sliRenderMask << SST_SLI_LFB_RENDERMASK_SHIFT) | + (sliCompareMask << SST_SLI_LFB_COMPAREMASK_SHIFT) | + (sliScanMask << SST_SLI_LFB_SCANMASK_SHIFT) | + ((numChipsLog2-1) << SST_SLI_LFB_NUMCHIPS_LOG2_SHIFT) | + SST_SLI_LFB_CPU_WRITE_ENABLE | + SST_SLI_LFB_DISPATCH_WRITE_ENABLE | + SST_SLI_LFB_READ_ENABLE; + CFG_WRITE(chipNum, cfgSliLfbCtrl, temp); + } else { + /* No aa or 2 sample AA w/SLI */ + sliRenderMask = (numChips - 1) << sliBandHeightLog2; + sliCompareMask = chipNum << sliBandHeightLog2; + sliScanMask = sliBandHeight - 1; + + temp = (sliRenderMask << SST_SLI_LFB_RENDERMASK_SHIFT) | + (sliCompareMask << SST_SLI_LFB_COMPAREMASK_SHIFT) | + (sliScanMask << SST_SLI_LFB_SCANMASK_SHIFT) | + (numChipsLog2 << SST_SLI_LFB_NUMCHIPS_LOG2_SHIFT) | + SST_SLI_LFB_CPU_WRITE_ENABLE | + SST_SLI_LFB_DISPATCH_WRITE_ENABLE | + SST_SLI_LFB_READ_ENABLE; + CFG_WRITE(chipNum, cfgSliLfbCtrl, temp); + } } else if(!sliEnable && aaEnable) { /* SLI disabled, AA enabled */ CFG_WRITE(chipNum, cfgSliLfbCtrl, 0); @@ -1421,7 +1437,8 @@ void hwcSetSLIAAMode(hwcBoardInfo *bInfo, /* Make sure that last chip properly waits for data to be xfered * over the PCI bus before driving... */ - if(numChips == 4 && sliEnable && aaEnable && chipNum == 3) { + if((numChips == 4 && sliEnable && aaEnable && aaSampleHigh && chipNum == 3) || + (numChips == 4 && sliEnable && aaEnable && !aaSampleHigh && analogSLI && chipNum == 3)) { temp = CFG_READ(chipNum, cfgSliAAMisc); temp |= SST_CFG_AA_LFB_RD_SLV_WAIT; CFG_WRITE(chipNum, cfgSliAAMisc, temp); @@ -1435,7 +1452,7 @@ void hwcSetSLIAAMode(hwcBoardInfo *bInfo, at all. Then, there is only handshaking between chips 0 & 1 so the Master stays happy. */ - if(numChips == 4 && !sliEnable && aaEnable && aaSampleHigh && chipNum > 1) { + if(numChips == 4 && !sliEnable && aaEnable && aaSampleHigh && analogSLI && chipNum > 1) { temp = CFG_READ(chipNum, cfgAALfbCtrl); temp &= ~SST_AA_LFB_READ_ENABLE; CFG_WRITE(chipNum, cfgAALfbCtrl, temp);