summaryrefslogtreecommitdiff
path: root/drivers/accel/amdxdna/aie.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/accel/amdxdna/aie.c')
-rw-r--r--drivers/accel/amdxdna/aie.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/drivers/accel/amdxdna/aie.c b/drivers/accel/amdxdna/aie.c
index dd6f36f222c7..bf8eb66baab8 100644
--- a/drivers/accel/amdxdna/aie.c
+++ b/drivers/accel/amdxdna/aie.c
@@ -118,6 +118,45 @@ void amdxdna_vbnv_init(struct amdxdna_dev *xdna)
amdxdna_update_vbnv(xdna, info->rev_vbnv_tbl, rev);
}
+void amdxdna_io_stats_job_start(struct amdxdna_client *client)
+{
+ int depth;
+
+ guard(spinlock)(&client->io_stats.lock);
+
+ depth = client->io_stats.job_depth++;
+ if (!depth)
+ client->io_stats.start_time = ktime_get_ns();
+}
+
+void amdxdna_io_stats_job_done(struct amdxdna_client *client)
+{
+ u64 busy_ns;
+ int depth;
+
+ guard(spinlock)(&client->io_stats.lock);
+
+ depth = --client->io_stats.job_depth;
+ if (!depth) {
+ busy_ns = ktime_get_ns() - client->io_stats.start_time;
+ client->io_stats.start_time = 0;
+ client->io_stats.busy_time += busy_ns;
+ }
+}
+
+u64 amdxdna_io_stats_busy_time_ns(struct amdxdna_client *client)
+{
+ u64 busy_ns;
+
+ guard(spinlock)(&client->io_stats.lock);
+
+ busy_ns = client->io_stats.busy_time;
+ if (client->io_stats.job_depth)
+ busy_ns += ktime_get_ns() - client->io_stats.start_time;
+
+ return busy_ns;
+}
+
int amdxdna_get_metadata(struct aie_device *aie,
struct amdxdna_client *client,
struct amdxdna_drm_get_info *args)