diff options
author | Lucas Stach <l.stach@pengutronix.de> | 2013-09-13 14:53:03 +0200 |
---|---|---|
committer | Lucas Stach <l.stach@pengutronix.de> | 2013-09-17 08:45:16 +0200 |
commit | 8924b399eb5a9547495581a228e6b175006c042f (patch) | |
tree | 01098df39ebf2815e716203a3f0c1016d182c8ea | |
parent | 907b18c50348adf0055ffed2863ee30758b97642 (diff) | |
download | linux-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.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/msm/adreno/adreno_gpu.h | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/msm/msm_gem.h | 10 | ||||
-rw-r--r-- | drivers/gpu/drm/msm/msm_gem_submit.c | 14 | ||||
-rw-r--r-- | drivers/gpu/drm/msm/msm_gpu.c | 8 | ||||
-rw-r--r-- | drivers/gpu/drm/msm/msm_gpu.h | 1 | ||||
-rw-r--r-- | include/drm/drm_adreno.h | 15 |
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); |