Mesa (master): radeong: Check DRM version, and report stats.

Corbin Simpson csimpson at kemper.freedesktop.org
Mon Jan 18 09:13:38 UTC 2010


Module: Mesa
Branch: master
Commit: 58a7d8db98e5ffd0699d4cb59663d7621bc20594
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=58a7d8db98e5ffd0699d4cb59663d7621bc20594

Author: Corbin Simpson <MostAwesomeDude at gmail.com>
Date:   Mon Jan 18 00:35:11 2010 -0800

radeong: Check DRM version, and report stats.

---

 src/gallium/winsys/drm/radeon/core/radeon_drm.c |   27 ++++++++++++++++++++++-
 1 files changed, 26 insertions(+), 1 deletions(-)

diff --git a/src/gallium/winsys/drm/radeon/core/radeon_drm.c b/src/gallium/winsys/drm/radeon/core/radeon_drm.c
index 017d1be..572c5df 100644
--- a/src/gallium/winsys/drm/radeon/core/radeon_drm.c
+++ b/src/gallium/winsys/drm/radeon/core/radeon_drm.c
@@ -40,12 +40,16 @@ static void do_ioctls(int fd, struct radeon_winsys* winsys)
     struct drm_radeon_info info = {0};
     int target = 0;
     int retval;
+    drmVersionPtr version;
 
     info.value = (unsigned long)⌖
 
     /* We do things in a specific order here.
      *
-     * First, the PCI ID. This is essential and should return usable numbers
+     * DRM version first. We need to be sure we're running on a KMS chipset.
+     * This is also for some features.
+     *
+     * Then, the PCI ID. This is essential and should return usable numbers
      * for all Radeons. If this fails, we probably got handed an FD for some
      * non-Radeon card.
      *
@@ -57,6 +61,16 @@ static void do_ioctls(int fd, struct radeon_winsys* winsys)
      * (see radeon_gem_info_ioctl in radeon_gem.c) but that's alright because
      * we don't actually use the info for anything yet. */
 
+    version = drmGetVersion(fd);
+    if (version->version_major != 2) {
+        fprintf(stderr, "%s: DRM version is %d.%d.%d but this driver is "
+                "only compatible with 2.x.x\n", __FUNCTION__,
+                version->version_major, version->version_minor,
+                version->version_patchlevel);
+        drmFreeVersion(version);
+        exit(1);
+    }
+
     info.request = RADEON_INFO_DEVICE_ID;
     retval = drmCommandWriteRead(fd, DRM_RADEON_INFO, &info, sizeof(info));
     if (retval) {
@@ -93,6 +107,17 @@ static void do_ioctls(int fd, struct radeon_winsys* winsys)
     }
     winsys->gart_size = gem_info.gart_size;
     winsys->vram_size = gem_info.vram_size;
+
+    debug_printf("radeon: Successfully grabbed chipset info from kernel!\n"
+                 "radeon: DRM version: %d.%d.%d ID: 0x%04x GB: %d Z: %d\n"
+                 "radeon: GART size: %d MB VRAM size: %d MB\n",
+                 version->version_major, version->version_minor,
+                 version->version_patchlevel, winsys->pci_id,
+                 winsys->gb_pipes, winsys->z_pipes,
+                 winsys->gart_size / 1024 / 1024,
+                 winsys->vram_size / 1024 / 1024);
+
+    drmFreeVersion(version);
 }
 
 /* Guess at whether this chipset should use r300g.




More information about the mesa-commit mailing list