drm/amdkfd: Reuse CHIP_* from amdgpu v2
authorYong Zhao <Yong.Zhao@amd.com>
Wed, 20 Sep 2017 22:10:19 +0000 (18:10 -0400)
committerOded Gabbay <oded.gabbay@gmail.com>
Wed, 20 Sep 2017 22:10:19 +0000 (18:10 -0400)
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
drivers/gpu/drm/amd/amdkfd/kfd_kernel_queue.c
drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.c
drivers/gpu/drm/amd/amdkfd/kfd_priv.h

index 87f8742dcd8c911c83d963ed6fda8b9585a39401..fe0f0de0ef86e023756c7a5e9ccc1c15faeed7be 100644 (file)
@@ -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))
index d53d32a91a16c9fde2974509ae30762eb161ea8b..8b0c0645d7c05ed8c95b9ef59556f7c8645da5bd 100644 (file)
@@ -303,14 +303,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)
index b1ef1368c3bbb0bb7900601f43681ee99a83e69c..dfd260ef81ffe94147b846feb677f0139d7d7b8b 100644 (file)
@@ -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;
index f0ca60f27d9a75af7d4c0f754ef5c2fa27c65dd8..5ebe565fecb373b7fa420af1415a0c264ec7b9ed 100644 (file)
@@ -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;