diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/1530-drm-amdkfd-Replace-kgd_mem-with-amdgpu_bo-for-kernel.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.14.71/1530-drm-amdkfd-Replace-kgd_mem-with-amdgpu_bo-for-kernel.patch | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/1530-drm-amdkfd-Replace-kgd_mem-with-amdgpu_bo-for-kernel.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/1530-drm-amdkfd-Replace-kgd_mem-with-amdgpu_bo-for-kernel.patch new file mode 100644 index 00000000..a64f4bb6 --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/1530-drm-amdkfd-Replace-kgd_mem-with-amdgpu_bo-for-kernel.patch @@ -0,0 +1,121 @@ +From f50d3c82752c939c8b65abff3319f18f6877b092 Mon Sep 17 00:00:00 2001 +From: Yong Zhao <yong.zhao@amd.com> +Date: Tue, 4 Oct 2016 16:03:16 -0400 +Subject: [PATCH 1530/4131] drm/amdkfd: Replace kgd_mem with amdgpu_bo for + kernel pinned gtt mem + +Change-Id: I35507c8898b672039ae0c8fdc5285c215f366a92 +Signed-off-by: Yong Zhao <yong.zhao@amd.com> +Signed-off-by: kalyan alle <kalyan.alle@amd.com> + + Conflicts: + drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c | 47 +++++++++++++++--------------- + 1 file changed, 23 insertions(+), 24 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c +index f18cbfa..e721590 100755 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c +@@ -342,19 +342,17 @@ int alloc_gtt_mem(struct kgd_dev *kgd, size_t size, + void **cpu_ptr) + { + struct amdgpu_device *adev = (struct amdgpu_device *)kgd; +- struct kgd_mem **mem = (struct kgd_mem **) mem_obj; ++ struct amdgpu_bo *bo = NULL; + int r; ++ uint64_t gpu_addr_tmp = 0; ++ void *cpu_ptr_tmp = NULL; + + BUG_ON(kgd == NULL); + BUG_ON(gpu_addr == NULL); + BUG_ON(cpu_ptr == NULL); + +- *mem = kmalloc(sizeof(struct kgd_mem), GFP_KERNEL); +- if ((*mem) == NULL) +- return -ENOMEM; +- + r = amdgpu_bo_create(adev, size, PAGE_SIZE, true, AMDGPU_GEM_DOMAIN_GTT, +- AMDGPU_GEM_CREATE_CPU_GTT_USWC, NULL, NULL, 0, &(*mem)->bo); ++ AMDGPU_GEM_CREATE_CPU_GTT_USWC, NULL, NULL, &bo); + if (r) { + dev_err(adev->dev, + "failed to allocate BO for amdkfd (%d)\n", r); +@@ -362,54 +360,55 @@ int alloc_gtt_mem(struct kgd_dev *kgd, size_t size, + } + + /* map the buffer */ +- r = amdgpu_bo_reserve((*mem)->data1.bo, true); ++ r = amdgpu_bo_reserve(bo, true); + if (r) { + dev_err(adev->dev, "(%d) failed to reserve bo for amdkfd\n", r); + goto allocate_mem_reserve_bo_failed; + } + +- r = amdgpu_bo_pin((*mem)->data1.bo, AMDGPU_GEM_DOMAIN_GTT, +- &(*mem)->data1.gpu_addr); ++ r = amdgpu_bo_pin(bo, AMDGPU_GEM_DOMAIN_GTT, ++ &gpu_addr_tmp); + if (r) { + dev_err(adev->dev, "(%d) failed to pin bo for amdkfd\n", r); + goto allocate_mem_pin_bo_failed; + } +- *gpu_addr = (*mem)->data1.gpu_addr; + +- r = amdgpu_bo_kmap((*mem)->data1.bo, &(*mem)->data1.cpu_ptr); ++ r = amdgpu_bo_kmap(bo, &cpu_ptr_tmp); + if (r) { + dev_err(adev->dev, + "(%d) failed to map bo to kernel for amdkfd\n", r); + goto allocate_mem_kmap_bo_failed; + } +- *cpu_ptr = (*mem)->data1.cpu_ptr; + +- amdgpu_bo_unreserve((*mem)->data1.bo); ++ *mem_obj = bo; ++ *gpu_addr = gpu_addr_tmp; ++ *cpu_ptr = cpu_ptr_tmp; ++ ++ amdgpu_bo_unreserve(bo); + + return 0; + + allocate_mem_kmap_bo_failed: +- amdgpu_bo_unpin((*mem)->data1.bo); ++ amdgpu_bo_unpin(bo); + allocate_mem_pin_bo_failed: +- amdgpu_bo_unreserve((*mem)->data1.bo); ++ amdgpu_bo_unreserve(bo); + allocate_mem_reserve_bo_failed: +- amdgpu_bo_unref(&(*mem)->data1.bo); ++ amdgpu_bo_unref(&bo); + + return r; + } + + void free_gtt_mem(struct kgd_dev *kgd, void *mem_obj) + { +- struct kgd_mem *mem = (struct kgd_mem *) mem_obj; ++ struct amdgpu_bo *bo = (struct amdgpu_bo *) mem_obj; + +- BUG_ON(mem == NULL); ++ BUG_ON(bo == NULL); + +- amdgpu_bo_reserve(mem->data1.bo, true); +- amdgpu_bo_kunmap(mem->data1.bo); +- amdgpu_bo_unpin(mem->data1.bo); +- amdgpu_bo_unreserve(mem->data1.bo); +- amdgpu_bo_unref(&(mem->data1.bo)); +- kfree(mem); ++ amdgpu_bo_reserve(bo, true); ++ amdgpu_bo_kunmap(bo); ++ amdgpu_bo_unpin(bo); ++ amdgpu_bo_unreserve(bo); ++ amdgpu_bo_unref(&(bo)); + } + + void get_local_mem_info(struct kgd_dev *kgd, +-- +2.7.4 + |