drm/xe: Add debugfs for dumping GGTT mappings
authorMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
Tue, 31 Jan 2023 22:36:39 +0000 (23:36 +0100)
committerRodrigo Vivi <rodrigo.vivi@intel.com>
Tue, 19 Dec 2023 23:27:48 +0000 (18:27 -0500)
Adding a debugfs dump of GGTT was useful for some debugging I did,
and easy to add. Might be useful for others too.

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Reviewed-by: Matthew Auld <matthew.auld@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
drivers/gpu/drm/xe/xe_ggtt.c
drivers/gpu/drm/xe/xe_ggtt.h
drivers/gpu/drm/xe/xe_gt_debugfs.c

index 20450ed8400b1d0e29a0c1c0975e77569a0dfc3c..907a603572b2b86aad793f9975633858ec8be83a 100644 (file)
@@ -345,3 +345,16 @@ void xe_ggtt_remove_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)
 
        xe_ggtt_remove_node(ggtt, &bo->ggtt_node);
 }
+
+int xe_ggtt_dump(struct xe_ggtt *ggtt, struct drm_printer *p)
+{
+       int err;
+
+       err = mutex_lock_interruptible(&ggtt->lock);
+       if (err)
+               return err;
+
+       drm_mm_print(&ggtt->mm, p);
+       mutex_unlock(&ggtt->lock);
+       return err;
+}
index ab9cfdab5cca157f70debdfa97f2442a33c62412..3469aa2b1a02ef2970dabd01aaee9375925bcb29 100644 (file)
@@ -8,6 +8,8 @@
 
 #include "xe_ggtt_types.h"
 
+struct drm_printer;
+
 u64 xe_ggtt_pte_encode(struct xe_bo *bo, u64 bo_offset);
 void xe_ggtt_set_pte(struct xe_ggtt *ggtt, u64 addr, u64 pte);
 void xe_ggtt_invalidate(struct xe_gt *gt);
@@ -26,4 +28,6 @@ int xe_ggtt_insert_bo(struct xe_ggtt *ggtt, struct xe_bo *bo);
 int xe_ggtt_insert_bo_at(struct xe_ggtt *ggtt, struct xe_bo *bo, u64 ofs);
 void xe_ggtt_remove_bo(struct xe_ggtt *ggtt, struct xe_bo *bo);
 
+int xe_ggtt_dump(struct xe_ggtt *ggtt, struct drm_printer *p);
+
 #endif
index daae42d3ab3bb8e7bbe14be95e2697f4eed48f9a..c320e58810ce3eb939dc29dd537c2837b295eada 100644 (file)
@@ -8,6 +8,7 @@
 
 #include "xe_device.h"
 #include "xe_force_wake.h"
+#include "xe_ggtt.h"
 #include "xe_gt.h"
 #include "xe_gt_debugfs.h"
 #include "xe_gt_mcr.h"
@@ -88,12 +89,21 @@ static int steering(struct seq_file *m, void *data)
        return 0;
 }
 
+static int ggtt(struct seq_file *m, void *data)
+{
+       struct xe_gt *gt = node_to_gt(m->private);
+       struct drm_printer p = drm_seq_file_printer(m);
+
+       return xe_ggtt_dump(gt->mem.ggtt, &p);
+}
+
 static const struct drm_info_list debugfs_list[] = {
        {"hw_engines", hw_engines, 0},
        {"force_reset", force_reset, 0},
        {"sa_info", sa_info, 0},
        {"topology", topology, 0},
        {"steering", steering, 0},
+       {"ggtt", ggtt, 0},
 };
 
 void xe_gt_debugfs_register(struct xe_gt *gt)