diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/1691-drm-amdgpu-move-VM-table-mapping-into-the-backend-as.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.19.8/1691-drm-amdgpu-move-VM-table-mapping-into-the-backend-as.patch | 166 |
1 files changed, 166 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/1691-drm-amdgpu-move-VM-table-mapping-into-the-backend-as.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/1691-drm-amdgpu-move-VM-table-mapping-into-the-backend-as.patch new file mode 100644 index 00000000..27942e9d --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/1691-drm-amdgpu-move-VM-table-mapping-into-the-backend-as.patch @@ -0,0 +1,166 @@ +From 3ef41069cb9052088e5adf115fb74b1be54ac978 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com> +Date: Thu, 21 Mar 2019 16:34:18 +0100 +Subject: [PATCH 1691/2940] drm/amdgpu: move VM table mapping into the backend + as well +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Clean that up further and also fix another case where the BO +wasn't kmapped for CPU based updates. + +Signed-off-by: Christian König <christian.koenig@amd.com> +Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 30 +++------------------ + drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h | 2 +- + drivers/gpu/drm/amd/amdgpu/amdgpu_vm_cpu.c | 11 ++++++++ + drivers/gpu/drm/amd/amdgpu/amdgpu_vm_sdma.c | 20 ++++++++++++++ + 4 files changed, 36 insertions(+), 27 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +index 8492a38ffb37..530a42d914e7 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +@@ -639,17 +639,7 @@ int amdgpu_vm_validate_pt_bos(struct amdgpu_device *adev, struct amdgpu_vm *vm, + if (bo->tbo.type != ttm_bo_type_kernel) { + amdgpu_vm_bo_moved(bo_base); + } else { +- if (vm->use_cpu_for_update) +- r = amdgpu_bo_kmap(bo, NULL); +- else +- r = amdgpu_ttm_alloc_gart(&bo->tbo); +- if (r) +- break; +- if (bo->shadow) { +- r = amdgpu_ttm_alloc_gart(&bo->shadow->tbo); +- if (r) +- break; +- } ++ vm->update_funcs->map_table(bo); + amdgpu_vm_bo_relocated(bo_base); + } + } +@@ -731,22 +721,16 @@ static int amdgpu_vm_clear_bo(struct amdgpu_device *adev, + if (r) + return r; + +- r = amdgpu_ttm_alloc_gart(&bo->tbo); +- if (r) +- return r; +- + if (bo->shadow) { + r = ttm_bo_validate(&bo->shadow->tbo, &bo->shadow->placement, + &ctx); + if (r) + return r; +- +- r = amdgpu_ttm_alloc_gart(&bo->shadow->tbo); +- if (r) +- return r; +- + } + ++ r = vm->update_funcs->map_table(bo); ++ if (r) ++ return r; + memset(¶ms, 0, sizeof(params)); + params.adev = adev; + params.vm = vm; +@@ -857,12 +841,6 @@ static int amdgpu_vm_alloc_pts(struct amdgpu_device *adev, + if (r) + return r; + +- if (vm->use_cpu_for_update) { +- r = amdgpu_bo_kmap(pt, NULL); +- if (r) +- goto error_free_pt; +- } +- + /* Keep a reference to the root directory to avoid + * freeing them up in the wrong order. + */ +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h +index 0f8d4bcc71ab..65e2f0c3ebf6 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h +@@ -215,7 +215,7 @@ struct amdgpu_vm_update_params { + }; + + struct amdgpu_vm_update_funcs { +- ++ int (*map_table)(struct amdgpu_bo *bo); + int (*prepare)(struct amdgpu_vm_update_params *p, void * owner, + struct dma_fence *exclusive); + int (*update)(struct amdgpu_vm_update_params *p, +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm_cpu.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm_cpu.c +index 9d53982021de..5222d165abfc 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm_cpu.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm_cpu.c +@@ -24,6 +24,16 @@ + #include "amdgpu_object.h" + #include "amdgpu_trace.h" + ++/** ++ * amdgpu_vm_cpu_map_table - make sure new PDs/PTs are kmapped ++ * ++ * @table: newly allocated or validated PD/PT ++ */ ++static int amdgpu_vm_cpu_map_table(struct amdgpu_bo *table) ++{ ++ return amdgpu_bo_kmap(table, NULL); ++} ++ + /** + * amdgpu_vm_cpu_prepare - prepare page table update with the CPU + * +@@ -110,6 +120,7 @@ static int amdgpu_vm_cpu_commit(struct amdgpu_vm_update_params *p, + } + + const struct amdgpu_vm_update_funcs amdgpu_vm_cpu_funcs = { ++ .map_table = amdgpu_vm_cpu_map_table, + .prepare = amdgpu_vm_cpu_prepare, + .update = amdgpu_vm_cpu_update, + .commit = amdgpu_vm_cpu_commit +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm_sdma.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm_sdma.c +index e4bacdb44c68..4bccd69fe30d 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm_sdma.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm_sdma.c +@@ -28,6 +28,25 @@ + #define AMDGPU_VM_SDMA_MIN_NUM_DW 256u + #define AMDGPU_VM_SDMA_MAX_NUM_DW (16u * 1024u) + ++/** ++ * amdgpu_vm_sdma_map_table - make sure new PDs/PTs are GTT mapped ++ * ++ * @table: newly allocated or validated PD/PT ++ */ ++static int amdgpu_vm_sdma_map_table(struct amdgpu_bo *table) ++{ ++ int r; ++ ++ r = amdgpu_ttm_alloc_gart(&table->tbo); ++ if (r) ++ return r; ++ ++ if (table->shadow) ++ r = amdgpu_ttm_alloc_gart(&table->shadow->tbo); ++ ++ return r; ++} ++ + /** + * amdgpu_vm_sdma_prepare - prepare SDMA command submission + * +@@ -242,6 +261,7 @@ static int amdgpu_vm_sdma_update(struct amdgpu_vm_update_params *p, + } + + const struct amdgpu_vm_update_funcs amdgpu_vm_sdma_funcs = { ++ .map_table = amdgpu_vm_sdma_map_table, + .prepare = amdgpu_vm_sdma_prepare, + .update = amdgpu_vm_sdma_update, + .commit = amdgpu_vm_sdma_commit +-- +2.17.1 + |