drm/amd: Hide unsupported power attributes
authorMario Limonciello <mario.limonciello@amd.com>
Thu, 10 Aug 2023 10:32:02 +0000 (05:32 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 15 Aug 2023 22:08:30 +0000 (18:08 -0400)
Some ASICS only offer one type of power attribute, so in the visible
callback check whether the attributes are supported and hide if not
supported.

Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/pm/amdgpu_pm.c

index 8133d96..5b1d73b 100644 (file)
@@ -3179,6 +3179,7 @@ static umode_t hwmon_attributes_visible(struct kobject *kobj,
        struct amdgpu_device *adev = dev_get_drvdata(dev);
        umode_t effective_mode = attr->mode;
        uint32_t gc_ver = adev->ip_versions[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))
@@ -3264,6 +3265,14 @@ static umode_t hwmon_attributes_visible(struct kobject *kobj,
            (attr == &sensor_dev_attr_power1_average.dev_attr.attr))
                return 0;
 
+       /* not all products support both average and instantaneous */
+       if (attr == &sensor_dev_attr_power1_average.dev_attr.attr &&
+           amdgpu_hwmon_get_sensor_generic(adev, AMDGPU_PP_SENSOR_GPU_AVG_POWER, (void *)&tmp) == -EOPNOTSUPP)
+               return 0;
+       if (attr == &sensor_dev_attr_power1_input.dev_attr.attr &&
+           amdgpu_hwmon_get_sensor_generic(adev, AMDGPU_PP_SENSOR_GPU_INPUT_POWER, (void *)&tmp) == -EOPNOTSUPP)
+               return 0;
+
        /* hide max/min values if we can't both query and manage the fan */
        if (((amdgpu_dpm_set_fan_speed_pwm(adev, U32_MAX) == -EOPNOTSUPP) &&
              (amdgpu_dpm_get_fan_speed_pwm(adev, NULL) == -EOPNOTSUPP) &&