drm/mm: add ability to dump mm lists via debugfs
[deliverable/linux.git] / drivers / gpu / drm / radeon / radeon_ttm.c
index 0a85e7b5d59271a7737819790e6444a8da7e0656..dc7a44274ea80c359c336f3b4b32865f3bac4fca 100644 (file)
 #include <ttm/ttm_module.h>
 #include <drm/drmP.h>
 #include <drm/radeon_drm.h>
+#include <linux/seq_file.h>
 #include "radeon_reg.h"
 #include "radeon.h"
 
 #define DRM_FILE_PAGE_OFFSET (0x100000000ULL >> PAGE_SHIFT)
 
+static int radeon_ttm_debugfs_init(struct radeon_device *rdev);
+
 static struct radeon_device *radeon_get_rdev(struct ttm_bo_device *bdev)
 {
        struct radeon_mman *mman;
@@ -504,6 +507,12 @@ int radeon_ttm_init(struct radeon_device *rdev)
        if (unlikely(rdev->mman.bdev.dev_mapping == NULL)) {
                rdev->mman.bdev.dev_mapping = rdev->ddev->dev_mapping;
        }
+
+       r = radeon_ttm_debugfs_init(rdev);
+       if (r) {
+               DRM_ERROR("Failed to init debugfs\n");
+               return r;
+       }
        return 0;
 }
 
@@ -678,3 +687,50 @@ struct ttm_backend *radeon_ttm_backend_create(struct radeon_device *rdev)
        gtt->bound = false;
        return &gtt->backend;
 }
+
+#define RADEON_DEBUGFS_MEM_TYPES 2
+
+static struct drm_info_list radeon_mem_types_list[RADEON_DEBUGFS_MEM_TYPES];
+static char radeon_mem_types_names[RADEON_DEBUGFS_MEM_TYPES][32];
+
+#if defined(CONFIG_DEBUG_FS)
+static int radeon_mm_dump_table(struct seq_file *m, void *data)
+{
+       struct drm_info_node *node = (struct drm_info_node *)m->private;
+       struct drm_mm *mm = (struct drm_mm *)node->info_ent->data;
+       struct drm_device *dev = node->minor->dev;
+       struct radeon_device *rdev = dev->dev_private;
+       int ret;
+       struct ttm_bo_global *glob = rdev->mman.bdev.glob;
+
+       spin_lock(&glob->lru_lock);
+       ret = drm_mm_dump_table(m, mm);
+       spin_unlock(&glob->lru_lock);
+       return ret;
+}
+#endif
+
+static int radeon_ttm_debugfs_init(struct radeon_device *rdev)
+{
+       unsigned i;
+
+#if defined(CONFIG_DEBUG_FS)
+       for (i = 0; i < RADEON_DEBUGFS_MEM_TYPES; i++) {
+               if (i == 0)
+                       sprintf(radeon_mem_types_names[i], "radeon_vram_mm");
+               else
+                       sprintf(radeon_mem_types_names[i], "radeon_gtt_mm");
+               radeon_mem_types_list[i].name = radeon_mem_types_names[i];
+               radeon_mem_types_list[i].show = &radeon_mm_dump_table;
+               radeon_mem_types_list[i].driver_features = 0;
+               if (i == 0)
+                       radeon_mem_types_list[i].data = &rdev->mman.bdev.man[TTM_PL_VRAM].manager;
+               else
+                       radeon_mem_types_list[i].data = &rdev->mman.bdev.man[TTM_PL_TT].manager;
+
+       }
+       return radeon_debugfs_add_files(rdev, radeon_mem_types_list, RADEON_DEBUGFS_MEM_TYPES);
+
+#endif
+       return 0;
+}
This page took 0.037342 seconds and 5 git commands to generate.