drm/amdkfd: convert switches to IP version checking
authorGraham Sider <Graham.Sider@amd.com>
Thu, 28 Oct 2021 18:49:31 +0000 (14:49 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 17 Nov 2021 22:09:36 +0000 (17:09 -0500)
Converts KFD switch statements to use IP version checking instead
of asic_type.

Signed-off-by: Graham Sider <Graham.Sider@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdkfd/kfd_crat.c
drivers/gpu/drm/amd/amdkfd/kfd_device.c
drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
drivers/gpu/drm/amd/amdkfd/kfd_flat_memory.c
drivers/gpu/drm/amd/amdkfd/kfd_packet_manager.c
drivers/gpu/drm/amd/amdkfd/kfd_topology.c

index 1dc6cb7446e02d67200d8fdf5f65da27b848f09e..19dd472e9b060fb376294e6e63b956f089307f4b 100644 (file)
@@ -1377,67 +1377,71 @@ static int kfd_fill_gpu_cache_info(struct kfd_dev *kdev,
                pcache_info = vegam_cache_info;
                num_of_cache_types = ARRAY_SIZE(vegam_cache_info);
                break;
-       case CHIP_VEGA10:
-               pcache_info = vega10_cache_info;
-               num_of_cache_types = ARRAY_SIZE(vega10_cache_info);
-               break;
-       case CHIP_VEGA12:
-               pcache_info = vega12_cache_info;
-               num_of_cache_types = ARRAY_SIZE(vega12_cache_info);
-               break;
-       case CHIP_VEGA20:
-       case CHIP_ARCTURUS:
-               pcache_info = vega20_cache_info;
-               num_of_cache_types = ARRAY_SIZE(vega20_cache_info);
-               break;
-       case CHIP_ALDEBARAN:
-               pcache_info = aldebaran_cache_info;
-               num_of_cache_types = ARRAY_SIZE(aldebaran_cache_info);
-               break;
-       case CHIP_RAVEN:
-               pcache_info = raven_cache_info;
-               num_of_cache_types = ARRAY_SIZE(raven_cache_info);
-               break;
-       case CHIP_RENOIR:
-               pcache_info = renoir_cache_info;
-               num_of_cache_types = ARRAY_SIZE(renoir_cache_info);
-               break;
-       case CHIP_NAVI10:
-       case CHIP_NAVI12:
-       case CHIP_CYAN_SKILLFISH:
-               pcache_info = navi10_cache_info;
-               num_of_cache_types = ARRAY_SIZE(navi10_cache_info);
-               break;
-       case CHIP_NAVI14:
-               pcache_info = navi14_cache_info;
-               num_of_cache_types = ARRAY_SIZE(navi14_cache_info);
-               break;
-       case CHIP_SIENNA_CICHLID:
-               pcache_info = sienna_cichlid_cache_info;
-               num_of_cache_types = ARRAY_SIZE(sienna_cichlid_cache_info);
-               break;
-       case CHIP_NAVY_FLOUNDER:
-               pcache_info = navy_flounder_cache_info;
-               num_of_cache_types = ARRAY_SIZE(navy_flounder_cache_info);
-               break;
-       case CHIP_DIMGREY_CAVEFISH:
-               pcache_info = dimgrey_cavefish_cache_info;
-               num_of_cache_types = ARRAY_SIZE(dimgrey_cavefish_cache_info);
-               break;
-       case CHIP_VANGOGH:
-               pcache_info = vangogh_cache_info;
-               num_of_cache_types = ARRAY_SIZE(vangogh_cache_info);
-               break;
-       case CHIP_BEIGE_GOBY:
-               pcache_info = beige_goby_cache_info;
-               num_of_cache_types = ARRAY_SIZE(beige_goby_cache_info);
-               break;
-       case CHIP_YELLOW_CARP:
-               pcache_info = yellow_carp_cache_info;
-               num_of_cache_types = ARRAY_SIZE(yellow_carp_cache_info);
-               break;
        default:
-               return -EINVAL;
+               switch(KFD_GC_VERSION(kdev)) {
+               case IP_VERSION(9, 0, 1):
+                       pcache_info = vega10_cache_info;
+                       num_of_cache_types = ARRAY_SIZE(vega10_cache_info);
+                       break;
+               case IP_VERSION(9, 2, 1):
+                       pcache_info = vega12_cache_info;
+                       num_of_cache_types = ARRAY_SIZE(vega12_cache_info);
+                       break;
+               case IP_VERSION(9, 4, 0):
+               case IP_VERSION(9, 4, 1):
+                       pcache_info = vega20_cache_info;
+                       num_of_cache_types = ARRAY_SIZE(vega20_cache_info);
+                       break;
+               case IP_VERSION(9, 4, 2):
+                       pcache_info = aldebaran_cache_info;
+                       num_of_cache_types = ARRAY_SIZE(aldebaran_cache_info);
+                       break;
+               case IP_VERSION(9, 1, 0):
+               case IP_VERSION(9, 2, 2):
+                       pcache_info = raven_cache_info;
+                       num_of_cache_types = ARRAY_SIZE(raven_cache_info);
+                       break;
+               case IP_VERSION(9, 3, 0):
+                       pcache_info = renoir_cache_info;
+                       num_of_cache_types = ARRAY_SIZE(renoir_cache_info);
+                       break;
+               case IP_VERSION(10, 1, 10):
+               case IP_VERSION(10, 1, 2):
+               case IP_VERSION(10, 1, 3):
+                       pcache_info = navi10_cache_info;
+                       num_of_cache_types = ARRAY_SIZE(navi10_cache_info);
+                       break;
+               case IP_VERSION(10, 1, 1):
+                       pcache_info = navi14_cache_info;
+                       num_of_cache_types = ARRAY_SIZE(navi14_cache_info);
+                       break;
+               case IP_VERSION(10, 3, 0):
+                       pcache_info = sienna_cichlid_cache_info;
+                       num_of_cache_types = ARRAY_SIZE(sienna_cichlid_cache_info);
+                       break;
+               case IP_VERSION(10, 3, 2):
+                       pcache_info = navy_flounder_cache_info;
+                       num_of_cache_types = ARRAY_SIZE(navy_flounder_cache_info);
+                       break;
+               case IP_VERSION(10, 3, 4):
+                       pcache_info = dimgrey_cavefish_cache_info;
+                       num_of_cache_types = ARRAY_SIZE(dimgrey_cavefish_cache_info);
+                       break;
+               case IP_VERSION(10, 3, 1):
+                       pcache_info = vangogh_cache_info;
+                       num_of_cache_types = ARRAY_SIZE(vangogh_cache_info);
+                       break;
+               case IP_VERSION(10, 3, 5):
+                       pcache_info = beige_goby_cache_info;
+                       num_of_cache_types = ARRAY_SIZE(beige_goby_cache_info);
+                       break;
+               case IP_VERSION(10, 3, 3):
+                       pcache_info = yellow_carp_cache_info;
+                       num_of_cache_types = ARRAY_SIZE(yellow_carp_cache_info);
+                       break;
+               default:
+                       return -EINVAL;
+               }
        }
 
        *size_filled = 0;
index b752dc36a2cd03749b2592083980b1aebbdc755e..ee813bd57c92b03ca0d0597ce196a355541e15b0 100644 (file)
@@ -814,8 +814,12 @@ struct kfd_dev *kgd2kfd_probe(struct amdgpu_device *adev, bool vf)
        }
 
        if (!device_info || !f2g) {
-               dev_err(kfd_device, "%s %s not supported in kfd\n",
-                       amdgpu_asic_name[adev->asic_type], vf ? "VF" : "");
+               if (adev->ip_versions[GC_HWIP][0])
+                       dev_err(kfd_device, "GC IP %06x %s not supported in kfd\n",
+                               adev->ip_versions[GC_HWIP][0], vf ? "VF" : "");
+               else
+                       dev_err(kfd_device, "%s %s not supported in kfd\n",
+                               amdgpu_asic_name[adev->asic_type], vf ? "VF" : "");
                return NULL;
        }
 
index 4f7aec6a481b8638216cc94c9712331b37eb3a54..93d41e0b9b41b4376d925f7dc77d35fb911edca6 100644 (file)
@@ -1947,31 +1947,16 @@ struct device_queue_manager *device_queue_manager_init(struct kfd_dev *dev)
                device_queue_manager_init_vi_tonga(&dqm->asic_ops);
                break;
 
-       case CHIP_VEGA10:
-       case CHIP_VEGA12:
-       case CHIP_VEGA20:
-       case CHIP_RAVEN:
-       case CHIP_RENOIR:
-       case CHIP_ARCTURUS:
-       case CHIP_ALDEBARAN:
-               device_queue_manager_init_v9(&dqm->asic_ops);
-               break;
-       case CHIP_NAVI10:
-       case CHIP_NAVI12:
-       case CHIP_NAVI14:
-       case CHIP_SIENNA_CICHLID:
-       case CHIP_NAVY_FLOUNDER:
-       case CHIP_VANGOGH:
-       case CHIP_DIMGREY_CAVEFISH:
-       case CHIP_BEIGE_GOBY:
-       case CHIP_YELLOW_CARP:
-       case CHIP_CYAN_SKILLFISH:
-               device_queue_manager_init_v10_navi10(&dqm->asic_ops);
-               break;
        default:
-               WARN(1, "Unexpected ASIC family %u",
-                    dev->device_info->asic_family);
-               goto out_free;
+               if (KFD_GC_VERSION(dev) >= IP_VERSION(10, 1, 1))
+                       device_queue_manager_init_v10_navi10(&dqm->asic_ops);
+               else if (KFD_GC_VERSION(dev) >= IP_VERSION(9, 0, 1))
+                       device_queue_manager_init_v9(&dqm->asic_ops);
+               else {
+                       WARN(1, "Unexpected ASIC family %u",
+                            dev->device_info->asic_family);
+                       goto out_free;
+               }
        }
 
        if (init_mqd_managers(dqm))
index d1388896f9c12187e12654c254327c8e85408dfd..fa3ec3ed7e39c40502ac928706b077ff49c0fb22 100644 (file)
@@ -406,29 +406,14 @@ int kfd_init_apertures(struct kfd_process *process)
                        case CHIP_VEGAM:
                                kfd_init_apertures_vi(pdd, id);
                                break;
-                       case CHIP_VEGA10:
-                       case CHIP_VEGA12:
-                       case CHIP_VEGA20:
-                       case CHIP_RAVEN:
-                       case CHIP_RENOIR:
-                       case CHIP_ARCTURUS:
-                       case CHIP_ALDEBARAN:
-                       case CHIP_NAVI10:
-                       case CHIP_NAVI12:
-                       case CHIP_NAVI14:
-                       case CHIP_SIENNA_CICHLID:
-                       case CHIP_NAVY_FLOUNDER:
-                       case CHIP_VANGOGH:
-                       case CHIP_DIMGREY_CAVEFISH:
-                       case CHIP_BEIGE_GOBY:
-                       case CHIP_YELLOW_CARP:
-                       case CHIP_CYAN_SKILLFISH:
-                               kfd_init_apertures_v9(pdd, id);
-                               break;
                        default:
-                               WARN(1, "Unexpected ASIC family %u",
-                                    dev->device_info->asic_family);
-                               return -EINVAL;
+                               if (KFD_GC_VERSION(dev) >= IP_VERSION(9, 0, 1))
+                                       kfd_init_apertures_v9(pdd, id);
+                               else {
+                                       WARN(1, "Unexpected ASIC family %u",
+                                            dev->device_info->asic_family);
+                                       return -EINVAL;
+                               }
                        }
 
                        if (!dev->use_iommu_v2) {
index e547f1f8c49f601bfbd1b2b56395c4d7d711a9ab..88dc0e451c45016645d60f6afc5c545ca108c6d0 100644 (file)
@@ -236,31 +236,16 @@ int pm_init(struct packet_manager *pm, struct device_queue_manager *dqm)
        case CHIP_VEGAM:
                pm->pmf = &kfd_vi_pm_funcs;
                break;
-       case CHIP_VEGA10:
-       case CHIP_VEGA12:
-       case CHIP_VEGA20:
-       case CHIP_RAVEN:
-       case CHIP_RENOIR:
-       case CHIP_ARCTURUS:
-       case CHIP_NAVI10:
-       case CHIP_NAVI12:
-       case CHIP_NAVI14:
-       case CHIP_SIENNA_CICHLID:
-       case CHIP_NAVY_FLOUNDER:
-       case CHIP_VANGOGH:
-       case CHIP_DIMGREY_CAVEFISH:
-       case CHIP_BEIGE_GOBY:
-       case CHIP_YELLOW_CARP:
-       case CHIP_CYAN_SKILLFISH:
-               pm->pmf = &kfd_v9_pm_funcs;
-               break;
-       case CHIP_ALDEBARAN:
-               pm->pmf = &kfd_aldebaran_pm_funcs;
-               break;
        default:
-               WARN(1, "Unexpected ASIC family %u",
-                    dqm->dev->device_info->asic_family);
-               return -EINVAL;
+               if (KFD_GC_VERSION(dqm->dev) == IP_VERSION(9, 4, 2))
+                       pm->pmf = &kfd_aldebaran_pm_funcs;
+               else if (KFD_GC_VERSION(dqm->dev) >= IP_VERSION(9, 0, 1))
+                       pm->pmf = &kfd_v9_pm_funcs;
+               else {
+                       WARN(1, "Unexpected ASIC family %u",
+                            dqm->dev->device_info->asic_family);
+                       return -EINVAL;
+               }
        }
 
        pm->dqm = dqm;
index ae7c9944dc4af094d4d9fa4347dd0cc311e87e75..a4c0c929444a6c4286d46d91f70c04302a9d93e3 100644 (file)
@@ -1425,30 +1425,14 @@ int kfd_topology_add_device(struct kfd_dev *gpu)
                        HSA_CAP_DOORBELL_TYPE_TOTALBITS_SHIFT) &
                        HSA_CAP_DOORBELL_TYPE_TOTALBITS_MASK);
                break;
-       case CHIP_VEGA10:
-       case CHIP_VEGA12:
-       case CHIP_VEGA20:
-       case CHIP_RAVEN:
-       case CHIP_RENOIR:
-       case CHIP_ARCTURUS:
-       case CHIP_ALDEBARAN:
-       case CHIP_NAVI10:
-       case CHIP_NAVI12:
-       case CHIP_NAVI14:
-       case CHIP_SIENNA_CICHLID:
-       case CHIP_NAVY_FLOUNDER:
-       case CHIP_VANGOGH:
-       case CHIP_DIMGREY_CAVEFISH:
-       case CHIP_BEIGE_GOBY:
-       case CHIP_YELLOW_CARP:
-       case CHIP_CYAN_SKILLFISH:
-               dev->node_props.capability |= ((HSA_CAP_DOORBELL_TYPE_2_0 <<
-                       HSA_CAP_DOORBELL_TYPE_TOTALBITS_SHIFT) &
-                       HSA_CAP_DOORBELL_TYPE_TOTALBITS_MASK);
-               break;
        default:
-               WARN(1, "Unexpected ASIC family %u",
-                    dev->gpu->device_info->asic_family);
+               if (KFD_GC_VERSION(dev->gpu) >= IP_VERSION(9, 0, 1))
+                       dev->node_props.capability |= ((HSA_CAP_DOORBELL_TYPE_2_0 <<
+                               HSA_CAP_DOORBELL_TYPE_TOTALBITS_SHIFT) &
+                               HSA_CAP_DOORBELL_TYPE_TOTALBITS_MASK);
+               else
+                       WARN(1, "Unexpected ASIC family %u",
+                            dev->gpu->device_info->asic_family);
        }
 
        /*