aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3348-drm-amdkfd-Reuse-CHIP_-from-amdgpu-v2.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3348-drm-amdkfd-Reuse-CHIP_-from-amdgpu-v2.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3348-drm-amdkfd-Reuse-CHIP_-from-amdgpu-v2.patch121
1 files changed, 121 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3348-drm-amdkfd-Reuse-CHIP_-from-amdgpu-v2.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3348-drm-amdkfd-Reuse-CHIP_-from-amdgpu-v2.patch
new file mode 100644
index 00000000..00d2a3ac
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3348-drm-amdkfd-Reuse-CHIP_-from-amdgpu-v2.patch
@@ -0,0 +1,121 @@
+From ae4d2d28c2c40346a1b5bbca064f118f0ee60f45 Mon Sep 17 00:00:00 2001
+From: Yong Zhao <Yong.Zhao@amd.com>
+Date: Wed, 20 Sep 2017 18:10:19 -0400
+Subject: [PATCH 3348/4131] drm/amdkfd: Reuse CHIP_* from amdgpu v2
+
+There are already CHIP_* definitions under amd_shared.h file on amdgpu
+side, so KFD should reuse them rather than defining new ones.
+
+Using enum for asic type requires default cases on switch statements
+to prevent compiler warnings. WARN on unsupported ASICs. It should never
+get there because KFD should not be initialized on unsupported devices.
+
+v2: Replace BUG() with WARN and error return
+
+Signed-off-by: Yong Zhao <Yong.Zhao@amd.com>
+Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>
+Signed-off-by: Oded Gabbay <oded.gabbay@gmail.com>
+---
+ drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 4 ++++
+ drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c | 18 ++++++++++++------
+ drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.c | 3 +++
+ drivers/gpu/drm/amd/amdkfd/kfd_priv.h | 9 +++------
+ 4 files changed, 22 insertions(+), 12 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
+index 87f8742..fe0f0de 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
+@@ -1130,6 +1130,10 @@ struct device_queue_manager *device_queue_manager_init(struct kfd_dev *dev)
+ case CHIP_KAVERI:
+ device_queue_manager_init_cik(&dqm->ops_asic_specific);
+ break;
++ default:
++ WARN(1, "Unexpected ASIC family %u",
++ dev->device_info->asic_family);
++ goto out_free;
+ }
+
+ if (!dqm->ops.initialize(dqm))
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c b/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c
+index a47ca3c..d7ed10e 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c
+@@ -291,14 +291,20 @@ struct kernel_queue *kernel_queue_init(struct kfd_dev *dev,
+ case CHIP_KAVERI:
+ kernel_queue_init_cik(&kq->ops_asic_specific);
+ break;
++ default:
++ WARN(1, "Unexpected ASIC family %u",
++ dev->device_info->asic_family);
++ goto out_free;
+ }
+
+- if (!kq->ops.initialize(kq, dev, type, KFD_KERNEL_QUEUE_SIZE)) {
+- pr_err("Failed to init kernel queue\n");
+- kfree(kq);
+- return NULL;
+- }
+- return kq;
++ if (kq->ops.initialize(kq, dev, type, KFD_KERNEL_QUEUE_SIZE))
++ return kq;
++
++ pr_err("Failed to init kernel queue\n");
++
++out_free:
++ kfree(kq);
++ return NULL;
+ }
+
+ void kernel_queue_uninit(struct kernel_queue *kq)
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.c
+index b1ef136..dfd260e 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.c
+@@ -31,6 +31,9 @@ struct mqd_manager *mqd_manager_init(enum KFD_MQD_TYPE type,
+ return mqd_manager_init_cik(type, dev);
+ case CHIP_CARRIZO:
+ return mqd_manager_init_vi(type, dev);
++ default:
++ WARN(1, "Unexpected ASIC family %u",
++ dev->device_info->asic_family);
+ }
+
+ return NULL;
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
+index 7312204..11ce34b 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
+@@ -33,6 +33,8 @@
+ #include <linux/kfd_ioctl.h>
+ #include <kgd_kfd_interface.h>
+
++#include "amd_shared.h"
++
+ #define KFD_SYSFS_FILE_MODE 0444
+
+ #define KFD_MMAP_DOORBELL_MASK 0x8000000000000
+@@ -112,11 +114,6 @@ enum cache_policy {
+ cache_policy_noncoherent
+ };
+
+-enum asic_family_type {
+- CHIP_KAVERI = 0,
+- CHIP_CARRIZO
+-};
+-
+ struct kfd_event_interrupt_class {
+ bool (*interrupt_isr)(struct kfd_dev *dev,
+ const uint32_t *ih_ring_entry);
+@@ -125,7 +122,7 @@ struct kfd_event_interrupt_class {
+ };
+
+ struct kfd_device_info {
+- unsigned int asic_family;
++ enum amd_asic_type asic_family;
+ const struct kfd_event_interrupt_class *event_interrupt_class;
+ unsigned int max_pasid_bits;
+ unsigned int max_no_of_hqd;
+--
+2.7.4
+