Bug 193975 - MGA 2064W hangs in dual-head setup
Summary: MGA 2064W hangs in dual-head setup
Keywords:
Status: CLOSED UPSTREAM
Alias: None
Product: Fedora
Classification: Fedora
Component: xorg-x11-drv-mga
Version: 5
Hardware: All
OS: Linux
medium
medium
Target Milestone: ---
Assignee: X/OpenGL Maintenance List
QA Contact:
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2006-06-03 16:57 UTC by Enrico Scholz
Modified: 2007-11-30 22:11 UTC (History)
0 users

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed: 2006-06-07 08:28:30 UTC
Type: ---
Embargoed:


Attachments (Terms of Use)


Links
System ID Private Priority Status Summary Last Updated
FreeDesktop.org 7103 0 None None None Never

Description Enrico Scholz 2006-06-03 16:57:03 UTC
[I file this ticket for tracking purpose; upstream report is at
 https://bugs.freedesktop.org/show_bug.cgi?id=7103]

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.

Environment:
Fedora Core 5, xorg-x11-drv-mga-1.2.1.3-1.2

| 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):

xorg-x11-drv-mga-1.2.1.3-1.2


How reproducible:
100%

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.


Note You need to log in before you can comment on or make changes to this bug.