summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/gk20a_sysfs.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/gk20a_sysfs.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/gk20a_sysfs.c28
1 files changed, 26 insertions, 2 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a_sysfs.c b/drivers/gpu/nvgpu/gk20a/gk20a_sysfs.c
index 335c3f3b..f7e0a2b6 100644
--- a/drivers/gpu/nvgpu/gk20a/gk20a_sysfs.c
+++ b/drivers/gpu/nvgpu/gk20a/gk20a_sysfs.c
@@ -248,8 +248,8 @@ static ssize_t counters_show(struct device *dev,
248 248
249 return res; 249 return res;
250} 250}
251
252static DEVICE_ATTR(counters, S_IRUGO, counters_show, NULL); 251static DEVICE_ATTR(counters, S_IRUGO, counters_show, NULL);
252
253static ssize_t counters_show_reset(struct device *dev, 253static ssize_t counters_show_reset(struct device *dev,
254 struct device_attribute *attr, char *buf) 254 struct device_attribute *attr, char *buf)
255{ 255{
@@ -261,9 +261,31 @@ static ssize_t counters_show_reset(struct device *dev,
261 261
262 return res; 262 return res;
263} 263}
264
265static DEVICE_ATTR(counters_reset, S_IRUGO, counters_show_reset, NULL); 264static DEVICE_ATTR(counters_reset, S_IRUGO, counters_show_reset, NULL);
266 265
266static ssize_t gk20a_load_show(struct device *dev,
267 struct device_attribute *attr,
268 char *buf)
269{
270 struct platform_device *pdev = to_platform_device(dev);
271 struct gk20a *g = get_gk20a(pdev);
272 u32 busy_time;
273 ssize_t res;
274
275 if (!g->power_on) {
276 busy_time = 0;
277 } else {
278 gk20a_busy(g->dev);
279 gk20a_pmu_load_norm(g, &busy_time);
280 gk20a_idle(g->dev);
281 }
282
283 res = snprintf(buf, PAGE_SIZE, "%u\n", busy_time);
284
285 return res;
286}
287static DEVICE_ATTR(load, S_IRUGO, gk20a_load_show, NULL);
288
267static ssize_t elpg_enable_store(struct device *device, 289static ssize_t elpg_enable_store(struct device *device,
268 struct device_attribute *attr, const char *buf, size_t count) 290 struct device_attribute *attr, const char *buf, size_t count)
269{ 291{
@@ -318,6 +340,7 @@ void gk20a_remove_sysfs(struct device *dev)
318 device_remove_file(dev, &dev_attr_elpg_enable); 340 device_remove_file(dev, &dev_attr_elpg_enable);
319 device_remove_file(dev, &dev_attr_counters); 341 device_remove_file(dev, &dev_attr_counters);
320 device_remove_file(dev, &dev_attr_counters_reset); 342 device_remove_file(dev, &dev_attr_counters_reset);
343 device_remove_file(dev, &dev_attr_load);
321 device_remove_file(dev, &dev_attr_railgate_delay); 344 device_remove_file(dev, &dev_attr_railgate_delay);
322 device_remove_file(dev, &dev_attr_clockgate_delay); 345 device_remove_file(dev, &dev_attr_clockgate_delay);
323} 346}
@@ -333,6 +356,7 @@ void gk20a_create_sysfs(struct platform_device *dev)
333 error |= device_create_file(&dev->dev, &dev_attr_elpg_enable); 356 error |= device_create_file(&dev->dev, &dev_attr_elpg_enable);
334 error |= device_create_file(&dev->dev, &dev_attr_counters); 357 error |= device_create_file(&dev->dev, &dev_attr_counters);
335 error |= device_create_file(&dev->dev, &dev_attr_counters_reset); 358 error |= device_create_file(&dev->dev, &dev_attr_counters_reset);
359 error |= device_create_file(&dev->dev, &dev_attr_load);
336 error |= device_create_file(&dev->dev, &dev_attr_railgate_delay); 360 error |= device_create_file(&dev->dev, &dev_attr_railgate_delay);
337 error |= device_create_file(&dev->dev, &dev_attr_clockgate_delay); 361 error |= device_create_file(&dev->dev, &dev_attr_clockgate_delay);
338 362