Here is the current version of the patch. As soon as Dave approves it
will go in.
The problem was a conflict between VesaFB and DRM. The patch detects
VesaFB and puts DRM in stealth mode.
=====
Jon Smirl
[EMAIL PROTECTED]
__________________________________
Do you Yahoo!?
New and Improved Yahoo! Mail - Send 10MB messages!
http://promotions.yahoo.com/new_mail ===== linux/drm_drv.h 1.9 vs edited =====
--- 1.9/linux/drm_drv.h Wed Aug 25 16:55:12 2004
+++ edited/linux/drm_drv.h Thu Aug 26 00:40:06 2004
@@ -602,7 +602,7 @@
static int __init drm_init( void )
{
struct pci_dev *pdev = NULL;
- struct pci_driver *pdriver = NULL;
+ struct pci_device_id *pid;
int i;
DRM_DEBUG( "\n" );
@@ -613,25 +613,39 @@
DRM(mem_init)();
- for (i=0; DRM(pciidlist)[i].vendor != 0; i++) {
- pdev = pci_get_subsys(DRM(pciidlist[i]).vendor, DRM(pciidlist[i]).device, DRM(pciidlist[i]).subvendor, DRM(pciidlist[i]).subdevice, NULL);
- if (pdev)
- {
- pdriver = pci_dev_driver(pdev);
- if (pdriver)
- {
- DRM(fb_loaded)=1;
- drm_probe(pdev, &DRM(pciidlist[i]));
- }
- else
+ for (i=0; (DRM(pciidlist)[i].vendor != 0) && !DRM(fb_loaded); i++) {
+ pid = &DRM(pciidlist[i]);
+
+ /* pass back in pdev to account for multiple identical cards */
+ while ((pdev = pci_get_subsys(pid->vendor, pid->device, pid->subvendor, pid->subdevice, pdev))) {
+ /* is there already a driver loaded, or (short circuit saves work) */
+ /* does something like VesaFB have control of the memory region? */
+ if (pci_dev_driver(pdev) || pci_request_regions(pdev, "DRM scan")) {
+ /* go into stealth mode */
+ DRM(fb_loaded) = 1;
pci_dev_put(pdev);
+ break;
+ }
+ /* no fbdev or vesadev, put things back and wait for normal probe */
+ pci_release_regions(pdev);
+ pci_dev_put(pdev);
}
}
- if (DRM(fb_loaded)==0)
+ if (DRM(fb_loaded) == 0)
pci_register_driver(&drm_driver);
- else
+ else {
+ for (i=0; DRM(pciidlist)[i].vendor != 0; i++) {
+ pid = &DRM(pciidlist[i]);
+
+ /* pass back in pdev to account for multiple identical cards */
+ while ((pdev = pci_get_subsys(pid->vendor, pid->device, pid->subvendor, pid->subdevice, pdev))) {
+ /* stealth mode requires a manual probe */
+ drm_probe(pdev, &DRM(pciidlist[i]));
+ }
+ }
DRM_INFO("Used old pci detect: framebuffer loaded\n");
+ }
return 0;
}