[Xorg] Fwd: drm patch

Alex Deucher alexdeucher at gmail.com
Thu Aug 26 06:01:46 PDT 2004


I haven't checked xorg cvs, but this patch may be needed there as well.


---------- Forwarded message ----------
From: Lafriks <listes at nix.lv>
Date: Thu, 26 Aug 2004 11:54:50 +0300
Subject: drm patch
To: jonsmirl at yahoo.com
Cc: dri-devel at lists.sourceforge.net

Hi,

   Wanted to report that without this patch my ATI Radeon IGP 345M
didn't have direct rendering support with yesterday mesa-cvs and
dri-cvs. After applying patch I have dri support :) Hope this patch will
be included in cvs soon... it's great ;)

Lafriks
p.s. patch by Jon Smirl:
===== linux/drm_drv.h 1.8 vs edited =====
--- 1.8/linux/drm_drv.h Tue Aug 17 11:38:31 2004
+++ edited/linux/drm_drv.h      Fri Aug 20 16:37:08 2004
@@ -635,7 +635,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" );
@@ -647,21 +647,26 @@
        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;
+               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;
                                drm_probe(pdev, &DRM(pciidlist[i]));
+                               /* keep looping to get all devices */
+                               continue;
                        }
-                       else
-                               pci_dev_put(pdev);
+                       /* 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
                DRM_INFO("Used old pci detect: framebuffer loaded\n");



More information about the xorg mailing list