drm/amdgpu: Add debugfs entry for printing VM info
[linux-2.6-microblaze.git] / drivers / gpu / drm / amd / amdgpu / amdgpu_object.c
index 07e81ac..b191701 100644 (file)
@@ -1528,3 +1528,77 @@ uint32_t amdgpu_bo_get_preferred_pin_domain(struct amdgpu_device *adev,
        }
        return domain;
 }
+
+#if defined(CONFIG_DEBUG_FS)
+#define amdgpu_bo_print_flag(m, bo, flag)                      \
+       do {                                                    \
+               if (bo->flags & (AMDGPU_GEM_CREATE_ ## flag)) { \
+                       seq_printf((m), " " #flag);             \
+               }                                               \
+       } while (0)
+
+/**
+ * amdgpu_debugfs_print_bo_info - print BO info in debugfs file
+ *
+ * @id: Index or Id of the BO
+ * @bo: Requested BO for printing info
+ * @m: debugfs file
+ *
+ * Print BO information in debugfs file
+ *
+ * Returns:
+ * Size of the BO in bytes.
+ */
+u64 amdgpu_bo_print_info(int id, struct amdgpu_bo *bo, struct seq_file *m)
+{
+       struct dma_buf_attachment *attachment;
+       struct dma_buf *dma_buf;
+       unsigned int domain;
+       const char *placement;
+       unsigned int pin_count;
+       u64 size;
+
+       domain = amdgpu_mem_type_to_domain(bo->tbo.mem.mem_type);
+       switch (domain) {
+       case AMDGPU_GEM_DOMAIN_VRAM:
+               placement = "VRAM";
+               break;
+       case AMDGPU_GEM_DOMAIN_GTT:
+               placement = " GTT";
+               break;
+       case AMDGPU_GEM_DOMAIN_CPU:
+       default:
+               placement = " CPU";
+               break;
+       }
+
+       size = amdgpu_bo_size(bo);
+       seq_printf(m, "\t\t0x%08x: %12lld byte %s",
+                       id, size, placement);
+
+       pin_count = READ_ONCE(bo->pin_count);
+       if (pin_count)
+               seq_printf(m, " pin count %d", pin_count);
+
+       dma_buf = READ_ONCE(bo->tbo.base.dma_buf);
+       attachment = READ_ONCE(bo->tbo.base.import_attach);
+
+       if (attachment)
+               seq_printf(m, " imported from %p", dma_buf);
+       else if (dma_buf)
+               seq_printf(m, " exported as %p", dma_buf);
+
+       amdgpu_bo_print_flag(m, bo, CPU_ACCESS_REQUIRED);
+       amdgpu_bo_print_flag(m, bo, NO_CPU_ACCESS);
+       amdgpu_bo_print_flag(m, bo, CPU_GTT_USWC);
+       amdgpu_bo_print_flag(m, bo, VRAM_CLEARED);
+       amdgpu_bo_print_flag(m, bo, SHADOW);
+       amdgpu_bo_print_flag(m, bo, VRAM_CONTIGUOUS);
+       amdgpu_bo_print_flag(m, bo, VM_ALWAYS_VALID);
+       amdgpu_bo_print_flag(m, bo, EXPLICIT_SYNC);
+
+       seq_puts(m, "\n");
+
+       return size;
+}
+#endif