diff options
Diffstat (limited to 'meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1595-drm-amdgpu-kfd2kgd-Add-copy_mem_to_mem-interface.patch')
-rw-r--r-- | meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1595-drm-amdgpu-kfd2kgd-Add-copy_mem_to_mem-interface.patch | 181 |
1 files changed, 0 insertions, 181 deletions
diff --git a/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1595-drm-amdgpu-kfd2kgd-Add-copy_mem_to_mem-interface.patch b/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1595-drm-amdgpu-kfd2kgd-Add-copy_mem_to_mem-interface.patch deleted file mode 100644 index 36ff7415..00000000 --- a/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1595-drm-amdgpu-kfd2kgd-Add-copy_mem_to_mem-interface.patch +++ /dev/null @@ -1,181 +0,0 @@ -From 142e5801ce8fc7ca8649a94b4d04bd4f6838bb68 Mon Sep 17 00:00:00 2001 -From: Harish Kasiviswanathan <Harish.Kasiviswanathan@amd.com> -Date: Mon, 23 Jan 2017 11:17:34 -0500 -Subject: [PATCH 1595/4131] drm/amdgpu: kfd2kgd: Add copy_mem_to_mem interface - -Change-Id: Ia0b7ad212f6f6f480d080ec63bf0d8765cc7863b -Signed-off-by: Harish Kasiviswanathan <Harish.Kasiviswanathan@amd.com> ---- - drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h | 4 ++ - drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c | 3 +- - drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c | 3 +- - drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 88 +++++++++++++++++++++++ - drivers/gpu/drm/amd/include/kgd_kfd_interface.h | 6 ++ - 5 files changed, 102 insertions(+), 2 deletions(-) - -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h -index db4f75c..6476491 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h -@@ -136,6 +136,10 @@ int amdgpu_amdkfd_submit_ib(struct kgd_dev *kgd, enum kgd_engine_type engine, - int amdgpu_amdkfd_gpuvm_restore_process_bos(void *master_vm); - struct kfd2kgd_calls *amdgpu_amdkfd_gfx_7_get_functions(void); - struct kfd2kgd_calls *amdgpu_amdkfd_gfx_8_0_get_functions(void); -+int amdgpu_amdkfd_copy_mem_to_mem(struct kgd_dev *kgd, struct kgd_mem *src_mem, -+ uint64_t src_offset, struct kgd_mem *dst_mem, -+ uint64_t dest_offset, uint64_t size, struct fence **f, -+ uint64_t *actual_size); - - /* Shared API */ - int map_bo(struct amdgpu_device *rdev, uint64_t va, void *vm, -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c -index cebf03a..ae860ec 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c -@@ -230,7 +230,8 @@ static const struct kfd2kgd_calls kfd2kgd = { - .get_vm_fault_info = amdgpu_amdkfd_gpuvm_get_vm_fault_info, - .submit_ib = amdgpu_amdkfd_submit_ib, - .get_tile_config = amdgpu_amdkfd_get_tile_config, -- .restore_process_bos = amdgpu_amdkfd_gpuvm_restore_process_bos -+ .restore_process_bos = amdgpu_amdkfd_gpuvm_restore_process_bos, -+ .copy_mem_to_mem = amdgpu_amdkfd_copy_mem_to_mem - }; - - struct kfd2kgd_calls *amdgpu_amdkfd_gfx_7_get_functions() -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c -index da6a243..fbea6a6 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c -@@ -209,7 +209,8 @@ static const struct kfd2kgd_calls kfd2kgd = { - .get_vm_fault_info = amdgpu_amdkfd_gpuvm_get_vm_fault_info, - .submit_ib = amdgpu_amdkfd_submit_ib, - .get_tile_config = amdgpu_amdkfd_get_tile_config, -- .restore_process_bos = amdgpu_amdkfd_gpuvm_restore_process_bos -+ .restore_process_bos = amdgpu_amdkfd_gpuvm_restore_process_bos, -+ .copy_mem_to_mem = amdgpu_amdkfd_copy_mem_to_mem - }; - - struct kfd2kgd_calls *amdgpu_amdkfd_gfx_8_0_get_functions() -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c -index 3f2bc2f..50af53f 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c -@@ -2250,3 +2250,91 @@ int amdgpu_amdkfd_gpuvm_restore_process_bos(void *m_vm) - kfree(pd_bo_list); - return ret; - } -+ -+int amdgpu_amdkfd_copy_mem_to_mem(struct kgd_dev *kgd, struct kgd_mem *src_mem, -+ uint64_t src_offset, struct kgd_mem *dst_mem, -+ uint64_t dst_offset, uint64_t size, -+ struct fence **f, uint64_t *actual_size) -+{ -+ struct amdgpu_device *adev = NULL; -+ struct ttm_mem_reg *src = NULL, *dst = NULL; -+ struct amdgpu_ring *ring; -+ struct ww_acquire_ctx ticket; -+ struct list_head list; -+ struct amdgpu_bo_list_entry *entry; -+ uint64_t src_start, dst_start; -+ int r; -+ -+ if (!kgd || !src_mem || !dst_mem) -+ return -EINVAL; -+ -+ if (actual_size) -+ *actual_size = 0; -+ -+ adev = get_amdgpu_device(kgd); -+ src = &src_mem->bo->tbo.mem; -+ dst = &dst_mem->bo->tbo.mem; -+ -+ ring = adev->mman.buffer_funcs_ring; -+ -+ INIT_LIST_HEAD(&list); -+ entry = &src_mem->bo_list_entry; -+ list_add_tail(&entry->tv.head, &list); -+ entry = &dst_mem->bo_list_entry; -+ list_add_tail(&entry->tv.head, &list); -+ -+ r = ttm_eu_reserve_buffers(&ticket, &list, false, NULL); -+ if (r) { -+ pr_err("Copy buffer failed. Unable to reserve bo (%d)\n", r); -+ return r; -+ } -+ -+ src_start = (src->start << PAGE_SHIFT) + src_offset; -+ dst_start = (dst->start << PAGE_SHIFT) + dst_offset; -+ -+ switch (src->mem_type) { -+ case TTM_PL_VRAM: -+ src_start += adev->mc.vram_start; -+ break; -+ case TTM_PL_TT: -+ src_start += adev->mc.gtt_start; -+ break; -+ default: -+ DRM_ERROR("Unknown placement %d\n", src->mem_type); -+ r = -EINVAL; -+ goto copy_fail; -+ } -+ switch (dst->mem_type) { -+ case TTM_PL_VRAM: -+ dst_start += adev->mc.vram_start; -+ break; -+ case TTM_PL_TT: -+ dst_start += adev->mc.gtt_start; -+ break; -+ default: -+ DRM_ERROR("Unknown placement %d\n", dst->mem_type); -+ r = -EINVAL; -+ goto copy_fail; -+ } -+ if (!ring->ready) { -+ pr_err("Trying to move memory with ring turned off.\n"); -+ r = -EINVAL; -+ goto copy_fail; -+ } -+ -+ r = amdgpu_copy_buffer(ring, src_start, dst_start, -+ size, NULL, f); -+ if (r) -+ goto copy_fail; -+ -+ if (actual_size) -+ *actual_size = size; -+ -+ amdgpu_bo_fence(src_mem->bo, *f, true); -+ amdgpu_bo_fence(dst_mem->bo, *f, true); -+ -+copy_fail: -+ ttm_eu_backoff_reservation(&ticket, &list); -+ return r; -+} -+ -diff --git a/drivers/gpu/drm/amd/include/kgd_kfd_interface.h b/drivers/gpu/drm/amd/include/kgd_kfd_interface.h -index a57dbb1..57e0982 100644 ---- a/drivers/gpu/drm/amd/include/kgd_kfd_interface.h -+++ b/drivers/gpu/drm/amd/include/kgd_kfd_interface.h -@@ -226,6 +226,8 @@ struct tile_config { - * @restore_process_bos: Restore all BOs that belongs to the process identified - * by master_vm. - * -+ * @copy_mem_to_mem: Copies size bytes from source BO to destination BO -+ * - * This structure contains function pointers to services that the kgd driver - * provides to amdkfd driver. - * -@@ -371,6 +373,10 @@ struct kfd2kgd_calls { - struct tile_config *config); - - int (*restore_process_bos)(void *master_vm); -+ int (*copy_mem_to_mem)(struct kgd_dev *kgd, struct kgd_mem *src_mem, -+ uint64_t src_offset, struct kgd_mem *dst_mem, -+ uint64_t dest_offset, uint64_t size, struct fence **f, -+ uint64_t *actual_size); - }; - - /** --- -2.7.4 - |