2019-09-19 14:43:19 +00:00
|
|
|
From 2d4f38abdc2a919d8002fbec7bc0be7c1312786a Mon Sep 17 00:00:00 2001
|
2019-07-09 18:32:28 +00:00
|
|
|
From: Eric Anholt <eric@anholt.net>
|
|
|
|
Date: Mon, 14 Jan 2019 15:13:17 -0800
|
2019-09-19 14:43:19 +00:00
|
|
|
Subject: [PATCH 582/806] drm/v3d: HACK: gut runtime pm for now.
|
2019-07-09 18:32:28 +00:00
|
|
|
|
|
|
|
Something is still unstable -- on starting a new glxgears from an idle
|
|
|
|
X11, I get an MMU violation in high addresses. The CTS also failed
|
|
|
|
quite quickly. With this, CTS progresses for an hour before OOMing
|
|
|
|
(allocating some big buffers when my board only has 600MB available to
|
|
|
|
Linux)
|
|
|
|
|
|
|
|
Signed-off-by: Eric Anholt <eric@anholt.net>
|
|
|
|
---
|
|
|
|
drivers/gpu/drm/v3d/v3d_debugfs.c | 16 +---------------
|
|
|
|
drivers/gpu/drm/v3d/v3d_drv.c | 7 -------
|
|
|
|
drivers/gpu/drm/v3d/v3d_gem.c | 20 --------------------
|
|
|
|
3 files changed, 1 insertion(+), 42 deletions(-)
|
|
|
|
|
|
|
|
--- a/drivers/gpu/drm/v3d/v3d_debugfs.c
|
|
|
|
+++ b/drivers/gpu/drm/v3d/v3d_debugfs.c
|
|
|
|
@@ -4,7 +4,6 @@
|
|
|
|
#include <linux/circ_buf.h>
|
|
|
|
#include <linux/ctype.h>
|
|
|
|
#include <linux/debugfs.h>
|
|
|
|
-#include <linux/pm_runtime.h>
|
|
|
|
#include <linux/seq_file.h>
|
|
|
|
#include <drm/drmP.h>
|
|
|
|
|
|
|
|
@@ -100,11 +99,8 @@ static int v3d_v3d_debugfs_ident(struct
|
|
|
|
struct drm_device *dev = node->minor->dev;
|
|
|
|
struct v3d_dev *v3d = to_v3d_dev(dev);
|
|
|
|
u32 ident0, ident1, ident2, ident3, cores;
|
|
|
|
- int ret, core;
|
|
|
|
+ int core;
|
|
|
|
|
|
|
|
- ret = pm_runtime_get_sync(v3d->dev);
|
|
|
|
- if (ret < 0)
|
|
|
|
- return ret;
|
|
|
|
|
|
|
|
ident0 = V3D_READ(V3D_HUB_IDENT0);
|
|
|
|
ident1 = V3D_READ(V3D_HUB_IDENT1);
|
|
|
|
@@ -157,9 +153,6 @@ static int v3d_v3d_debugfs_ident(struct
|
|
|
|
(misccfg & V3D_MISCCFG_OVRTMUOUT) != 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
- pm_runtime_mark_last_busy(v3d->dev);
|
|
|
|
- pm_runtime_put_autosuspend(v3d->dev);
|
|
|
|
-
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
@@ -187,11 +180,6 @@ static int v3d_measure_clock(struct seq_
|
|
|
|
uint32_t cycles;
|
|
|
|
int core = 0;
|
|
|
|
int measure_ms = 1000;
|
|
|
|
- int ret;
|
|
|
|
-
|
|
|
|
- ret = pm_runtime_get_sync(v3d->dev);
|
|
|
|
- if (ret < 0)
|
|
|
|
- return ret;
|
|
|
|
|
|
|
|
if (v3d->ver >= 40) {
|
|
|
|
V3D_CORE_WRITE(core, V3D_V4_PCTR_0_SRC_0_3,
|
|
|
|
@@ -215,8 +203,6 @@ static int v3d_measure_clock(struct seq_
|
|
|
|
cycles / (measure_ms * 1000),
|
|
|
|
(cycles / (measure_ms * 100)) % 10);
|
|
|
|
|
|
|
|
- pm_runtime_mark_last_busy(v3d->dev);
|
|
|
|
- pm_runtime_put_autosuspend(v3d->dev);
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
--- a/drivers/gpu/drm/v3d/v3d_drv.c
|
|
|
|
+++ b/drivers/gpu/drm/v3d/v3d_drv.c
|
|
|
|
@@ -75,7 +75,6 @@ static int v3d_get_param_ioctl(struct dr
|
|
|
|
{
|
|
|
|
struct v3d_dev *v3d = to_v3d_dev(dev);
|
|
|
|
struct drm_v3d_get_param *args = data;
|
|
|
|
- int ret;
|
|
|
|
static const u32 reg_map[] = {
|
|
|
|
[DRM_V3D_PARAM_V3D_UIFCFG] = V3D_HUB_UIFCFG,
|
|
|
|
[DRM_V3D_PARAM_V3D_HUB_IDENT1] = V3D_HUB_IDENT1,
|
|
|
|
@@ -101,15 +100,12 @@ static int v3d_get_param_ioctl(struct dr
|
|
|
|
if (args->value != 0)
|
|
|
|
return -EINVAL;
|
|
|
|
|
|
|
|
- ret = pm_runtime_get_sync(v3d->dev);
|
|
|
|
if (args->param >= DRM_V3D_PARAM_V3D_CORE0_IDENT0 &&
|
|
|
|
args->param <= DRM_V3D_PARAM_V3D_CORE0_IDENT2) {
|
|
|
|
args->value = V3D_CORE_READ(0, offset);
|
|
|
|
} else {
|
|
|
|
args->value = V3D_READ(offset);
|
|
|
|
}
|
|
|
|
- pm_runtime_mark_last_busy(v3d->dev);
|
|
|
|
- pm_runtime_put_autosuspend(v3d->dev);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
@@ -311,9 +307,6 @@ static int v3d_platform_drm_probe(struct
|
|
|
|
goto dev_free;
|
|
|
|
}
|
|
|
|
|
|
|
|
- pm_runtime_use_autosuspend(dev);
|
|
|
|
- pm_runtime_set_autosuspend_delay(dev, 50);
|
|
|
|
- pm_runtime_enable(dev);
|
|
|
|
|
|
|
|
ret = drm_dev_init(&v3d->drm, &v3d_drm_driver, dev);
|
|
|
|
if (ret)
|
|
|
|
--- a/drivers/gpu/drm/v3d/v3d_gem.c
|
|
|
|
+++ b/drivers/gpu/drm/v3d/v3d_gem.c
|
|
|
|
@@ -375,7 +375,6 @@ v3d_exec_cleanup(struct kref *ref)
|
|
|
|
{
|
|
|
|
struct v3d_exec_info *exec = container_of(ref, struct v3d_exec_info,
|
|
|
|
refcount);
|
|
|
|
- struct v3d_dev *v3d = exec->v3d;
|
|
|
|
unsigned int i;
|
|
|
|
struct v3d_bo *bo, *save;
|
|
|
|
|
|
|
|
@@ -396,9 +395,6 @@ v3d_exec_cleanup(struct kref *ref)
|
|
|
|
drm_gem_object_put_unlocked(&bo->base);
|
|
|
|
}
|
|
|
|
|
|
|
|
- pm_runtime_mark_last_busy(v3d->dev);
|
|
|
|
- pm_runtime_put_autosuspend(v3d->dev);
|
|
|
|
-
|
|
|
|
kfree(exec);
|
|
|
|
}
|
|
|
|
|
|
|
|
@@ -412,7 +408,6 @@ v3d_tfu_job_cleanup(struct kref *ref)
|
|
|
|
{
|
|
|
|
struct v3d_tfu_job *job = container_of(ref, struct v3d_tfu_job,
|
|
|
|
refcount);
|
|
|
|
- struct v3d_dev *v3d = job->v3d;
|
|
|
|
unsigned int i;
|
|
|
|
|
|
|
|
dma_fence_put(job->in_fence);
|
|
|
|
@@ -423,9 +418,6 @@ v3d_tfu_job_cleanup(struct kref *ref)
|
|
|
|
drm_gem_object_put_unlocked(&job->bo[i]->base);
|
|
|
|
}
|
|
|
|
|
|
|
|
- pm_runtime_mark_last_busy(v3d->dev);
|
|
|
|
- pm_runtime_put_autosuspend(v3d->dev);
|
|
|
|
-
|
|
|
|
kfree(job);
|
|
|
|
}
|
|
|
|
|
|
|
|
@@ -519,12 +511,6 @@ v3d_submit_cl_ioctl(struct drm_device *d
|
|
|
|
if (!exec)
|
|
|
|
return -ENOMEM;
|
|
|
|
|
|
|
|
- ret = pm_runtime_get_sync(v3d->dev);
|
|
|
|
- if (ret < 0) {
|
|
|
|
- kfree(exec);
|
|
|
|
- return ret;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
kref_init(&exec->refcount);
|
|
|
|
|
|
|
|
ret = drm_syncobj_find_fence(file_priv, args->in_sync_bcl,
|
|
|
|
@@ -643,12 +629,6 @@ v3d_submit_tfu_ioctl(struct drm_device *
|
|
|
|
if (!job)
|
|
|
|
return -ENOMEM;
|
|
|
|
|
|
|
|
- ret = pm_runtime_get_sync(v3d->dev);
|
|
|
|
- if (ret < 0) {
|
|
|
|
- kfree(job);
|
|
|
|
- return ret;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
kref_init(&job->refcount);
|
|
|
|
|
|
|
|
ret = drm_syncobj_find_fence(file_priv, args->in_sync,
|