drm/amdkfd: kfd expose the hive_id of the device through its node properties
authorShaoyun Liu <Shaoyun.Liu@amd.com>
Fri, 6 Jul 2018 15:32:42 +0000 (11:32 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 11 Sep 2018 03:48:43 +0000 (22:48 -0500)
Thunk will generate the XGMI topology information when necessary with the hive_id
for each specified device

Signed-off-by: Shaoyun Liu <Shaoyun.Liu@amd.com>
Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
Acked-by: Christian König <christian.koenig@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 1b048715ab8a1df42a391a527823b98212534be5..b4d9e6b4f5833d5719a9432c42d798e973c77fa4 100644 (file)
@@ -476,6 +476,9 @@ bool kgd2kfd_device_init(struct kfd_dev *kfd,
                goto kfd_doorbell_error;
        }
 
+       if (kfd->kfd2kgd->get_hive_id)
+               kfd->hive_id = kfd->kfd2kgd->get_hive_id(kfd->kgd);
+
        if (kfd_topology_add_device(kfd)) {
                dev_err(kfd_device, "Error adding device to topology\n");
                goto kfd_topology_add_device_error;
index 355f79da8a6390211fa2b1083460c39d1f2a0192..6a5418f3d8fb8b208f78e9aeb67e4b71963ed37d 100644 (file)
@@ -254,6 +254,9 @@ struct kfd_dev {
        bool cwsr_enabled;
        const void *cwsr_isa;
        unsigned int cwsr_isa_size;
+
+       /* xGMI */
+       uint64_t hive_id;
 };
 
 /* KGD2KFD callbacks */
index bc95d4dfee2e930800426c85bd5c6831efc6294f..19ecc8233d66c28d27dc5503cd68ba103c19a221 100644 (file)
@@ -443,6 +443,8 @@ static ssize_t node_show(struct kobject *kobj, struct attribute *attr,
                        dev->node_props.location_id);
        sysfs_show_32bit_prop(buffer, "drm_render_minor",
                        dev->node_props.drm_render_minor);
+       sysfs_show_64bit_prop(buffer, "hive_id",
+                       dev->node_props.hive_id);
 
        if (dev->gpu) {
                log_max_watch_addr =
@@ -1219,6 +1221,8 @@ int kfd_topology_add_device(struct kfd_dev *gpu)
        dev->node_props.drm_render_minor =
                gpu->shared_resources.drm_render_minor;
 
+       dev->node_props.hive_id = gpu->hive_id;
+
        kfd_fill_mem_clk_max_info(dev);
        kfd_fill_iolink_non_crat_info(dev);
 
index 7d9c3f948dff2d41052b9a8ac1ae7eabafa081fb..92a19be0734448404f6c6e9133c4a1def1101ca0 100644 (file)
@@ -49,6 +49,7 @@
 #define HSA_CAP_AQL_QUEUE_DOUBLE_MAP           0x00004000
 
 struct kfd_node_properties {
+       uint64_t hive_id;
        uint32_t cpu_cores_count;
        uint32_t simd_count;
        uint32_t mem_banks_count;