diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdkfd/kfd_topology.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdkfd/kfd_topology.c | 67 |
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); +} |
