diff options
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.patch | 121 |
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 + |