aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2732-drm-amdgpu-Simplify-kgd2kfd-interface.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2732-drm-amdgpu-Simplify-kgd2kfd-interface.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2732-drm-amdgpu-Simplify-kgd2kfd-interface.patch171
1 files changed, 171 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2732-drm-amdgpu-Simplify-kgd2kfd-interface.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2732-drm-amdgpu-Simplify-kgd2kfd-interface.patch
new file mode 100644
index 00000000..101e7f04
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2732-drm-amdgpu-Simplify-kgd2kfd-interface.patch
@@ -0,0 +1,171 @@
+From dae47835f5fe3c439792cdd953768606656f315e Mon Sep 17 00:00:00 2001
+From: Amber Lin <Amber.Lin@amd.com>
+Date: Thu, 13 Dec 2018 15:18:01 -0500
+Subject: [PATCH 2732/2940] drm/amdgpu: Simplify kgd2kfd interface
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+After amdkfd is merged into amdgpu module, amdgpu can call amdkfd
+functions directly.
+
+Signed-off-by: Amber Lin <Amber.Lin@amd.com>
+Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
+Acked-by: Christian König <christian.koenig@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c | 25 ++++++++-----------
+ .../gpu/drm/amd/amdgpu/amdgpu_amdkfd_fence.c | 3 +--
+ .../gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 6 ++---
+ 3 files changed, 13 insertions(+), 21 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
+index 067c017bbdd7..8313da971e9e 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
+@@ -62,18 +62,13 @@ int amdgpu_amdkfd_init(void)
+
+ void amdgpu_amdkfd_fini(void)
+ {
+- if (kgd2kfd) {
+- kgd2kfd->exit();
+- symbol_put(kgd2kfd_init);
+- }
++ kgd2kfd_exit();
+ }
+
+ void amdgpu_amdkfd_device_probe(struct amdgpu_device *adev)
+ {
+ const struct kfd2kgd_calls *kfd2kgd;
+
+- if (!kgd2kfd)
+- return;
+
+ switch (adev->asic_type) {
+ #ifdef CONFIG_DRM_AMDGPU_CIK
+@@ -101,8 +96,8 @@ void amdgpu_amdkfd_device_probe(struct amdgpu_device *adev)
+ return;
+ }
+
+- adev->kfd.dev = kgd2kfd->probe((struct kgd_dev *)adev,
+- adev->pdev, kfd2kgd);
++ adev->kfd.dev = kgd2kfd_probe((struct kgd_dev *)adev,
++ adev->pdev, kfd2kgd);
+
+ if (adev->kfd.dev)
+ amdgpu_amdkfd_total_mem_size += adev->gmc.real_vram_size;
+@@ -206,14 +201,14 @@ void amdgpu_amdkfd_device_init(struct amdgpu_device *adev)
+ gpu_resources.reserved_doorbell_mask = 0x1f0;
+ gpu_resources.reserved_doorbell_val = 0x0f0;
+
+- kgd2kfd->device_init(adev->kfd.dev, &gpu_resources);
++ kgd2kfd_device_init(adev->kfd.dev, &gpu_resources);
+ }
+ }
+
+ void amdgpu_amdkfd_device_fini(struct amdgpu_device *adev)
+ {
+ if (adev->kfd.dev) {
+- kgd2kfd->device_exit(adev->kfd.dev);
++ kgd2kfd_device_exit(adev->kfd.dev);
+ adev->kfd.dev = NULL;
+ }
+ }
+@@ -222,13 +217,13 @@ void amdgpu_amdkfd_interrupt(struct amdgpu_device *adev,
+ const void *ih_ring_entry)
+ {
+ if (adev->kfd.dev)
+- kgd2kfd->interrupt(adev->kfd.dev, ih_ring_entry);
++ kgd2kfd_interrupt(adev->kfd.dev, ih_ring_entry);
+ }
+
+ void amdgpu_amdkfd_suspend(struct amdgpu_device *adev)
+ {
+ if (adev->kfd.dev)
+- kgd2kfd->suspend(adev->kfd.dev);
++ kgd2kfd_suspend(adev->kfd.dev);
+ }
+
+ int amdgpu_amdkfd_resume(struct amdgpu_device *adev)
+@@ -236,7 +231,7 @@ int amdgpu_amdkfd_resume(struct amdgpu_device *adev)
+ int r = 0;
+
+ if (adev->kfd.dev)
+- r = kgd2kfd->resume(adev->kfd.dev);
++ r = kgd2kfd_resume(adev->kfd.dev);
+
+ return r;
+ }
+@@ -246,7 +241,7 @@ int amdgpu_amdkfd_pre_reset(struct amdgpu_device *adev)
+ int r = 0;
+
+ if (adev->kfd.dev)
+- r = kgd2kfd->pre_reset(adev->kfd.dev);
++ r = kgd2kfd_pre_reset(adev->kfd.dev);
+
+ return r;
+ }
+@@ -256,7 +251,7 @@ int amdgpu_amdkfd_post_reset(struct amdgpu_device *adev)
+ int r = 0;
+
+ if (adev->kfd.dev)
+- r = kgd2kfd->post_reset(adev->kfd.dev);
++ r = kgd2kfd_post_reset(adev->kfd.dev);
+
+ return r;
+ }
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_fence.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_fence.c
+index 3c7055ecd990..3107b9575929 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_fence.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_fence.c
+@@ -31,7 +31,6 @@
+
+ static const struct dma_fence_ops amdkfd_fence_ops;
+ static atomic_t fence_seq = ATOMIC_INIT(0);
+-extern const struct kgd2kfd_calls *kgd2kfd;
+
+ /* Eviction Fence
+ * Fence helper functions to deal with KFD memory eviction.
+@@ -123,7 +122,7 @@ static bool amdkfd_fence_enable_signaling(struct dma_fence *f)
+ if (dma_fence_is_signaled(f))
+ return true;
+
+- if (!kgd2kfd->schedule_evict_and_restore_process(fence->mm, f))
++ if (!kgd2kfd_schedule_evict_and_restore_process(fence->mm, f))
+ return true;
+
+ return false;
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
+index 5ca697af9a53..b6e07e27fe24 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
+@@ -44,8 +44,6 @@
+ */
+ #define AMDGPU_USERPTR_RESTORE_DELAY_MS 1
+
+-extern const struct kgd2kfd_calls *kgd2kfd;
+-
+ /* Impose limit on how much memory KFD can use */
+ static struct {
+ uint64_t max_system_mem_limit;
+@@ -1783,7 +1781,7 @@ int amdgpu_amdkfd_evict_userptr(struct kgd_mem *mem,
+ evicted_bos = atomic_inc_return(&process_info->evicted_bos);
+ if (evicted_bos == 1) {
+ /* First eviction, stop the queues */
+- r = kgd2kfd->quiesce_mm(mm);
++ r = kgd2kfd_quiesce_mm(mm);
+ if (r)
+ pr_err("Failed to quiesce KFD\n");
+ schedule_delayed_work(&process_info->restore_userptr_work,
+@@ -2075,7 +2073,7 @@ static void amdgpu_amdkfd_restore_userptr_worker(struct work_struct *work)
+ evicted_bos)
+ goto unlock_out;
+ evicted_bos = 0;
+- if (kgd2kfd->resume_mm(mm)) {
++ if (kgd2kfd_resume_mm(mm)) {
+ pr_err("%s: Failed to resume KFD\n", __func__);
+ /* No recovery from this failure. Probably the CP is
+ * hanging. No point trying again.
+--
+2.17.1
+