summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLucas Stach <l.stach@pengutronix.de>2013-09-13 14:53:03 +0200
committerLucas Stach <l.stach@pengutronix.de>2013-09-17 08:45:16 +0200
commit8924b399eb5a9547495581a228e6b175006c042f (patch)
tree01098df39ebf2815e716203a3f0c1016d182c8ea
parent907b18c50348adf0055ffed2863ee30758b97642 (diff)
downloadlinux-8924b399eb5a9547495581a228e6b175006c042f.tar.gz
linux-8924b399eb5a9547495581a228e6b175006c042f.tar.xz
WIP: make adreno submit freestanding
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
-rw-r--r--drivers/gpu/drm/msm/adreno/adreno_gpu.c3
-rw-r--r--drivers/gpu/drm/msm/adreno/adreno_gpu.h2
-rw-r--r--drivers/gpu/drm/msm/msm_gem.h10
-rw-r--r--drivers/gpu/drm/msm/msm_gem_submit.c14
-rw-r--r--drivers/gpu/drm/msm/msm_gpu.c8
-rw-r--r--drivers/gpu/drm/msm/msm_gpu.h1
-rw-r--r--include/drm/drm_adreno.h15
7 files changed, 28 insertions, 25 deletions
diff --git a/drivers/gpu/drm/msm/adreno/adreno_gpu.c b/drivers/gpu/drm/msm/adreno/adreno_gpu.c
index 55033619fd1c..a3c57bb3bd87 100644
--- a/drivers/gpu/drm/msm/adreno/adreno_gpu.c
+++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.c
@@ -16,7 +16,6 @@
*/
#include "adreno_gpu.h"
-#include "msm_gem.h"
struct adreno_info {
struct adreno_rev rev;
@@ -133,7 +132,7 @@ void adreno_recover(struct msm_gpu *gpu)
}
}
-int adreno_submit(struct msm_gpu *gpu, struct msm_gem_submit *submit,
+int adreno_submit(struct msm_gpu *gpu, struct adreno_submit *submit,
struct adreno_context *ctx)
{
struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu);
diff --git a/drivers/gpu/drm/msm/adreno/adreno_gpu.h b/drivers/gpu/drm/msm/adreno/adreno_gpu.h
index 133f2b0f1799..861e1ee666ac 100644
--- a/drivers/gpu/drm/msm/adreno/adreno_gpu.h
+++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.h
@@ -101,7 +101,7 @@ int adreno_get_param(struct msm_gpu *gpu, uint32_t param, uint64_t *value);
int adreno_hw_init(struct msm_gpu *gpu);
uint32_t adreno_last_fence(struct msm_gpu *gpu);
void adreno_recover(struct msm_gpu *gpu);
-int adreno_submit(struct msm_gpu *gpu, struct msm_gem_submit *submit,
+int adreno_submit(struct msm_gpu *gpu, struct adreno_submit *submit,
struct adreno_context *ctx);
void adreno_flush(struct msm_gpu *gpu);
void adreno_idle(struct msm_gpu *gpu);
diff --git a/drivers/gpu/drm/msm/msm_gem.h b/drivers/gpu/drm/msm/msm_gem.h
index d746f13d283c..f74cc1dbb274 100644
--- a/drivers/gpu/drm/msm/msm_gem.h
+++ b/drivers/gpu/drm/msm/msm_gem.h
@@ -68,28 +68,20 @@ static inline bool is_active(struct msm_gem_object *msm_obj)
return msm_obj->gpu != NULL;
}
-#define MAX_CMDS 4
-
/* Created per submit-ioctl, to track bo's and cmdstream bufs, etc,
* associated with the cmdstream submission for synchronization (and
* make it easier to unwind when things go wrong, etc). This only
* lasts for the duration of the submit-ioctl.
*/
struct msm_gem_submit {
+ struct adreno_submit base;
struct drm_device *dev;
struct msm_gpu *gpu;
struct list_head bo_list;
struct ww_acquire_ctx ticket;
- uint32_t fence;
bool valid;
- unsigned int nr_cmds;
unsigned int nr_bos;
struct {
- uint32_t type;
- uint32_t size; /* in dwords */
- uint32_t iova;
- } cmd[MAX_CMDS];
- struct {
uint32_t flags;
struct msm_gem_object *obj;
uint32_t iova;
diff --git a/drivers/gpu/drm/msm/msm_gem_submit.c b/drivers/gpu/drm/msm/msm_gem_submit.c
index 3e1ef3a00f60..7b32759f48f2 100644
--- a/drivers/gpu/drm/msm/msm_gem_submit.c
+++ b/drivers/gpu/drm/msm/msm_gem_submit.c
@@ -47,7 +47,7 @@ static struct msm_gem_submit *submit_create(struct drm_device *dev,
/* initially, until copy_from_user() and bo lookup succeeds: */
submit->nr_bos = 0;
- submit->nr_cmds = 0;
+ submit->base.nr_cmds = 0;
INIT_LIST_HEAD(&submit->bo_list);
ww_acquire_init(&submit->ticket, &reservation_ww_class);
@@ -338,7 +338,7 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data,
gpu = priv->gpu;
- if (args->nr_cmds > MAX_CMDS)
+ if (args->nr_cmds > ADRENO_SUBMIT_MAX_CMDS)
return -EINVAL;
submit = submit_create(dev, gpu, args->nr_bos);
@@ -386,9 +386,9 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data,
goto out;
}
- submit->cmd[i].type = submit_cmd.type;
- submit->cmd[i].size = submit_cmd.size / 4;
- submit->cmd[i].iova = iova + submit_cmd.submit_offset;
+ submit->base.cmd[i].type = submit_cmd.type;
+ submit->base.cmd[i].size = submit_cmd.size / 4;
+ submit->base.cmd[i].iova = iova + submit_cmd.submit_offset;
if (submit->valid)
continue;
@@ -399,11 +399,11 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data,
goto out;
}
- submit->nr_cmds = i;
+ submit->base.nr_cmds = i;
ret = msm_gpu_submit(gpu, submit, ctx);
- args->fence = submit->fence;
+ args->fence = submit->base.fence;
out:
if (submit)
diff --git a/drivers/gpu/drm/msm/msm_gpu.c b/drivers/gpu/drm/msm/msm_gpu.c
index 3b0aad71fbd0..cc4c179005e9 100644
--- a/drivers/gpu/drm/msm/msm_gpu.c
+++ b/drivers/gpu/drm/msm/msm_gpu.c
@@ -297,11 +297,11 @@ int msm_gpu_submit(struct msm_gpu *gpu, struct msm_gem_submit *submit,
mutex_lock(&dev->struct_mutex);
- submit->fence = ++priv->next_fence;
+ submit->base.fence = ++priv->next_fence;
- gpu->submitted_fence = submit->fence;
+ gpu->submitted_fence = submit->base.fence;
- ret = gpu->funcs->submit(gpu, submit, &filp->ctx);
+ ret = gpu->funcs->submit(gpu, &submit->base, &filp->ctx);
for (i = 0; i < submit->nr_bos; i++) {
struct msm_gem_object *msm_obj = submit->bos[i].obj;
@@ -320,7 +320,7 @@ int msm_gpu_submit(struct msm_gpu *gpu, struct msm_gem_submit *submit,
submit->gpu->id, &iova);
}
- msm_gem_move_to_active(&msm_obj->base, gpu, submit->fence);
+ msm_gem_move_to_active(&msm_obj->base, gpu, submit->base.fence);
}
hangcheck_timer_reset(gpu);
mutex_unlock(&dev->struct_mutex);
diff --git a/drivers/gpu/drm/msm/msm_gpu.h b/drivers/gpu/drm/msm/msm_gpu.h
index 7cac83c1da3b..e53fbc05164b 100644
--- a/drivers/gpu/drm/msm/msm_gpu.h
+++ b/drivers/gpu/drm/msm/msm_gpu.h
@@ -85,6 +85,7 @@ int msm_gpu_pm_suspend(struct msm_gpu *gpu);
int msm_gpu_pm_resume(struct msm_gpu *gpu);
void msm_gpu_retire(struct msm_gpu *gpu);
+struct msm_gem_submit;
int msm_gpu_submit(struct msm_gpu *gpu, struct msm_gem_submit *submit,
struct msm_file_private *ctx);
diff --git a/include/drm/drm_adreno.h b/include/drm/drm_adreno.h
index 92275429dfe9..8c62a834b9b0 100644
--- a/include/drm/drm_adreno.h
+++ b/include/drm/drm_adreno.h
@@ -20,7 +20,18 @@
#include <drm/drmP.h>
struct msm_gpu;
-struct msm_gem_submit;
+
+#define ADRENO_SUBMIT_MAX_CMDS 4
+struct adreno_submit {
+ unsigned int nr_cmds;
+ struct {
+ uint32_t type;
+ uint32_t size; /* in dwords */
+ uint32_t iova;
+ } cmd[ADRENO_SUBMIT_MAX_CMDS];
+
+ uint32_t fence;
+};
struct adreno_context {
int dummy;
@@ -31,7 +42,7 @@ struct adreno_gpu_funcs {
int (*hw_init)(struct msm_gpu *gpu);
int (*pm_suspend)(struct msm_gpu *gpu);
int (*pm_resume)(struct msm_gpu *gpu);
- int (*submit)(struct msm_gpu *gpu, struct msm_gem_submit *submit,
+ int (*submit)(struct msm_gpu *gpu, struct adreno_submit *submit,
struct adreno_context *ctx);
void (*flush)(struct msm_gpu *gpu);
void (*idle)(struct msm_gpu *gpu);