--- radeon_driver.c-orig 2007-04-23 10:17:04.000000000 +0800 +++ radeon_driver.c 2007-04-23 10:26:35.000000000 +0800 @@ -3329,10 +3329,13 @@ first = last = ddcModes = RADEONDDCModes(pScrn); for (p = ddcModes; p; p = p->next) { + + /* If primary head is a flat panel, use RMX by default, + however, IBM Lewis server has some trouble to deal with the on-chip RMX modes, + don't use RMX for it */ - /* If primary head is a flat panel, use RMX by default */ if ((!info->IsSecondary && DisplayType != MT_CRT) && - (!info->ddc_mode) && (!crtc2)) { + (!info->ddc_mode) && (!crtc2) && (!info->IsIBMServer) ) { /* These values are effective values after expansion. * They are not really used to set CRTC registers. */ @@ -3914,6 +3917,7 @@ RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn); char *s; + struct vendor *ven; /* This option has two purposes: * * 1. For CRT, if this option is on, xf86ValidateModes (to @@ -4099,6 +4103,18 @@ xf86DeleteMode(&pScrn->modes, pScrn->modes); while (pScrn->modePool) xf86DeleteMode(&pScrn->modePool, pScrn->modePool); + + /*we add extra code to detect a IBM Lewis server + on-chip RMX mode will be disabled for this machine*/ + if(info->ChipFamily == CHIP_FAMILY_RV100 && !info->HasCRTC2) + { + + ven=&pRADEONEnt->PortInfo[0].MonInfo->vendor; + + if(ven->prod_id == 0x29a && ven->serial == 0x1010101u) { + info->IsIBMServer= TRUE; + } + } /* Next try to add DDC modes */ modesFound = RADEONValidateDDCModes(pScrn, pScrn->display->modes, @@ -4145,7 +4161,7 @@ pScrn->display->virtualY, info->FbMapSize, LOOKUP_BEST_REFRESH); - else if (!info->IsSecondary) + else if (!info->IsSecondary && !info->IsIBMServer) modesFound = RADEONValidateFPModes(pScrn, pScrn->display->modes); } } --- radeon.h-orig 2007-04-23 10:22:24.000000000 +0800 +++ radeon.h 2007-04-23 10:23:07.000000000 +0800 @@ -703,7 +703,10 @@ /* special handlings for DELL triple-head server */ Bool IsDellServer; - + + /* special handlings for IBM Levis server */ + Bool IsIBMServer; + /* enable bios hotkey output switching */ Bool BiosHotkeys;