summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/amd/amdkfd/kfd_topology.c')
-rw-r--r--drivers/gpu/drm/amd/amdkfd/kfd_topology.c67
1 files changed, 57 insertions, 10 deletions
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_topology.c b/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
index 3eb32d58a120..1ccd4514d3ee 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
@@ -931,17 +931,12 @@ static void kfd_debug_print_topology(void)
dev = list_last_entry(&topology_device_list,
struct kfd_topology_device, list);
if (dev) {
- if (dev->node_props.cpu_cores_count &&
- dev->node_props.simd_count) {
- pr_info("Topology: Add APU node [0x%0x:0x%0x]\n",
- dev->node_props.device_id,
- dev->node_props.vendor_id);
- } else if (dev->node_props.cpu_cores_count)
+ if (dev->node_props.cpu_cores_count)
pr_info("Topology: Add CPU node\n");
- else if (dev->node_props.simd_count)
- pr_info("Topology: Add dGPU node [0x%0x:0x%0x]\n",
- dev->node_props.device_id,
- dev->node_props.vendor_id);
+ else
+ pr_info("Topology: Add GPU node [0x%0x:0x%0x]\n",
+ dev->node_props.vendor_id,
+ dev->node_props.device_id);
}
up_read(&topology_lock);
}
@@ -2028,6 +2023,13 @@ static void kfd_topology_set_capabilities(struct kfd_topology_device *dev)
if (KFD_GC_VERSION(dev->gpu) >= IP_VERSION(12, 0, 0))
dev->node_props.capability |=
HSA_CAP_TRAP_DEBUG_PRECISE_ALU_OPERATIONS_SUPPORTED;
+
+ if (KFD_GC_VERSION(dev->gpu) >= IP_VERSION(12, 1, 0)) {
+ dev->node_props.capability |=
+ HSA_CAP_TRAP_DEBUG_PRECISE_MEMORY_OPERATIONS_SUPPORTED;
+ dev->node_props.capability2 |=
+ HSA_CAP2_TRAP_DEBUG_LDS_OUT_OF_ADDR_RANGE_SUPPORTED;
+ }
}
kfd_topology_set_dbg_firmware_support(dev);
@@ -2355,6 +2357,28 @@ int kfd_numa_node_to_apic_id(int numa_node_id)
return kfd_cpumask_to_apic_id(cpumask_of_node(numa_node_id));
}
+/* kfd_gpu_node_num - Return kfd gpu node number at system */
+uint32_t kfd_gpu_node_num(void)
+{
+ struct kfd_node *dev;
+ u8 gpu_num = 0;
+ u8 id = 0;
+
+ while (kfd_topology_enum_kfd_devices(id, &dev) == 0) {
+ if (!dev || kfd_devcgroup_check_permission(dev)) {
+ /* Skip non GPU devices and devices to which the
+ * current process have no access to
+ */
+ id++;
+ continue;
+ }
+ id++;
+ gpu_num++;
+ }
+
+ return gpu_num;
+}
+
#if defined(CONFIG_DEBUG_FS)
int kfd_debugfs_hqds_by_device(struct seq_file *m, void *data)
@@ -2408,3 +2432,26 @@ int kfd_debugfs_rls_by_device(struct seq_file *m, void *data)
}
#endif
+
+void kfd_update_svm_support_properties(struct amdgpu_device *adev)
+{
+ struct kfd_topology_device *dev;
+ int ret;
+
+ down_write(&topology_lock);
+ list_for_each_entry(dev, &topology_device_list, list) {
+ if (!dev->gpu || dev->gpu->adev != adev)
+ continue;
+
+ if (KFD_IS_SVM_API_SUPPORTED(adev)) {
+ dev->node_props.capability |= HSA_CAP_SVMAPI_SUPPORTED;
+ ret = kfd_topology_update_sysfs();
+ if (!ret)
+ sys_props.generation_count++;
+ else
+ dev_err(adev->dev, "Failed to update SVM support properties. ret=%d\n", ret);
+ } else
+ dev->node_props.capability &= ~HSA_CAP_SVMAPI_SUPPORTED;
+ }
+ up_write(&topology_lock);
+}