Four chip by Koolsmoky

This commit is contained in:
dborca
2003-08-01 10:06:41 +00:00
parent 796f119669
commit 8283931df7

View File

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