Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxx>
Cc: David M Nieto <David.Nieto@xxxxxxx>
Cc: Christian König <christian.koenig@xxxxxxx>
Cc: Daniel Vetter <daniel@xxxxxxxx>
Acked-by: Christian König <christian.koenig@xxxxxxx>
---
Documentation/gpu/amdgpu/usage-stats.rst | 28
++++++++++++++++++++++
Documentation/gpu/drm-usage-stats.rst | 7 +++++-
drivers/gpu/drm/amd/amdgpu/amdgpu_fdinfo.c | 18 ++++++++++----
3 files changed, 47 insertions(+), 6 deletions(-)
create mode 100644 Documentation/gpu/amdgpu/usage-stats.rst
diff --git a/Documentation/gpu/amdgpu/usage-stats.rst
b/Documentation/gpu/amdgpu/usage-stats.rst
new file mode 100644
index 000000000000..8be5009bd1a9
--- /dev/null
+++ b/Documentation/gpu/amdgpu/usage-stats.rst
@@ -0,0 +1,28 @@
+.. _amdgpu-usage-stats:
+
+============================================
+AMDGPU DRM client usage stats implementation
+============================================
+
+The amdgpu driver implements the DRM client usage stats
specification as
+documented in :ref:`drm-client-usage-stats`.
+
+Example of the output showing the implemented key value pairs and
entirety of
+the currenly possible format options:
+
+::
+
+ pos: 0
+ flags: 0100002
+ mnt_id: 21
+ drm-driver: amdgpu
+ drm-pdev: 0000:03:00.0
+ drm-memory-vram: 0 KiB
+ drm-memory-gtt: 0 KiB
+ drm-memory-cpu: 0 KiB
+ drm-engine-...: 0 %
+ ...
+
+Possible `drm-memory-` key names are: `vram`, `gtt`, `cpu`.
+
+Possible `drm-engine-` key names are: ``.
diff --git a/Documentation/gpu/drm-usage-stats.rst
b/Documentation/gpu/drm-usage-stats.rst
index 6c9f166a8d6f..2d0ff6f2cc74 100644
--- a/Documentation/gpu/drm-usage-stats.rst
+++ b/Documentation/gpu/drm-usage-stats.rst
@@ -69,7 +69,7 @@ scope of each device, in which case `drm-pdev`
shall be present as well.
Userspace should make sure to not double account any usage
statistics by using
the above described criteria in order to associate data to
individual clients.
-- drm-engine-<str>: <uint> ns
+- drm-engine-<str>: <uint> [ns|%]
GPUs usually contain multiple execution engines. Each shall be
given a stable
and unique name (str), with possible values documented in the
driver specific
@@ -84,6 +84,9 @@ larger value within a reasonable period. Upon
observing a value lower than what
was previously read, userspace is expected to stay with that
larger previous
value until a monotonic update is seen.
+Where time unit is given as a percentage...[AMD folks to fill the
semantics
+and interpretation of that]...
+
- drm-engine-capacity-<str>: <uint>
Engine identifier string must be the same as the one specified in the
@@ -110,3 +113,5 @@ Driver specific implementations
===============================
:ref:`i915-usage-stats`
+
+:ref:`amdgpu-usage-stats`
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fdinfo.c
b/drivers/gpu/drm/amd/amdgpu/amdgpu_fdinfo.c
index 5a6857c44bb6..8cbae61f1b3b 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_fdinfo.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_fdinfo.c
@@ -32,6 +32,7 @@
#include <drm/amdgpu_drm.h>
#include <drm/drm_debugfs.h>
+#include <drm/drm_drv.h>
#include "amdgpu.h"
#include "amdgpu_vm.h"
@@ -83,11 +84,18 @@ void amdgpu_show_fdinfo(struct seq_file *m,
struct file *f)
amdgpu_bo_unreserve(root);
amdgpu_bo_unref(&root);
- seq_printf(m, "pdev:\t%04x:%02x:%02x.%d\npasid:\t%u\n", domain,
bus,
+ /*
+ *
******************************************************************
+ * For text output format description please see
drm-usage-stats.rst!
+ *
******************************************************************
+ */
+
+ seq_printf(m, "drm-driver:\t%s\n",
file->minor->dev->driver->name);
+ seq_printf(m, "drm-pdev:\t%04x:%02x:%02x.%d\npasid:\t%u\n",
domain, bus,
dev, fn, fpriv->vm.pasid);
- seq_printf(m, "vram mem:\t%llu kB\n", vram_mem/1024UL);
- seq_printf(m, "gtt mem:\t%llu kB\n", gtt_mem/1024UL);
- seq_printf(m, "cpu mem:\t%llu kB\n", cpu_mem/1024UL);
+ seq_printf(m, "drm-memory-vram:\t%llu KiB\n", vram_mem/1024UL);
+ seq_printf(m, "drm-memory-gtt:\t%llu KiB\n", gtt_mem/1024UL);
+ seq_printf(m, "drm-memory-cpu:\t%llu KiB\n", cpu_mem/1024UL);
for (i = 0; i < AMDGPU_HW_IP_NUM; i++) {
uint32_t count = amdgpu_ctx_num_entities[i];
int idx = 0;
@@ -103,7 +111,7 @@ void amdgpu_show_fdinfo(struct seq_file *m,
struct file *f)
perc = div64_u64(10000 * total, min);
frac = perc % 100;
- seq_printf(m, "%s%d:\t%d.%d%%\n",
+ seq_printf(m, "drm-engine-%s%d:\t%d.%d %%\n",
amdgpu_ip_name[i],
idx, perc/100, frac);
}