aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/4966-drm-amdgpu-add-amdgpu_job_submit_direct-helper.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/4966-drm-amdgpu-add-amdgpu_job_submit_direct-helper.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/4966-drm-amdgpu-add-amdgpu_job_submit_direct-helper.patch318
1 files changed, 318 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/4966-drm-amdgpu-add-amdgpu_job_submit_direct-helper.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/4966-drm-amdgpu-add-amdgpu_job_submit_direct-helper.patch
new file mode 100644
index 00000000..b2f9ff5d
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/4966-drm-amdgpu-add-amdgpu_job_submit_direct-helper.patch
@@ -0,0 +1,318 @@
+From 425e2affec4b98d562de8d362016f322c1213394 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com>
+Date: Fri, 13 Jul 2018 16:29:10 +0200
+Subject: [PATCH 4966/5725] drm/amdgpu: add amdgpu_job_submit_direct helper
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Make sure that we properly initialize at least the sched member.
+
+Signed-off-by: Christian König <christian.koenig@amd.com>
+Reviewed-by: Junwei Zhang <Jerry.Zhang@amd.com>
+Acked-by: Chunming Zhou <david1.zhou@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Raveendra Talabattula <raveendra.talabattula@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_job.c | 15 +++++++++++++++
+ drivers/gpu/drm/amd/amdgpu/amdgpu_job.h | 4 ++++
+ drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 17 ++++++-----------
+ drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | 4 +---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | 20 ++++++--------------
+ drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 17 ++++-------------
+ drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c | 20 ++++++--------------
+ drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c | 20 ++++++--------------
+ 8 files changed, 48 insertions(+), 69 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
+index 27263f2..1be5575 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
+@@ -140,6 +140,21 @@ int amdgpu_job_submit(struct amdgpu_job *job, struct drm_sched_entity *entity,
+ return 0;
+ }
+
++int amdgpu_job_submit_direct(struct amdgpu_job *job, struct amdgpu_ring *ring,
++ struct dma_fence **fence)
++{
++ int r;
++
++ job->base.sched = &ring->sched;
++ r = amdgpu_ib_schedule(ring, job->num_ibs, job->ibs, NULL, fence);
++ job->fence = dma_fence_get(*fence);
++ if (r)
++ return r;
++
++ amdgpu_job_free(job);
++ return 0;
++}
++
+ static struct dma_fence *amdgpu_job_dependency(struct drm_sched_job *sched_job,
+ struct drm_sched_entity *s_entity)
+ {
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h
+index c663c19..d77fd23 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h
+@@ -33,6 +33,8 @@
+ #define to_amdgpu_job(sched_job) \
+ container_of((sched_job), struct amdgpu_job, base)
+
++struct amdgpu_fence;
++
+ struct amdgpu_job {
+ struct drm_sched_job base;
+ struct amdgpu_device *adev;
+@@ -68,4 +70,6 @@ void amdgpu_job_free_resources(struct amdgpu_job *job);
+ void amdgpu_job_free(struct amdgpu_job *job);
+ int amdgpu_job_submit(struct amdgpu_job *job, struct drm_sched_entity *entity,
+ void *owner, struct dma_fence **f);
++int amdgpu_job_submit_direct(struct amdgpu_job *job, struct amdgpu_ring *ring,
++ struct dma_fence **fence);
+ #endif
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+index 8bf244e..addc397 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+@@ -2273,24 +2273,19 @@ int amdgpu_copy_buffer(struct amdgpu_ring *ring, uint64_t src_offset,
+
+ amdgpu_ring_pad_ib(ring, &job->ibs[0]);
+ WARN_ON(job->ibs[0].length_dw > num_dw);
+- if (direct_submit) {
+- r = amdgpu_ib_schedule(ring, job->num_ibs, job->ibs,
+- NULL, fence);
+- job->fence = dma_fence_get(*fence);
+- if (r)
+- DRM_ERROR("Error scheduling IBs (%d)\n", r);
+- amdgpu_job_free(job);
+- } else {
++ if (direct_submit)
++ r = amdgpu_job_submit_direct(job, ring, fence);
++ else
+ r = amdgpu_job_submit(job, &adev->mman.entity,
+ AMDGPU_FENCE_OWNER_UNDEFINED, fence);
+- if (r)
+- goto error_free;
+- }
++ if (r)
++ goto error_free;
+
+ return r;
+
+ error_free:
+ amdgpu_job_free(job);
++ DRM_ERROR("Error scheduling IBs (%d)\n", r);
+ return r;
+ }
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
+index 7c3b3ac..2298571 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
+@@ -1063,12 +1063,10 @@ static int amdgpu_uvd_send_msg(struct amdgpu_ring *ring, struct amdgpu_bo *bo,
+ if (r < 0)
+ goto err_free;
+
+- r = amdgpu_ib_schedule(ring, 1, ib, NULL, &f);
+- job->fence = dma_fence_get(f);
++ r = amdgpu_job_submit_direct(job, ring, &f);
+ if (r)
+ goto err_free;
+
+- amdgpu_job_free(job);
+ } else {
+ r = amdgpu_sync_resv(adev, &job->sync, bo->tbo.resv,
+ AMDGPU_FENCE_OWNER_UNDEFINED, false);
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c
+index 27853b2..7c23719 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c
+@@ -471,12 +471,10 @@ int amdgpu_vce_get_create_msg(struct amdgpu_ring *ring, uint32_t handle,
+ for (i = ib->length_dw; i < ib_size_dw; ++i)
+ ib->ptr[i] = 0x0;
+
+- r = amdgpu_ib_schedule(ring, 1, ib, NULL, &f);
+- job->fence = dma_fence_get(f);
++ r = amdgpu_job_submit_direct(job, ring, &f);
+ if (r)
+ goto err;
+
+- amdgpu_job_free(job);
+ if (fence)
+ *fence = dma_fence_get(f);
+ dma_fence_put(f);
+@@ -533,19 +531,13 @@ int amdgpu_vce_get_destroy_msg(struct amdgpu_ring *ring, uint32_t handle,
+ for (i = ib->length_dw; i < ib_size_dw; ++i)
+ ib->ptr[i] = 0x0;
+
+- if (direct) {
+- r = amdgpu_ib_schedule(ring, 1, ib, NULL, &f);
+- job->fence = dma_fence_get(f);
+- if (r)
+- goto err;
+-
+- amdgpu_job_free(job);
+- } else {
++ if (direct)
++ r = amdgpu_job_submit_direct(job, ring, &f);
++ else
+ r = amdgpu_job_submit(job, &ring->adev->vce.entity,
+ AMDGPU_FENCE_OWNER_UNDEFINED, &f);
+- if (r)
+- goto err;
+- }
++ if (r)
++ goto err;
+
+ if (fence)
+ *fence = dma_fence_get(f);
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
+index e5bcdbb..414a67e 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
+@@ -311,13 +311,10 @@ static int amdgpu_vcn_dec_send_msg(struct amdgpu_ring *ring,
+ }
+ ib->length_dw = 16;
+
+- r = amdgpu_ib_schedule(ring, 1, ib, NULL, &f);
+- job->fence = dma_fence_get(f);
++ r = amdgpu_job_submit_direct(job, ring, &f);
+ if (r)
+ goto err_free;
+
+- amdgpu_job_free(job);
+-
+ amdgpu_bo_fence(bo, f, false);
+ amdgpu_bo_unreserve(bo);
+ amdgpu_bo_unref(&bo);
+@@ -504,12 +501,10 @@ static int amdgpu_vcn_enc_get_create_msg(struct amdgpu_ring *ring, uint32_t hand
+ for (i = ib->length_dw; i < ib_size_dw; ++i)
+ ib->ptr[i] = 0x0;
+
+- r = amdgpu_ib_schedule(ring, 1, ib, NULL, &f);
+- job->fence = dma_fence_get(f);
++ r = amdgpu_job_submit_direct(job, ring, &f);
+ if (r)
+ goto err;
+
+- amdgpu_job_free(job);
+ if (fence)
+ *fence = dma_fence_get(f);
+ dma_fence_put(f);
+@@ -558,12 +553,10 @@ static int amdgpu_vcn_enc_get_destroy_msg(struct amdgpu_ring *ring, uint32_t han
+ for (i = ib->length_dw; i < ib_size_dw; ++i)
+ ib->ptr[i] = 0x0;
+
+- r = amdgpu_ib_schedule(ring, 1, ib, NULL, &f);
+- job->fence = dma_fence_get(f);
++ r = amdgpu_job_submit_direct(job, ring, &f);
+ if (r)
+ goto err;
+
+- amdgpu_job_free(job);
+ if (fence)
+ *fence = dma_fence_get(f);
+ dma_fence_put(f);
+@@ -671,12 +664,10 @@ static int amdgpu_vcn_jpeg_set_reg(struct amdgpu_ring *ring, uint32_t handle,
+ }
+ ib->length_dw = 16;
+
+- r = amdgpu_ib_schedule(ring, 1, ib, NULL, &f);
+- job->fence = dma_fence_get(f);
++ r = amdgpu_job_submit_direct(job, ring, &f);
+ if (r)
+ goto err;
+
+- amdgpu_job_free(job);
+ if (fence)
+ *fence = dma_fence_get(f);
+ dma_fence_put(f);
+diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
+index 068fe13..f832c5e 100644
+--- a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
++++ b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
+@@ -248,12 +248,10 @@ static int uvd_v6_0_enc_get_create_msg(struct amdgpu_ring *ring, uint32_t handle
+ for (i = ib->length_dw; i < ib_size_dw; ++i)
+ ib->ptr[i] = 0x0;
+
+- r = amdgpu_ib_schedule(ring, 1, ib, NULL, &f);
+- job->fence = dma_fence_get(f);
++ r = amdgpu_job_submit_direct(job, ring, &f);
+ if (r)
+ goto err;
+
+- amdgpu_job_free(job);
+ if (fence)
+ *fence = dma_fence_get(f);
+ dma_fence_put(f);
+@@ -312,19 +310,13 @@ static int uvd_v6_0_enc_get_destroy_msg(struct amdgpu_ring *ring,
+ for (i = ib->length_dw; i < ib_size_dw; ++i)
+ ib->ptr[i] = 0x0;
+
+- if (direct) {
+- r = amdgpu_ib_schedule(ring, 1, ib, NULL, &f);
+- job->fence = dma_fence_get(f);
+- if (r)
+- goto err;
+-
+- amdgpu_job_free(job);
+- } else {
++ if (direct)
++ r = amdgpu_job_submit_direct(job, ring, &f);
++ else
+ r = amdgpu_job_submit(job, &ring->adev->vce.entity,
+ AMDGPU_FENCE_OWNER_UNDEFINED, &f);
+- if (r)
+- goto err;
+- }
++ if (r)
++ goto err;
+
+ if (fence)
+ *fence = dma_fence_get(f);
+diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c
+index c6365b0..423b74e 100644
+--- a/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c
++++ b/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c
+@@ -250,12 +250,10 @@ static int uvd_v7_0_enc_get_create_msg(struct amdgpu_ring *ring, uint32_t handle
+ for (i = ib->length_dw; i < ib_size_dw; ++i)
+ ib->ptr[i] = 0x0;
+
+- r = amdgpu_ib_schedule(ring, 1, ib, NULL, &f);
+- job->fence = dma_fence_get(f);
++ r = amdgpu_job_submit_direct(job, ring, &f);
+ if (r)
+ goto err;
+
+- amdgpu_job_free(job);
+ if (fence)
+ *fence = dma_fence_get(f);
+ dma_fence_put(f);
+@@ -313,19 +311,13 @@ int uvd_v7_0_enc_get_destroy_msg(struct amdgpu_ring *ring, uint32_t handle,
+ for (i = ib->length_dw; i < ib_size_dw; ++i)
+ ib->ptr[i] = 0x0;
+
+- if (direct) {
+- r = amdgpu_ib_schedule(ring, 1, ib, NULL, &f);
+- job->fence = dma_fence_get(f);
+- if (r)
+- goto err;
+-
+- amdgpu_job_free(job);
+- } else {
++ if (direct)
++ r = amdgpu_job_submit_direct(job, ring, &f);
++ else
+ r = amdgpu_job_submit(job, &ring->adev->vce.entity,
+ AMDGPU_FENCE_OWNER_UNDEFINED, &f);
+- if (r)
+- goto err;
+- }
++ if (r)
++ goto err;
+
+ if (fence)
+ *fence = dma_fence_get(f);
+--
+2.7.4
+