OSDN Git Service

drm/amdkfd: Fill the name field in node topology with asic name v2
authorYong Zhao <Yong.Zhao@amd.com>
Fri, 2 Aug 2019 02:55:50 +0000 (22:55 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 22 Aug 2019 03:16:28 +0000 (22:16 -0500)
The name field in node topology has not been used. We re-purpose it to
hold the asic name, which can be queried by user space applications
through sysfs.

Signed-off-by: Yong Zhao <Yong.Zhao@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_device.c
drivers/gpu/drm/amd/amdkfd/kfd_priv.h
drivers/gpu/drm/amd/amdkfd/kfd_topology.c
drivers/gpu/drm/amd/amdkfd/kfd_topology.h

index 3b9fe62..24bfdf5 100644 (file)
@@ -42,6 +42,7 @@ static atomic_t kfd_locked = ATOMIC_INIT(0);
 #ifdef KFD_SUPPORT_IOMMU_V2
 static const struct kfd_device_info kaveri_device_info = {
        .asic_family = CHIP_KAVERI,
+       .asic_name = "kaveri",
        .max_pasid_bits = 16,
        /* max num of queues for KV.TODO should be a dynamic value */
        .max_no_of_hqd  = 24,
@@ -60,6 +61,7 @@ static const struct kfd_device_info kaveri_device_info = {
 
 static const struct kfd_device_info carrizo_device_info = {
        .asic_family = CHIP_CARRIZO,
+       .asic_name = "carrizo",
        .max_pasid_bits = 16,
        /* max num of queues for CZ.TODO should be a dynamic value */
        .max_no_of_hqd  = 24,
@@ -78,6 +80,7 @@ static const struct kfd_device_info carrizo_device_info = {
 
 static const struct kfd_device_info raven_device_info = {
        .asic_family = CHIP_RAVEN,
+       .asic_name = "raven",
        .max_pasid_bits = 16,
        .max_no_of_hqd  = 24,
        .doorbell_size  = 8,
@@ -96,6 +99,7 @@ static const struct kfd_device_info raven_device_info = {
 
 static const struct kfd_device_info hawaii_device_info = {
        .asic_family = CHIP_HAWAII,
+       .asic_name = "hawaii",
        .max_pasid_bits = 16,
        /* max num of queues for KV.TODO should be a dynamic value */
        .max_no_of_hqd  = 24,
@@ -114,6 +118,7 @@ static const struct kfd_device_info hawaii_device_info = {
 
 static const struct kfd_device_info tonga_device_info = {
        .asic_family = CHIP_TONGA,
+       .asic_name = "tonga",
        .max_pasid_bits = 16,
        .max_no_of_hqd  = 24,
        .doorbell_size  = 4,
@@ -131,6 +136,7 @@ static const struct kfd_device_info tonga_device_info = {
 
 static const struct kfd_device_info fiji_device_info = {
        .asic_family = CHIP_FIJI,
+       .asic_name = "fiji",
        .max_pasid_bits = 16,
        .max_no_of_hqd  = 24,
        .doorbell_size  = 4,
@@ -148,6 +154,7 @@ static const struct kfd_device_info fiji_device_info = {
 
 static const struct kfd_device_info fiji_vf_device_info = {
        .asic_family = CHIP_FIJI,
+       .asic_name = "fiji",
        .max_pasid_bits = 16,
        .max_no_of_hqd  = 24,
        .doorbell_size  = 4,
@@ -166,6 +173,7 @@ static const struct kfd_device_info fiji_vf_device_info = {
 
 static const struct kfd_device_info polaris10_device_info = {
        .asic_family = CHIP_POLARIS10,
+       .asic_name = "polaris10",
        .max_pasid_bits = 16,
        .max_no_of_hqd  = 24,
        .doorbell_size  = 4,
@@ -183,6 +191,7 @@ static const struct kfd_device_info polaris10_device_info = {
 
 static const struct kfd_device_info polaris10_vf_device_info = {
        .asic_family = CHIP_POLARIS10,
+       .asic_name = "polaris10",
        .max_pasid_bits = 16,
        .max_no_of_hqd  = 24,
        .doorbell_size  = 4,
@@ -200,6 +209,7 @@ static const struct kfd_device_info polaris10_vf_device_info = {
 
 static const struct kfd_device_info polaris11_device_info = {
        .asic_family = CHIP_POLARIS11,
+       .asic_name = "polaris11",
        .max_pasid_bits = 16,
        .max_no_of_hqd  = 24,
        .doorbell_size  = 4,
@@ -217,6 +227,7 @@ static const struct kfd_device_info polaris11_device_info = {
 
 static const struct kfd_device_info polaris12_device_info = {
        .asic_family = CHIP_POLARIS12,
+       .asic_name = "polaris12",
        .max_pasid_bits = 16,
        .max_no_of_hqd  = 24,
        .doorbell_size  = 4,
@@ -234,6 +245,7 @@ static const struct kfd_device_info polaris12_device_info = {
 
 static const struct kfd_device_info vegam_device_info = {
        .asic_family = CHIP_VEGAM,
+       .asic_name = "vegam",
        .max_pasid_bits = 16,
        .max_no_of_hqd  = 24,
        .doorbell_size  = 4,
@@ -251,6 +263,7 @@ static const struct kfd_device_info vegam_device_info = {
 
 static const struct kfd_device_info vega10_device_info = {
        .asic_family = CHIP_VEGA10,
+       .asic_name = "vega10",
        .max_pasid_bits = 16,
        .max_no_of_hqd  = 24,
        .doorbell_size  = 8,
@@ -268,6 +281,7 @@ static const struct kfd_device_info vega10_device_info = {
 
 static const struct kfd_device_info vega10_vf_device_info = {
        .asic_family = CHIP_VEGA10,
+       .asic_name = "vega10",
        .max_pasid_bits = 16,
        .max_no_of_hqd  = 24,
        .doorbell_size  = 8,
@@ -285,6 +299,7 @@ static const struct kfd_device_info vega10_vf_device_info = {
 
 static const struct kfd_device_info vega12_device_info = {
        .asic_family = CHIP_VEGA12,
+       .asic_name = "vega12",
        .max_pasid_bits = 16,
        .max_no_of_hqd  = 24,
        .doorbell_size  = 8,
@@ -302,6 +317,7 @@ static const struct kfd_device_info vega12_device_info = {
 
 static const struct kfd_device_info vega20_device_info = {
        .asic_family = CHIP_VEGA20,
+       .asic_name = "vega20",
        .max_pasid_bits = 16,
        .max_no_of_hqd  = 24,
        .doorbell_size  = 8,
@@ -319,6 +335,7 @@ static const struct kfd_device_info vega20_device_info = {
 
 static const struct kfd_device_info arcturus_device_info = {
        .asic_family = CHIP_ARCTURUS,
+       .asic_name = "arcturus",
        .max_pasid_bits = 16,
        .max_no_of_hqd  = 24,
        .doorbell_size  = 8,
@@ -336,6 +353,7 @@ static const struct kfd_device_info arcturus_device_info = {
 
 static const struct kfd_device_info navi10_device_info = {
        .asic_family = CHIP_NAVI10,
+       .asic_name = "navi10",
        .max_pasid_bits = 16,
        .max_no_of_hqd  = 24,
        .doorbell_size  = 8,
index 3933fb6..3bb75d1 100644 (file)
@@ -195,6 +195,7 @@ struct kfd_event_interrupt_class {
 
 struct kfd_device_info {
        enum amd_asic_type asic_family;
+       const char *asic_name;
        const struct kfd_event_interrupt_class *event_interrupt_class;
        unsigned int max_pasid_bits;
        unsigned int max_no_of_hqd;
index 36fa98f..7551761 100644 (file)
@@ -406,8 +406,6 @@ static ssize_t node_show(struct kobject *kobj, struct attribute *attr,
                char *buffer)
 {
        struct kfd_topology_device *dev;
-       char public_name[KFD_TOPOLOGY_PUBLIC_NAME_SIZE];
-       uint32_t i;
        uint32_t log_max_watch_addr;
 
        /* Making sure that the buffer is an empty string */
@@ -422,14 +420,8 @@ static ssize_t node_show(struct kobject *kobj, struct attribute *attr,
        if (strcmp(attr->name, "name") == 0) {
                dev = container_of(attr, struct kfd_topology_device,
                                attr_name);
-               for (i = 0; i < KFD_TOPOLOGY_PUBLIC_NAME_SIZE; i++) {
-                       public_name[i] =
-                                       (char)dev->node_props.marketing_name[i];
-                       if (dev->node_props.marketing_name[i] == 0)
-                               break;
-               }
-               public_name[KFD_TOPOLOGY_PUBLIC_NAME_SIZE-1] = 0x0;
-               return sysfs_show_str_val(buffer, public_name);
+
+               return sysfs_show_str_val(buffer, dev->node_props.name);
        }
 
        dev = container_of(attr, struct kfd_topology_device,
@@ -1274,6 +1266,10 @@ int kfd_topology_add_device(struct kfd_dev *gpu)
         */
 
        amdgpu_amdkfd_get_cu_info(dev->gpu->kgd, &cu_info);
+
+       strncpy(dev->node_props.name, gpu->device_info->asic_name,
+                       KFD_TOPOLOGY_PUBLIC_NAME_SIZE);
+
        dev->node_props.simd_arrays_per_engine =
                cu_info.num_shader_arrays_per_engine;
 
index 276354a..d4718d5 100644 (file)
@@ -27,7 +27,7 @@
 #include <linux/list.h>
 #include "kfd_crat.h"
 
-#define KFD_TOPOLOGY_PUBLIC_NAME_SIZE 128
+#define KFD_TOPOLOGY_PUBLIC_NAME_SIZE 32
 
 #define HSA_CAP_HOT_PLUGGABLE                  0x00000001
 #define HSA_CAP_ATS_PRESENT                    0x00000002
@@ -81,7 +81,7 @@ struct kfd_node_properties {
        int32_t  drm_render_minor;
        uint32_t num_sdma_engines;
        uint32_t num_sdma_xgmi_engines;
-       uint16_t marketing_name[KFD_TOPOLOGY_PUBLIC_NAME_SIZE];
+       char name[KFD_TOPOLOGY_PUBLIC_NAME_SIZE];
 };
 
 #define HSA_MEM_HEAP_TYPE_SYSTEM       0