drm/radeon: register ring debugfs handlers on init
authorChristian König <deathsimple@vodafone.de>
Wed, 2 May 2012 13:11:11 +0000 (15:11 +0200)
committerDave Airlie <airlied@redhat.com>
Thu, 3 May 2012 08:16:06 +0000 (09:16 +0100)
Just register the debugfs files on init instead of
checking the chipset type multiple times.

Signed-off-by: Christian König <deathsimple@vodafone.de>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Jerome Glisse <jglisse@redhat.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
drivers/gpu/drm/radeon/radeon_ring.c

index cc33b3d7c33b8f4bfa293cd3ce973fdc8b92aff6..b6eb1d2a7679af1e58ac24316838b02733538339 100644 (file)
@@ -34,7 +34,7 @@
 #include "atom.h"
 
 int radeon_debugfs_ib_init(struct radeon_device *rdev);
-int radeon_debugfs_ring_init(struct radeon_device *rdev);
+int radeon_debugfs_ring_init(struct radeon_device *rdev, struct radeon_ring *ring);
 
 u32 radeon_get_ib_value(struct radeon_cs_parser *p, int idx)
 {
@@ -237,9 +237,6 @@ int radeon_ib_pool_init(struct radeon_device *rdev)
        if (radeon_debugfs_ib_init(rdev)) {
                DRM_ERROR("Failed to register debugfs file for IB !\n");
        }
-       if (radeon_debugfs_ring_init(rdev)) {
-               DRM_ERROR("Failed to register debugfs file for rings !\n");
-       }
        radeon_mutex_unlock(&rdev->ib_pool.mutex);
        return 0;
 }
@@ -411,6 +408,9 @@ int radeon_ring_init(struct radeon_device *rdev, struct radeon_ring *ring, unsig
        }
        ring->ptr_mask = (ring->ring_size / 4) - 1;
        ring->ring_free_dw = ring->ring_size / 4;
+       if (radeon_debugfs_ring_init(rdev, ring)) {
+               DRM_ERROR("Failed to register debugfs file for rings !\n");
+       }
        return 0;
 }
 
@@ -501,17 +501,24 @@ static char radeon_debugfs_ib_names[RADEON_IB_POOL_SIZE][32];
 static unsigned radeon_debugfs_ib_idx[RADEON_IB_POOL_SIZE];
 #endif
 
-int radeon_debugfs_ring_init(struct radeon_device *rdev)
+int radeon_debugfs_ring_init(struct radeon_device *rdev, struct radeon_ring *ring)
 {
 #if defined(CONFIG_DEBUG_FS)
-       if (rdev->family >= CHIP_CAYMAN)
-               return radeon_debugfs_add_files(rdev, radeon_debugfs_ring_info_list,
-                                               ARRAY_SIZE(radeon_debugfs_ring_info_list));
-       else
-               return radeon_debugfs_add_files(rdev, radeon_debugfs_ring_info_list, 1);
-#else
-       return 0;
+       unsigned i;
+       for (i = 0; i < ARRAY_SIZE(radeon_debugfs_ring_info_list); ++i) {
+               struct drm_info_list *info = &radeon_debugfs_ring_info_list[i];
+               int ridx = *(int*)radeon_debugfs_ring_info_list[i].data;
+               unsigned r;
+
+               if (&rdev->ring[ridx] != ring)
+                       continue;
+
+               r = radeon_debugfs_add_files(rdev, info, 1);
+               if (r)
+                       return r;
+       }
 #endif
+       return 0;
 }
 
 int radeon_debugfs_ib_init(struct radeon_device *rdev)