radeong: Check DRM version, and report stats.
authorCorbin Simpson <MostAwesomeDude@gmail.com>
Mon, 18 Jan 2010 08:35:11 +0000 (00:35 -0800)
committerCorbin Simpson <MostAwesomeDude@gmail.com>
Mon, 18 Jan 2010 09:13:33 +0000 (01:13 -0800)
src/gallium/winsys/drm/radeon/core/radeon_drm.c

index 017d1bea1a9323da4c605bc78c93280689c23cf8..572c5df458e7e5d406c20dcb1c1a365956190193 100644 (file)
@@ -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)&target;
 
     /* 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.