Commit 369b0596 authored by Melissa Wen's avatar Melissa Wen Committed by Maíra Canal

drm/v3d: Detach the CSD job BO setup

Detach CSD job setup from CSD submission ioctl to reuse it in CPU
submission ioctl for indirect CSD job.
Signed-off-by: default avatarMelissa Wen <mwen@igalia.com>
Co-developed-by: default avatarMaíra Canal <mcanal@igalia.com>
Signed-off-by: default avatarMaíra Canal <mcanal@igalia.com>
Reviewed-by: default avatarIago Toral Quiroga <itoral@igalia.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20231130164420.932823-12-mcanal@igalia.com
parent 1fe0879e
...@@ -256,6 +256,45 @@ v3d_attach_fences_and_unlock_reservation(struct drm_file *file_priv, ...@@ -256,6 +256,45 @@ v3d_attach_fences_and_unlock_reservation(struct drm_file *file_priv,
} }
} }
static int
v3d_setup_csd_jobs_and_bos(struct drm_file *file_priv,
struct v3d_dev *v3d,
struct drm_v3d_submit_csd *args,
struct v3d_csd_job **job,
struct v3d_job **clean_job,
struct v3d_submit_ext *se,
struct ww_acquire_ctx *acquire_ctx)
{
int ret;
ret = v3d_job_allocate((void *)job, sizeof(**job));
if (ret)
return ret;
ret = v3d_job_init(v3d, file_priv, &(*job)->base,
v3d_job_free, args->in_sync, se, V3D_CSD);
if (ret)
return ret;
ret = v3d_job_allocate((void *)clean_job, sizeof(**clean_job));
if (ret)
return ret;
ret = v3d_job_init(v3d, file_priv, *clean_job,
v3d_job_free, 0, NULL, V3D_CACHE_CLEAN);
if (ret)
return ret;
(*job)->args = *args;
ret = v3d_lookup_bos(&v3d->drm, file_priv, *clean_job,
args->bo_handles, args->bo_handle_count);
if (ret)
return ret;
return v3d_lock_bo_reservations(*clean_job, acquire_ctx);
}
static void static void
v3d_put_multisync_post_deps(struct v3d_submit_ext *se) v3d_put_multisync_post_deps(struct v3d_submit_ext *se)
{ {
...@@ -700,32 +739,9 @@ v3d_submit_csd_ioctl(struct drm_device *dev, void *data, ...@@ -700,32 +739,9 @@ v3d_submit_csd_ioctl(struct drm_device *dev, void *data,
} }
} }
ret = v3d_job_allocate((void *)&job, sizeof(*job)); ret = v3d_setup_csd_jobs_and_bos(file_priv, v3d, args,
if (ret) &job, &clean_job, &se,
return ret; &acquire_ctx);
ret = v3d_job_init(v3d, file_priv, &job->base,
v3d_job_free, args->in_sync, &se, V3D_CSD);
if (ret)
goto fail;
ret = v3d_job_allocate((void *)&clean_job, sizeof(*clean_job));
if (ret)
goto fail;
ret = v3d_job_init(v3d, file_priv, clean_job,
v3d_job_free, 0, NULL, V3D_CACHE_CLEAN);
if (ret)
goto fail;
job->args = *args;
ret = v3d_lookup_bos(dev, file_priv, clean_job,
args->bo_handles, args->bo_handle_count);
if (ret)
goto fail;
ret = v3d_lock_bo_reservations(clean_job, &acquire_ctx);
if (ret) if (ret)
goto fail; goto fail;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment