aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.19.8/1667-drm-amdgpu-use-the-new-VM-backend-for-PDEs.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/1667-drm-amdgpu-use-the-new-VM-backend-for-PDEs.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.19.8/1667-drm-amdgpu-use-the-new-VM-backend-for-PDEs.patch141
1 files changed, 141 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/1667-drm-amdgpu-use-the-new-VM-backend-for-PDEs.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/1667-drm-amdgpu-use-the-new-VM-backend-for-PDEs.patch
new file mode 100644
index 00000000..93f4da66
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/1667-drm-amdgpu-use-the-new-VM-backend-for-PDEs.patch
@@ -0,0 +1,141 @@
+From 73ab8b0ef7ebde8d7a1e2112d47539a138854165 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com>
+Date: Mon, 18 Mar 2019 14:26:24 +0100
+Subject: [PATCH 1667/2940] drm/amdgpu: use the new VM backend for PDEs
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+And remove the existing code when it is unused.
+
+Signed-off-by: Christian König <christian.koenig@amd.com>
+Reviewed-by: Chunming Zhou <david1.zhou@amd.com>
+Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 74 +++++---------------------
+ 1 file changed, 14 insertions(+), 60 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+index fb3efd94bfd7..b139c348e952 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+@@ -1295,10 +1295,10 @@ static void amdgpu_vm_update_func(struct amdgpu_vm_update_params *params,
+ *
+ * Makes sure the requested entry in parent is up to date.
+ */
+-static void amdgpu_vm_update_pde(struct amdgpu_vm_update_params *params,
+- struct amdgpu_vm *vm,
+- struct amdgpu_vm_pt *parent,
+- struct amdgpu_vm_pt *entry)
++static int amdgpu_vm_update_pde(struct amdgpu_vm_update_params *params,
++ struct amdgpu_vm *vm,
++ struct amdgpu_vm_pt *parent,
++ struct amdgpu_vm_pt *entry)
+ {
+ struct amdgpu_bo *bo = parent->base.bo, *pbo;
+ uint64_t pde, pt, flags;
+@@ -1310,7 +1310,7 @@ static void amdgpu_vm_update_pde(struct amdgpu_vm_update_params *params,
+ level += params->adev->vm_manager.root_level;
+ amdgpu_gmc_get_pde_for_bo(entry->base.bo, level, &pt, &flags);
+ pde = (entry - parent->entries) * 8;
+- amdgpu_vm_update_func(params, bo, pde, pt, 1, 0, flags);
++ return vm->update_funcs->update(params, bo, pde, pt, 1, 0, flags);
+ }
+
+ /*
+@@ -1347,33 +1347,18 @@ int amdgpu_vm_update_directories(struct amdgpu_device *adev,
+ struct amdgpu_vm *vm)
+ {
+ struct amdgpu_vm_update_params params;
+- struct amdgpu_job *job;
+- unsigned ndw = 0;
+- int r = 0;
++ int r;
+
+ if (list_empty(&vm->relocated))
+ return 0;
+
+-restart:
+ memset(&params, 0, sizeof(params));
+ params.adev = adev;
++ params.vm = vm;
+
+- if (vm->use_cpu_for_update) {
+- r = amdgpu_bo_sync_wait(vm->root.base.bo,
+- AMDGPU_FENCE_OWNER_VM, true);
+- if (unlikely(r))
+- return r;
+-
+- params.func = amdgpu_vm_cpu_set_ptes;
+- } else {
+- ndw = 512;
+- r = amdgpu_job_alloc_with_ib(adev, ndw * 4, &job);
+- if (r)
+- return r;
+-
+- params.ib = &job->ibs[0];
+- params.func = amdgpu_vm_do_set_ptes;
+- }
++ r = vm->update_funcs->prepare(&params, AMDGPU_FENCE_OWNER_VM, NULL);
++ if (r)
++ return r;
+
+ while (!list_empty(&vm->relocated)) {
+ struct amdgpu_vm_pt *pt, *entry;
+@@ -1386,49 +1371,18 @@ int amdgpu_vm_update_directories(struct amdgpu_device *adev,
+ if (!pt)
+ continue;
+
+- amdgpu_vm_update_pde(&params, vm, pt, entry);
+-
+- if (!vm->use_cpu_for_update &&
+- (ndw - params.ib->length_dw) < 32)
+- break;
+- }
+-
+- if (vm->use_cpu_for_update) {
+- /* Flush HDP */
+- mb();
+- amdgpu_asic_flush_hdp(adev, NULL);
+- } else if (params.ib->length_dw == 0) {
+- amdgpu_job_free(job);
+- } else {
+- struct amdgpu_bo *root = vm->root.base.bo;
+- struct amdgpu_ring *ring;
+- struct dma_fence *fence;
+-
+- ring = container_of(vm->entity.rq->sched, struct amdgpu_ring,
+- sched);
+-
+- amdgpu_ring_pad_ib(ring, params.ib);
+- amdgpu_sync_resv(adev, &job->sync, root->tbo.resv,
+- AMDGPU_FENCE_OWNER_VM, false);
+- WARN_ON(params.ib->length_dw > ndw);
+- r = amdgpu_job_submit(job, &vm->entity, AMDGPU_FENCE_OWNER_VM,
+- &fence);
++ r = amdgpu_vm_update_pde(&params, vm, pt, entry);
+ if (r)
+ goto error;
+-
+- amdgpu_bo_fence(root, fence, true);
+- dma_fence_put(vm->last_update);
+- vm->last_update = fence;
+ }
+
+- if (!list_empty(&vm->relocated))
+- goto restart;
+-
++ r = vm->update_funcs->commit(&params, &vm->last_update);
++ if (r)
++ goto error;
+ return 0;
+
+ error:
+ amdgpu_vm_invalidate_pds(adev, vm);
+- amdgpu_job_free(job);
+ return r;
+ }
+
+--
+2.17.1
+