drm/amd/pm: only check sriov vf flag once when creating hwmon sysfs
authorMa Jun <Jun.Ma2@amd.com>
Thu, 26 Oct 2023 01:58:15 +0000 (09:58 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 3 Nov 2023 16:18:32 +0000 (12:18 -0400)
The current code checks sriov vf flag multiple times when creating
hwmon sysfs. So fix it.

Signed-off-by: Ma Jun <Jun.Ma2@amd.com>
Reviewed-by: Yang Wang <kevinyang.wang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/pm/amdgpu_pm.c

index 517b9fb4624c4586406fb5c883f5c6b775bf2c9f..4ba9195c83c5d81e308d0dcc661ba97784a4f79b 100644 (file)
@@ -3288,10 +3288,6 @@ static umode_t hwmon_attributes_visible(struct kobject *kobj,
        uint32_t gc_ver = amdgpu_ip_version(adev, GC_HWIP, 0);
        uint32_t tmp;
 
-       /* under multi-vf mode, the hwmon attributes are all not supported */
-       if (amdgpu_sriov_vf(adev) && !amdgpu_sriov_is_pp_one_vf(adev))
-               return 0;
-
        /* under pp one vf mode manage of hwmon attributes is not supported */
        if (amdgpu_sriov_is_pp_one_vf(adev))
                effective_mode &= ~S_IWUSR;
@@ -4162,6 +4158,7 @@ err_out:
 
 int amdgpu_pm_sysfs_init(struct amdgpu_device *adev)
 {
+       enum amdgpu_sriov_vf_mode mode;
        uint32_t mask = 0;
        int ret;
 
@@ -4173,17 +4170,21 @@ int amdgpu_pm_sysfs_init(struct amdgpu_device *adev)
        if (adev->pm.dpm_enabled == 0)
                return 0;
 
-       adev->pm.int_hwmon_dev = hwmon_device_register_with_groups(adev->dev,
-                                                                  DRIVER_NAME, adev,
-                                                                  hwmon_groups);
-       if (IS_ERR(adev->pm.int_hwmon_dev)) {
-               ret = PTR_ERR(adev->pm.int_hwmon_dev);
-               dev_err(adev->dev,
-                       "Unable to register hwmon device: %d\n", ret);
-               return ret;
+       mode = amdgpu_virt_get_sriov_vf_mode(adev);
+
+       /* under multi-vf mode, the hwmon attributes are all not supported */
+       if (mode != SRIOV_VF_MODE_MULTI_VF) {
+               adev->pm.int_hwmon_dev = hwmon_device_register_with_groups(adev->dev,
+                                                                                                               DRIVER_NAME, adev,
+                                                                                                               hwmon_groups);
+               if (IS_ERR(adev->pm.int_hwmon_dev)) {
+                       ret = PTR_ERR(adev->pm.int_hwmon_dev);
+                       dev_err(adev->dev, "Unable to register hwmon device: %d\n", ret);
+                       return ret;
+               }
        }
 
-       switch (amdgpu_virt_get_sriov_vf_mode(adev)) {
+       switch (mode) {
        case SRIOV_VF_MODE_ONE_VF:
                mask = ATTR_FLAG_ONEVF;
                break;