Bug 193975

Summary: MGA 2064W hangs in dual-head setup
Product: [Fedora] Fedora Reporter: Enrico Scholz <rh-bugzilla>
Component: xorg-x11-drv-mgaAssignee: X/OpenGL Maintenance List <xgl-maint>
Severity: medium Docs Contact:
Priority: medium    
Version: 5   
Target Milestone: ---   
Target Release: ---   
Hardware: All   
OS: Linux   
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2006-06-07 08:28:30 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---

Description Enrico Scholz 2006-06-03 16:57:03 UTC
[I file this ticket for tracking purpose; upstream report is at

Description of problem:

When having a primary AGP graphic cards (in my case an ATI Radeon
RV100 QY) and a PCI Matrox MGA 2064W, X will hang at startup.

This happens because the BIOS address can not be determined; the
interesting code is in mga_driver.c

| static Bool
| MGAPreInit(ScrnInfoPtr pScrn, int flags)
|     if (pMga->device->BiosBase != 0) {
|         /* XXX This isn't used */
|         pMga->BiosAddress = pMga->device->BiosBase;
|         pMga->BiosFrom = X_CONFIG;
|     } else {
|         /* details: rombase sdk pp 4-15 */
|         if (pMga->PciInfo->biosBase != 0) {
|             pMga->BiosAddress = pMga->PciInfo->biosBase & 0xffff0000;
|             pMga->BiosFrom = X_PROBED;
|         } else if (pMga->Primary) {
|             pMga->BiosAddress = 0xc0000;
|             pMga->BiosFrom = X_DEFAULT;
|         }
|     }

In my case, both pMga->device->BiosBase and pMga->PciInfo->biosBase
are NULL and pMga->Primary is false.

Therefore, 'pMga->BiosAddress == 0' will hold. Then, the startup will
hang somewhere in

|    mga_read_and_process_bios( pScrn );                                                               

Skipping this operation (like in the '#if defined(__alpha__)'
conditional), will continue the startup process but:

* it will hang later somewhere in int10, or (when not loading the
  int10 module),
* X will startup, but will assume wrong capabilities so that I have
  only a 640x480 screen.

I fixed the issue by applying

|-         } else if (pMga->Primary) {
|+         } else if (pMga->Primary || 1) {

to the code above and X runs without problems.

Fedora Core 5, xorg-x11-drv-mga-

| 00:0e.0 VGA compatible controller: Matrox Graphics, Inc. MGA 2064W [Millennium] (rev 01) (prog-if 00 [VGA])
| 01:00.0 VGA compatible controller: ATI Technologies Inc Radeon RV100 QY [Radeon 7000/VE] (prog-if 00 [VGA])

vanilla 2.6.16 kernel; mga-fb kernel driver *IS* activated

xorg-x11 from Fedora Core 4 (xorg-x11-6.8.2) worked without problems
on this hardware.

Version-Release number of selected component (if applicable):


How reproducible:

Comment 1 Mike A. Harris 2006-06-07 08:28:30 UTC
Thanks for the report.  We'll monitor the X.Org report, and once the issue
is resolved, we'll review the final solution, and consider including it in
a future FC update.

Thanks again.