Bug 7103 - MGA 2064W hangs in dual-head setup
Summary: MGA 2064W hangs in dual-head setup
Alias: None
Product: xorg
Classification: Unclassified
Component: Driver/mga (show other bugs)
Version: 7.0 (2005.12)
Hardware: x86 (IA32) Linux (All)
: high normal
Assignee: Xorg Project Team
QA Contact: Xorg Project Team
Depends on:
Reported: 2006-06-03 10:01 UTC by Enrico Scholz
Modified: 2018-08-10 20:43 UTC (History)
1 user (show)

See Also:
i915 platform:
i915 features:


Note You need to log in before you can comment on or make changes to this bug.
Description Enrico Scholz 2006-06-03 10:01:15 UTC
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.
Comment 1 Daniel Stone 2007-02-27 01:32:21 UTC
Sorry about the phenomenal bug spam, guys.  Adding xorg-team@ to the QA contact so bugs don't get lost in future.
Comment 2 chemtech 2013-03-15 14:47:44 UTC
Enrico Scholz 
Do you still experience this issue with newer soft ?
Please check the status of your issue.
Comment 3 GitLab Migration User 2018-08-10 20:43:27 UTC
-- GitLab Migration Automatic Message --

This bug has been migrated to freedesktop.org's GitLab instance and has been closed from further activity.

You can subscribe and participate further through the new bug through this link to our GitLab instance: https://gitlab.freedesktop.org/xorg/driver/xf86-video-mga/issues/7.

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.