aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3160-drm-amdgpu-forward-pasid-to-backend-flush-implementa.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3160-drm-amdgpu-forward-pasid-to-backend-flush-implementa.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3160-drm-amdgpu-forward-pasid-to-backend-flush-implementa.patch335
1 files changed, 335 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3160-drm-amdgpu-forward-pasid-to-backend-flush-implementa.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3160-drm-amdgpu-forward-pasid-to-backend-flush-implementa.patch
new file mode 100644
index 00000000..96ba4aaa
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3160-drm-amdgpu-forward-pasid-to-backend-flush-implementa.patch
@@ -0,0 +1,335 @@
+From e420fe3fd389f96cbcbca5404861ec5d7b1b6189 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com>
+Date: Mon, 8 Jan 2018 14:48:11 +0100
+Subject: [PATCH 3160/4131] drm/amdgpu: forward pasid to backend flush
+ implementations
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+rd the pasid from the VM code to the emit_vm_flush function and update
+all implementations with the new parameter.
+
+Signed-off-by: Christian König <christian.koenig@amd.com>
+Reviewed-by: Chunming Zhou <david1.zhou@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu.h | 5 +++--
+ drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c | 2 ++
+ drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h | 2 +-
+ drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 3 ++-
+ drivers/gpu/drm/amd/amdgpu/cik_sdma.c | 3 ++-
+ drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c | 3 ++-
+ drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | 3 ++-
+ drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 3 ++-
+ drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 3 ++-
+ drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c | 3 ++-
+ drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c | 3 ++-
+ drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c | 3 ++-
+ drivers/gpu/drm/amd/amdgpu/si_dma.c | 3 ++-
+ drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c | 6 ++++--
+ drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c | 6 ++++--
+ drivers/gpu/drm/amd/amdgpu/vce_v3_0.c | 3 ++-
+ drivers/gpu/drm/amd/amdgpu/vce_v4_0.c | 3 ++-
+ drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c | 6 ++++--
+ 18 files changed, 42 insertions(+), 21 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+index a40653f..e7c32b6 100755
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+@@ -1072,8 +1072,9 @@ struct amdgpu_job {
+ void *owner;
+ uint64_t fence_ctx; /* the fence_context this job uses */
+ bool vm_needs_flush;
+- unsigned vmid;
+ uint64_t vm_pd_addr;
++ unsigned vmid;
++ unsigned pasid;
+ uint32_t gds_base, gds_size;
+ uint32_t gws_base, gws_size;
+ uint32_t oa_base, oa_size;
+@@ -1851,7 +1852,7 @@ amdgpu_get_sdma_instance(struct amdgpu_ring *ring)
+ #define amdgpu_ring_set_wptr(r) (r)->funcs->set_wptr((r))
+ #define amdgpu_ring_emit_ib(r, ib, vmid, c) (r)->funcs->emit_ib((r), (ib), (vmid), (c))
+ #define amdgpu_ring_emit_pipeline_sync(r) (r)->funcs->emit_pipeline_sync((r))
+-#define amdgpu_ring_emit_vm_flush(r, vmid, addr) (r)->funcs->emit_vm_flush((r), (vmid), (addr))
++#define amdgpu_ring_emit_vm_flush(r, vmid, pasid, addr) (r)->funcs->emit_vm_flush((r), (vmid), (pasid), (addr))
+ #define amdgpu_ring_emit_fence(r, addr, seq, flags) (r)->funcs->emit_fence((r), (addr), (seq), (flags))
+ #define amdgpu_ring_emit_gds_switch(r, v, db, ds, wb, ws, ab, as) (r)->funcs->emit_gds_switch((r), (v), (db), (ds), (wb), (ws), (ab), (as))
+ #define amdgpu_ring_emit_hdp_flush(r) (r)->funcs->emit_hdp_flush((r))
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c
+index 01bfd79..6ecf8ad 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c
+@@ -241,6 +241,7 @@ static int amdgpu_vmid_grab_reserved_locked(struct amdgpu_vm *vm,
+ id->last_flush = NULL;
+ }
+ job->vmid = id - id_mgr->ids;
++ job->pasid = vm->pasid;
+ trace_amdgpu_vm_grab_id(vm, ring, job);
+ out:
+ return r;
+@@ -392,6 +393,7 @@ int amdgpu_vmid_grab(struct amdgpu_vm *vm, struct amdgpu_ring *ring,
+ list_move_tail(&id->list, &id_mgr->ids_lru);
+
+ job->vmid = id - id_mgr->ids;
++ job->pasid = vm->pasid;
+ trace_amdgpu_vm_grab_id(vm, ring, job);
+
+ error:
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h
+index 8651966..668a1ed 100755
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h
+@@ -127,7 +127,7 @@ struct amdgpu_ring_funcs {
+ uint64_t seq, unsigned flags);
+ void (*emit_pipeline_sync)(struct amdgpu_ring *ring);
+ void (*emit_vm_flush)(struct amdgpu_ring *ring, unsigned vmid,
+- uint64_t pd_addr);
++ unsigned pasid, uint64_t pd_addr);
+ void (*emit_hdp_flush)(struct amdgpu_ring *ring);
+ void (*emit_hdp_invalidate)(struct amdgpu_ring *ring);
+ void (*emit_gds_switch)(struct amdgpu_ring *ring, uint32_t vmid,
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+index 6670595..719964f 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+@@ -518,7 +518,8 @@ int amdgpu_vm_flush(struct amdgpu_ring *ring, struct amdgpu_job *job, bool need_
+ struct dma_fence *fence;
+
+ trace_amdgpu_vm_flush(ring, job->vmid, job->vm_pd_addr);
+- amdgpu_ring_emit_vm_flush(ring, job->vmid, job->vm_pd_addr);
++ amdgpu_ring_emit_vm_flush(ring, job->vmid, job->pasid,
++ job->vm_pd_addr);
+
+ r = amdgpu_fence_emit(ring, &fence);
+ if (r)
+diff --git a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
+index 3ea0be5..4c698201 100644
+--- a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
++++ b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
+@@ -880,7 +880,8 @@ static void cik_sdma_ring_emit_pipeline_sync(struct amdgpu_ring *ring)
+ * using sDMA (CIK).
+ */
+ static void cik_sdma_ring_emit_vm_flush(struct amdgpu_ring *ring,
+- unsigned vmid, uint64_t pd_addr)
++ unsigned vmid, unsigned pasid,
++ uint64_t pd_addr)
+ {
+ u32 extra_bits = (SDMA_POLL_REG_MEM_EXTRA_OP(0) |
+ SDMA_POLL_REG_MEM_EXTRA_FUNC(0)); /* always */
+diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
+index 9870d83..39acafb 100644
+--- a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
++++ b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
+@@ -2354,7 +2354,8 @@ static void gfx_v6_0_ring_emit_pipeline_sync(struct amdgpu_ring *ring)
+ }
+
+ static void gfx_v6_0_ring_emit_vm_flush(struct amdgpu_ring *ring,
+- unsigned vmid, uint64_t pd_addr)
++ unsigned vmid, unsigned pasid,
++ uint64_t pd_addr)
+ {
+ int usepfp = (ring->funcs->type == AMDGPU_RING_TYPE_GFX);
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
+index 9b52a68..965be87 100644
+--- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
++++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
+@@ -3239,7 +3239,8 @@ static void gfx_v7_0_ring_emit_pipeline_sync(struct amdgpu_ring *ring)
+ * using the CP (CIK).
+ */
+ static void gfx_v7_0_ring_emit_vm_flush(struct amdgpu_ring *ring,
+- unsigned vmid, uint64_t pd_addr)
++ unsigned vmid, unsigned pasid,
++ uint64_t pd_addr)
+ {
+ int usepfp = (ring->funcs->type == AMDGPU_RING_TYPE_GFX);
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
+index c3207af..e80d201 100644
+--- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
++++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
+@@ -6331,7 +6331,8 @@ static void gfx_v8_0_ring_emit_pipeline_sync(struct amdgpu_ring *ring)
+ }
+
+ static void gfx_v8_0_ring_emit_vm_flush(struct amdgpu_ring *ring,
+- unsigned vmid, uint64_t pd_addr)
++ unsigned vmid, unsigned pasid,
++ uint64_t pd_addr)
+ {
+ int usepfp = (ring->funcs->type == AMDGPU_RING_TYPE_GFX);
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
+index 896ce92..6c7b3f2 100644
+--- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
++++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
+@@ -3690,7 +3690,8 @@ static void gfx_v9_0_ring_emit_pipeline_sync(struct amdgpu_ring *ring)
+ }
+
+ static void gfx_v9_0_ring_emit_vm_flush(struct amdgpu_ring *ring,
+- unsigned vmid, uint64_t pd_addr)
++ unsigned vmid, unsigned pasid,
++ uint64_t pd_addr)
+ {
+ struct amdgpu_vmhub *hub = &ring->adev->vmhub[ring->funcs->vmhub];
+ int usepfp = (ring->funcs->type == AMDGPU_RING_TYPE_GFX);
+diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
+index 484abb9..2aa4591 100644
+--- a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
++++ b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
+@@ -859,7 +859,8 @@ static void sdma_v2_4_ring_emit_pipeline_sync(struct amdgpu_ring *ring)
+ * using sDMA (VI).
+ */
+ static void sdma_v2_4_ring_emit_vm_flush(struct amdgpu_ring *ring,
+- unsigned vmid, uint64_t pd_addr)
++ unsigned vmid, unsigned pasid,
++ uint64_t pd_addr)
+ {
+ amdgpu_ring_write(ring, SDMA_PKT_HEADER_OP(SDMA_OP_SRBM_WRITE) |
+ SDMA_PKT_SRBM_WRITE_HEADER_BYTE_EN(0xf));
+diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
+index 5dd13ea..44a77fb 100644
+--- a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
++++ b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
+@@ -1125,7 +1125,8 @@ static void sdma_v3_0_ring_emit_pipeline_sync(struct amdgpu_ring *ring)
+ * using sDMA (VI).
+ */
+ static void sdma_v3_0_ring_emit_vm_flush(struct amdgpu_ring *ring,
+- unsigned vmid, uint64_t pd_addr)
++ unsigned vmid, unsigned pasid,
++ uint64_t pd_addr)
+ {
+ amdgpu_ring_write(ring, SDMA_PKT_HEADER_OP(SDMA_OP_SRBM_WRITE) |
+ SDMA_PKT_SRBM_WRITE_HEADER_BYTE_EN(0xf));
+diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
+index f9b4578..c54905d 100644
+--- a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
++++ b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
+@@ -1133,7 +1133,8 @@ static void sdma_v4_0_ring_emit_pipeline_sync(struct amdgpu_ring *ring)
+ * using sDMA (VEGA10).
+ */
+ static void sdma_v4_0_ring_emit_vm_flush(struct amdgpu_ring *ring,
+- unsigned vmid, uint64_t pd_addr)
++ unsigned vmid, unsigned pasid,
++ uint64_t pd_addr)
+ {
+ struct amdgpu_vmhub *hub = &ring->adev->vmhub[ring->funcs->vmhub];
+ uint32_t req = ring->adev->gmc.gmc_funcs->get_invalidate_req(vmid);
+diff --git a/drivers/gpu/drm/amd/amdgpu/si_dma.c b/drivers/gpu/drm/amd/amdgpu/si_dma.c
+index 54e7a12..697475a 100644
+--- a/drivers/gpu/drm/amd/amdgpu/si_dma.c
++++ b/drivers/gpu/drm/amd/amdgpu/si_dma.c
+@@ -473,7 +473,8 @@ static void si_dma_ring_emit_pipeline_sync(struct amdgpu_ring *ring)
+ * using sDMA (VI).
+ */
+ static void si_dma_ring_emit_vm_flush(struct amdgpu_ring *ring,
+- unsigned vmid, uint64_t pd_addr)
++ unsigned vmid, unsigned pasid,
++ uint64_t pd_addr)
+ {
+ amdgpu_ring_write(ring, DMA_PACKET(DMA_PACKET_SRBM_WRITE, 0, 0, 0, 0));
+ if (vmid < 8)
+diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
+index b31c333..8c6e346 100644
+--- a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
++++ b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
+@@ -1060,7 +1060,8 @@ static void uvd_v6_0_enc_ring_emit_ib(struct amdgpu_ring *ring,
+ }
+
+ static void uvd_v6_0_ring_emit_vm_flush(struct amdgpu_ring *ring,
+- unsigned vmid, uint64_t pd_addr)
++ unsigned vmid, unsigned pasid,
++ uint64_t pd_addr)
+ {
+ uint32_t reg;
+
+@@ -1127,7 +1128,8 @@ static void uvd_v6_0_enc_ring_insert_end(struct amdgpu_ring *ring)
+ }
+
+ static void uvd_v6_0_enc_ring_emit_vm_flush(struct amdgpu_ring *ring,
+- unsigned int vmid, uint64_t pd_addr)
++ unsigned int vmid, unsigned pasid,
++ uint64_t pd_addr)
+ {
+ amdgpu_ring_write(ring, HEVC_ENC_CMD_UPDATE_PTB);
+ amdgpu_ring_write(ring, vmid);
+diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c
+index 4c19c96..44f1a3d 100644
+--- a/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c
++++ b/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c
+@@ -1291,7 +1291,8 @@ static void uvd_v7_0_vm_reg_wait(struct amdgpu_ring *ring,
+ }
+
+ static void uvd_v7_0_ring_emit_vm_flush(struct amdgpu_ring *ring,
+- unsigned vmid, uint64_t pd_addr)
++ unsigned vmid, unsigned pasid,
++ uint64_t pd_addr)
+ {
+ struct amdgpu_vmhub *hub = &ring->adev->vmhub[ring->funcs->vmhub];
+ uint32_t req = ring->adev->gmc.gmc_funcs->get_invalidate_req(vmid);
+@@ -1343,7 +1344,8 @@ static void uvd_v7_0_enc_ring_insert_end(struct amdgpu_ring *ring)
+ }
+
+ static void uvd_v7_0_enc_ring_emit_vm_flush(struct amdgpu_ring *ring,
+- unsigned int vmid, uint64_t pd_addr)
++ unsigned int vmid, unsigned pasid,
++ uint64_t pd_addr)
+ {
+ struct amdgpu_vmhub *hub = &ring->adev->vmhub[ring->funcs->vmhub];
+ uint32_t req = ring->adev->gmc.gmc_funcs->get_invalidate_req(vmid);
+diff --git a/drivers/gpu/drm/amd/amdgpu/vce_v3_0.c b/drivers/gpu/drm/amd/amdgpu/vce_v3_0.c
+index bb5ec09..c6e9473 100644
+--- a/drivers/gpu/drm/amd/amdgpu/vce_v3_0.c
++++ b/drivers/gpu/drm/amd/amdgpu/vce_v3_0.c
+@@ -844,7 +844,8 @@ static void vce_v3_0_ring_emit_ib(struct amdgpu_ring *ring,
+ }
+
+ static void vce_v3_0_emit_vm_flush(struct amdgpu_ring *ring,
+- unsigned int vmid, uint64_t pd_addr)
++ unsigned int vmid, unsigned pasid,
++ uint64_t pd_addr)
+ {
+ amdgpu_ring_write(ring, VCE_CMD_UPDATE_PTB);
+ amdgpu_ring_write(ring, vmid);
+diff --git a/drivers/gpu/drm/amd/amdgpu/vce_v4_0.c b/drivers/gpu/drm/amd/amdgpu/vce_v4_0.c
+index 071fb17..a54e888 100755
+--- a/drivers/gpu/drm/amd/amdgpu/vce_v4_0.c
++++ b/drivers/gpu/drm/amd/amdgpu/vce_v4_0.c
+@@ -965,7 +965,8 @@ static void vce_v4_0_ring_insert_end(struct amdgpu_ring *ring)
+ }
+
+ static void vce_v4_0_emit_vm_flush(struct amdgpu_ring *ring,
+- unsigned int vmid, uint64_t pd_addr)
++ unsigned int vmid, unsigned pasid,
++ uint64_t pd_addr)
+ {
+ struct amdgpu_vmhub *hub = &ring->adev->vmhub[ring->funcs->vmhub];
+ uint32_t req = ring->adev->gmc.gmc_funcs->get_invalidate_req(vmid);
+diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c b/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c
+index 6e8dad5..1c44606 100644
+--- a/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c
++++ b/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c
+@@ -910,7 +910,8 @@ static void vcn_v1_0_dec_vm_reg_wait(struct amdgpu_ring *ring,
+ }
+
+ static void vcn_v1_0_dec_ring_emit_vm_flush(struct amdgpu_ring *ring,
+- unsigned vmid, uint64_t pd_addr)
++ unsigned vmid, unsigned pasid,
++ uint64_t pd_addr)
+ {
+ struct amdgpu_vmhub *hub = &ring->adev->vmhub[ring->funcs->vmhub];
+ uint32_t req = ring->adev->gmc.gmc_funcs->get_invalidate_req(vmid);
+@@ -1043,7 +1044,8 @@ static void vcn_v1_0_enc_ring_emit_ib(struct amdgpu_ring *ring,
+ }
+
+ static void vcn_v1_0_enc_ring_emit_vm_flush(struct amdgpu_ring *ring,
+- unsigned int vmid, uint64_t pd_addr)
++ unsigned int vmid, unsigned pasid,
++ uint64_t pd_addr)
+ {
+ struct amdgpu_vmhub *hub = &ring->adev->vmhub[ring->funcs->vmhub];
+ uint32_t req = ring->adev->gmc.gmc_funcs->get_invalidate_req(vmid);
+--
+2.7.4
+