diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c index adba9ea03e63..a73e1903d29b 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c | |||
@@ -1368,6 +1368,29 @@ static ssize_t amdgpu_get_pcie_bw(struct device *dev, | |||
1368 | count0, count1, pcie_get_mps(adev->pdev)); | 1368 | count0, count1, pcie_get_mps(adev->pdev)); |
1369 | } | 1369 | } |
1370 | 1370 | ||
1371 | /** | ||
1372 | * DOC: unique_id | ||
1373 | * | ||
1374 | * The amdgpu driver provides a sysfs API for providing a unique ID for the GPU | ||
1375 | * The file unique_id is used for this. | ||
1376 | * This will provide a Unique ID that will persist from machine to machine | ||
1377 | * | ||
1378 | * NOTE: This will only work for GFX9 and newer. This file will be absent | ||
1379 | * on unsupported ASICs (GFX8 and older) | ||
1380 | */ | ||
1381 | static ssize_t amdgpu_get_unique_id(struct device *dev, | ||
1382 | struct device_attribute *attr, | ||
1383 | char *buf) | ||
1384 | { | ||
1385 | struct drm_device *ddev = dev_get_drvdata(dev); | ||
1386 | struct amdgpu_device *adev = ddev->dev_private; | ||
1387 | |||
1388 | if (adev->unique_id) | ||
1389 | return snprintf(buf, PAGE_SIZE, "%016llx\n", adev->unique_id); | ||
1390 | |||
1391 | return 0; | ||
1392 | } | ||
1393 | |||
1371 | static DEVICE_ATTR(power_dpm_state, S_IRUGO | S_IWUSR, amdgpu_get_dpm_state, amdgpu_set_dpm_state); | 1394 | static DEVICE_ATTR(power_dpm_state, S_IRUGO | S_IWUSR, amdgpu_get_dpm_state, amdgpu_set_dpm_state); |
1372 | static DEVICE_ATTR(power_dpm_force_performance_level, S_IRUGO | S_IWUSR, | 1395 | static DEVICE_ATTR(power_dpm_force_performance_level, S_IRUGO | S_IWUSR, |
1373 | amdgpu_get_dpm_forced_performance_level, | 1396 | amdgpu_get_dpm_forced_performance_level, |
@@ -1418,6 +1441,7 @@ static DEVICE_ATTR(pcie_bw, S_IRUGO, amdgpu_get_pcie_bw, NULL); | |||
1418 | static DEVICE_ATTR(ppfeatures, S_IRUGO | S_IWUSR, | 1441 | static DEVICE_ATTR(ppfeatures, S_IRUGO | S_IWUSR, |
1419 | amdgpu_get_ppfeature_status, | 1442 | amdgpu_get_ppfeature_status, |
1420 | amdgpu_set_ppfeature_status); | 1443 | amdgpu_set_ppfeature_status); |
1444 | static DEVICE_ATTR(unique_id, S_IRUGO, amdgpu_get_unique_id, NULL); | ||
1421 | 1445 | ||
1422 | static ssize_t amdgpu_hwmon_show_temp(struct device *dev, | 1446 | static ssize_t amdgpu_hwmon_show_temp(struct device *dev, |
1423 | struct device_attribute *attr, | 1447 | struct device_attribute *attr, |
@@ -2814,6 +2838,12 @@ int amdgpu_pm_sysfs_init(struct amdgpu_device *adev) | |||
2814 | return ret; | 2838 | return ret; |
2815 | } | 2839 | } |
2816 | } | 2840 | } |
2841 | if (adev->unique_id) | ||
2842 | ret = device_create_file(adev->dev, &dev_attr_unique_id); | ||
2843 | if (ret) { | ||
2844 | DRM_ERROR("failed to create device file unique_id\n"); | ||
2845 | return ret; | ||
2846 | } | ||
2817 | ret = amdgpu_debugfs_pm_init(adev); | 2847 | ret = amdgpu_debugfs_pm_init(adev); |
2818 | if (ret) { | 2848 | if (ret) { |
2819 | DRM_ERROR("Failed to register debugfs file for dpm!\n"); | 2849 | DRM_ERROR("Failed to register debugfs file for dpm!\n"); |
@@ -2875,6 +2905,8 @@ void amdgpu_pm_sysfs_fini(struct amdgpu_device *adev) | |||
2875 | device_remove_file(adev->dev, &dev_attr_mem_busy_percent); | 2905 | device_remove_file(adev->dev, &dev_attr_mem_busy_percent); |
2876 | if (!(adev->flags & AMD_IS_APU)) | 2906 | if (!(adev->flags & AMD_IS_APU)) |
2877 | device_remove_file(adev->dev, &dev_attr_pcie_bw); | 2907 | device_remove_file(adev->dev, &dev_attr_pcie_bw); |
2908 | if (adev->unique_id) | ||
2909 | device_remove_file(adev->dev, &dev_attr_unique_id); | ||
2878 | if ((adev->asic_type >= CHIP_VEGA10) && | 2910 | if ((adev->asic_type >= CHIP_VEGA10) && |
2879 | !(adev->flags & AMD_IS_APU)) | 2911 | !(adev->flags & AMD_IS_APU)) |
2880 | device_remove_file(adev->dev, &dev_attr_ppfeatures); | 2912 | device_remove_file(adev->dev, &dev_attr_ppfeatures); |