summaryrefslogtreecommitdiff
path: root/drivers/edgetpu/edgetpu-usage-stats.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/edgetpu/edgetpu-usage-stats.c')
-rw-r--r--drivers/edgetpu/edgetpu-usage-stats.c142
1 files changed, 131 insertions, 11 deletions
diff --git a/drivers/edgetpu/edgetpu-usage-stats.c b/drivers/edgetpu/edgetpu-usage-stats.c
index 1404674..c13b42e 100644
--- a/drivers/edgetpu/edgetpu-usage-stats.c
+++ b/drivers/edgetpu/edgetpu-usage-stats.c
@@ -17,6 +17,7 @@
#include "abrolhos-pm.h"
static enum tpu_pwr_state tpu_states_arr[] = {
+ TPU_ACTIVE_UUD,
TPU_ACTIVE_SUD,
TPU_ACTIVE_UD,
TPU_ACTIVE_NOM,
@@ -151,6 +152,22 @@ static void edgetpu_counter_update(
mutex_unlock(&ustats->usage_stats_lock);
}
+static void edgetpu_counter_clear(
+ struct edgetpu_dev *etdev,
+ enum edgetpu_usage_counter_type counter_type)
+{
+ struct edgetpu_usage_stats *ustats = etdev->usage_stats;
+
+ if (!ustats)
+ return;
+ if (counter_type >= EDGETPU_COUNTER_COUNT)
+ return;
+
+ mutex_lock(&ustats->usage_stats_lock);
+ ustats->counter[counter_type] = 0;
+ mutex_unlock(&ustats->usage_stats_lock);
+}
+
static void edgetpu_max_watermark_update(
struct edgetpu_dev *etdev,
struct edgetpu_usage_max_watermark *max_watermark)
@@ -364,7 +381,7 @@ static ssize_t tpu_usage_clear(struct device *dev,
return count;
}
-static DEVICE_ATTR(tpu_usage, 0644, tpu_usage_show, tpu_usage_clear);
+static DEVICE_ATTR(tpu_usage, 0664, tpu_usage_show, tpu_usage_clear);
static ssize_t device_utilization_show(struct device *dev,
struct device_attribute *attr,
@@ -403,7 +420,19 @@ static ssize_t tpu_active_cycle_count_show(struct device *dev,
EDGETPU_COUNTER_TPU_ACTIVE_CYCLES);
return scnprintf(buf, PAGE_SIZE, "%llu\n", val);
}
-static DEVICE_ATTR_RO(tpu_active_cycle_count);
+
+static ssize_t tpu_active_cycle_count_store(struct device *dev,
+ struct device_attribute *attr,
+ const char *buf,
+ size_t count)
+{
+ struct edgetpu_dev *etdev = dev_get_drvdata(dev);
+
+ edgetpu_counter_clear(etdev, EDGETPU_COUNTER_TPU_ACTIVE_CYCLES);
+ return count;
+}
+static DEVICE_ATTR(tpu_active_cycle_count, 0664, tpu_active_cycle_count_show,
+ tpu_active_cycle_count_store);
static ssize_t tpu_throttle_stall_count_show(struct device *dev,
struct device_attribute *attr,
@@ -416,7 +445,20 @@ static ssize_t tpu_throttle_stall_count_show(struct device *dev,
EDGETPU_COUNTER_TPU_THROTTLE_STALLS);
return scnprintf(buf, PAGE_SIZE, "%llu\n", val);
}
-static DEVICE_ATTR_RO(tpu_throttle_stall_count);
+
+static ssize_t tpu_throttle_stall_count_store(struct device *dev,
+ struct device_attribute *attr,
+ const char *buf,
+ size_t count)
+{
+ struct edgetpu_dev *etdev = dev_get_drvdata(dev);
+
+ edgetpu_counter_clear(etdev, EDGETPU_COUNTER_TPU_THROTTLE_STALLS);
+ return count;
+}
+static DEVICE_ATTR(tpu_throttle_stall_count, 0664,
+ tpu_throttle_stall_count_show,
+ tpu_throttle_stall_count_store);
static ssize_t inference_count_show(struct device *dev,
struct device_attribute *attr, char *buf)
@@ -428,7 +470,19 @@ static ssize_t inference_count_show(struct device *dev,
EDGETPU_COUNTER_INFERENCES);
return scnprintf(buf, PAGE_SIZE, "%llu\n", val);
}
-static DEVICE_ATTR_RO(inference_count);
+
+static ssize_t inference_count_store(struct device *dev,
+ struct device_attribute *attr,
+ const char *buf,
+ size_t count)
+{
+ struct edgetpu_dev *etdev = dev_get_drvdata(dev);
+
+ edgetpu_counter_clear(etdev, EDGETPU_COUNTER_INFERENCES);
+ return count;
+}
+static DEVICE_ATTR(inference_count, 0664, inference_count_show,
+ inference_count_store);
static ssize_t tpu_op_count_show(struct device *dev,
struct device_attribute *attr, char *buf)
@@ -440,7 +494,18 @@ static ssize_t tpu_op_count_show(struct device *dev,
EDGETPU_COUNTER_TPU_OPS);
return scnprintf(buf, PAGE_SIZE, "%llu\n", val);
}
-static DEVICE_ATTR_RO(tpu_op_count);
+
+static ssize_t tpu_op_count_store(struct device *dev,
+ struct device_attribute *attr,
+ const char *buf,
+ size_t count)
+{
+ struct edgetpu_dev *etdev = dev_get_drvdata(dev);
+
+ edgetpu_counter_clear(etdev, EDGETPU_COUNTER_TPU_OPS);
+ return count;
+}
+static DEVICE_ATTR(tpu_op_count, 0664, tpu_op_count_show, tpu_op_count_store);
static ssize_t param_cache_hit_count_show(struct device *dev,
struct device_attribute *attr,
@@ -453,7 +518,19 @@ static ssize_t param_cache_hit_count_show(struct device *dev,
EDGETPU_COUNTER_PARAM_CACHE_HITS);
return scnprintf(buf, PAGE_SIZE, "%llu\n", val);
}
-static DEVICE_ATTR_RO(param_cache_hit_count);
+
+static ssize_t param_cache_hit_count_store(struct device *dev,
+ struct device_attribute *attr,
+ const char *buf,
+ size_t count)
+{
+ struct edgetpu_dev *etdev = dev_get_drvdata(dev);
+
+ edgetpu_counter_clear(etdev, EDGETPU_COUNTER_PARAM_CACHE_HITS);
+ return count;
+}
+static DEVICE_ATTR(param_cache_hit_count, 0664, param_cache_hit_count_show,
+ param_cache_hit_count_store);
static ssize_t param_cache_miss_count_show(struct device *dev,
struct device_attribute *attr,
@@ -466,7 +543,19 @@ static ssize_t param_cache_miss_count_show(struct device *dev,
EDGETPU_COUNTER_PARAM_CACHE_MISSES);
return scnprintf(buf, PAGE_SIZE, "%llu\n", val);
}
-static DEVICE_ATTR_RO(param_cache_miss_count);
+
+static ssize_t param_cache_miss_count_store(struct device *dev,
+ struct device_attribute *attr,
+ const char *buf,
+ size_t count)
+{
+ struct edgetpu_dev *etdev = dev_get_drvdata(dev);
+
+ edgetpu_counter_clear(etdev, EDGETPU_COUNTER_PARAM_CACHE_MISSES);
+ return count;
+}
+static DEVICE_ATTR(param_cache_miss_count, 0664, param_cache_miss_count_show,
+ param_cache_miss_count_store);
static ssize_t context_preempt_count_show(struct device *dev,
struct device_attribute *attr,
@@ -479,7 +568,19 @@ static ssize_t context_preempt_count_show(struct device *dev,
EDGETPU_COUNTER_CONTEXT_PREEMPTS);
return scnprintf(buf, PAGE_SIZE, "%llu\n", val);
}
-static DEVICE_ATTR_RO(context_preempt_count);
+
+static ssize_t context_preempt_count_store(struct device *dev,
+ struct device_attribute *attr,
+ const char *buf,
+ size_t count)
+{
+ struct edgetpu_dev *etdev = dev_get_drvdata(dev);
+
+ edgetpu_counter_clear(etdev, EDGETPU_COUNTER_CONTEXT_PREEMPTS);
+ return count;
+}
+static DEVICE_ATTR(context_preempt_count, 0664, context_preempt_count_show,
+ context_preempt_count_store);
static ssize_t outstanding_commands_max_show(
struct device *dev, struct device_attribute *attr, char *buf)
@@ -507,7 +608,9 @@ static ssize_t outstanding_commands_max_store(
return count;
}
-static DEVICE_ATTR_RW(outstanding_commands_max);
+static DEVICE_ATTR(outstanding_commands_max, 0664,
+ outstanding_commands_max_show,
+ outstanding_commands_max_store);
static ssize_t preempt_depth_max_show(
struct device *dev, struct device_attribute *attr, char *buf)
@@ -535,7 +638,8 @@ static ssize_t preempt_depth_max_store(
return count;
}
-static DEVICE_ATTR_RW(preempt_depth_max);
+static DEVICE_ATTR(preempt_depth_max, 0664, preempt_depth_max_show,
+ preempt_depth_max_store);
static ssize_t fw_thread_stats_show(
struct device *dev, struct device_attribute *attr, char *buf)
@@ -559,7 +663,23 @@ static ssize_t fw_thread_stats_show(
mutex_unlock(&ustats->usage_stats_lock);
return ret;
}
-static DEVICE_ATTR_RO(fw_thread_stats);
+
+static ssize_t fw_thread_stats_store(
+ struct device *dev, struct device_attribute *attr,
+ const char *buf, size_t count)
+{
+ struct edgetpu_dev *etdev = dev_get_drvdata(dev);
+ struct edgetpu_usage_stats *ustats = etdev->usage_stats;
+ int i;
+
+ mutex_lock(&ustats->usage_stats_lock);
+ for (i = 0; i < EDGETPU_FW_THREAD_COUNT; i++)
+ ustats->thread_stack_max[i] = 0;
+ mutex_unlock(&ustats->usage_stats_lock);
+ return count;
+}
+static DEVICE_ATTR(fw_thread_stats, 0664, fw_thread_stats_show,
+ fw_thread_stats_store);
static struct attribute *usage_stats_dev_attrs[] = {
&dev_attr_tpu_usage.attr,