aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1804-drm-amdgpu-move-amdgpu_cs_sysvm_access_required-into.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1804-drm-amdgpu-move-amdgpu_cs_sysvm_access_required-into.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1804-drm-amdgpu-move-amdgpu_cs_sysvm_access_required-into.patch154
1 files changed, 154 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1804-drm-amdgpu-move-amdgpu_cs_sysvm_access_required-into.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1804-drm-amdgpu-move-amdgpu_cs_sysvm_access_required-into.patch
new file mode 100644
index 00000000..52395b01
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1804-drm-amdgpu-move-amdgpu_cs_sysvm_access_required-into.patch
@@ -0,0 +1,154 @@
+From 71520c3535ad9866949ea9a1c789dd9963790da6 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com>
+Date: Wed, 6 Sep 2017 16:15:28 +0200
+Subject: [PATCH 1804/4131] drm/amdgpu: move amdgpu_cs_sysvm_access_required
+ into find_mapping
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+When we need to find the mapping we need sysvm access anyway.
+
+Signed-off-by: Christian König <christian.koenig@amd.com>
+Acked-by: Leo Liu <leo.liu@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu.h | 8 ++---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 64 ++++++++++++----------------------
+ 2 files changed, 26 insertions(+), 46 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+index 29a93ae..5bf1051 100755
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+@@ -184,6 +184,7 @@ struct amdgpu_irq_src;
+ struct amdgpu_fpriv;
+ struct kfd_vm_fault_info;
+ struct amdgpu_mn;
++struct amdgpu_bo_va_mapping;
+
+ enum amdgpu_cp_irq {
+ AMDGPU_CP_IRQ_GFX_EOP = 0,
+@@ -1979,10 +1980,9 @@ static inline int amdgpu_acpi_init(struct amdgpu_device *adev) { return 0; }
+ static inline void amdgpu_acpi_fini(struct amdgpu_device *adev) { }
+ #endif
+
+-struct amdgpu_bo_va_mapping *
+-amdgpu_cs_find_mapping(struct amdgpu_cs_parser *parser,
+- uint64_t addr, struct amdgpu_bo **bo);
+-int amdgpu_cs_sysvm_access_required(struct amdgpu_cs_parser *parser);
++int amdgpu_cs_find_mapping(struct amdgpu_cs_parser *parser,
++ uint64_t addr, struct amdgpu_bo **bo,
++ struct amdgpu_bo_va_mapping **mapping);
+
+ #if defined(CONFIG_DRM_AMD_DC)
+ int amdgpu_dm_display_resume(struct amdgpu_device *adev );
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+index 27e607c..447a423 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+@@ -967,11 +967,11 @@ static int amdgpu_cs_ib_fill(struct amdgpu_device *adev,
+ uint64_t offset;
+ uint8_t *kptr;
+
+- m = amdgpu_cs_find_mapping(parser, chunk_ib->va_start,
+- &aobj);
+- if (!aobj) {
++ r = amdgpu_cs_find_mapping(parser, chunk_ib->va_start,
++ &aobj, &m);
++ if (r) {
+ DRM_ERROR("IB va_start is invalid\n");
+- return -EINVAL;
++ return r;
+ }
+
+ if ((chunk_ib->va_start + chunk_ib->ib_bytes) >
+@@ -1528,15 +1528,16 @@ int amdgpu_cs_wait_fences_ioctl(struct drm_device *dev, void *data,
+ * virtual memory address. Returns allocation structure when found, NULL
+ * otherwise.
+ */
+-struct amdgpu_bo_va_mapping *
+-amdgpu_cs_find_mapping(struct amdgpu_cs_parser *parser,
+- uint64_t addr, struct amdgpu_bo **bo)
++int amdgpu_cs_find_mapping(struct amdgpu_cs_parser *parser,
++ uint64_t addr, struct amdgpu_bo **bo,
++ struct amdgpu_bo_va_mapping **map)
+ {
+ struct amdgpu_bo_va_mapping *mapping;
+ unsigned i;
++ int r;
+
+ if (!parser->bo_list)
+- return NULL;
++ return 0;
+
+ addr /= AMDGPU_GPU_PAGE_SIZE;
+
+@@ -1553,7 +1554,8 @@ amdgpu_cs_find_mapping(struct amdgpu_cs_parser *parser,
+ continue;
+
+ *bo = lobj->bo_va->base.bo;
+- return mapping;
++ *map = mapping;
++ goto found;
+ }
+
+ list_for_each_entry(mapping, &lobj->bo_va->invalids, list) {
+@@ -1562,44 +1564,22 @@ amdgpu_cs_find_mapping(struct amdgpu_cs_parser *parser,
+ continue;
+
+ *bo = lobj->bo_va->base.bo;
+- return mapping;
++ *map = mapping;
++ goto found;
+ }
+ }
+
+- return NULL;
+-}
++ return -EINVAL;
+
+-/**
+- * amdgpu_cs_sysvm_access_required - make BOs accessible by the system VM
+- *
+- * @parser: command submission parser context
+- *
+- * Helper for UVD/VCE VM emulation, make sure BOs are accessible by the system VM.
+- */
+-int amdgpu_cs_sysvm_access_required(struct amdgpu_cs_parser *parser)
+-{
+- unsigned i;
+- int r;
++found:
++ r = amdgpu_ttm_bind(&(*bo)->tbo, &(*bo)->tbo.mem);
++ if (unlikely(r))
++ return r;
+
+- if (!parser->bo_list)
++ if ((*bo)->flags & AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS)
+ return 0;
+
+- for (i = 0; i < parser->bo_list->num_entries; i++) {
+- struct amdgpu_bo *bo = parser->bo_list->array[i].robj;
+-
+- r = amdgpu_ttm_bind(&bo->tbo, &bo->tbo.mem);
+- if (unlikely(r))
+- return r;
+-
+- if (bo->flags & AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS)
+- continue;
+-
+- bo->flags |= AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS;
+- amdgpu_ttm_placement_from_domain(bo, bo->allowed_domains);
+- r = ttm_bo_validate(&bo->tbo, &bo->placement, false, false);
+- if (unlikely(r))
+- return r;
+- }
+-
+- return 0;
++ (*bo)->flags |= AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS;
++ amdgpu_ttm_placement_from_domain(*bo, (*bo)->allowed_domains);
++ return ttm_bo_validate(&(*bo)->tbo, &(*bo)->placement, false, false);
+ }
+--
+2.7.4
+