drm/amdgpu: enable sysfs interface for powerplay
authorRex Zhu <Rex.Zhu@amd.com>
Tue, 10 Nov 2015 23:29:11 +0000 (18:29 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 21 Dec 2015 21:42:27 +0000 (16:42 -0500)
Same interface exposed in pre-powerplay dpm code.

Signed-off-by: Rex Zhu <Rex.Zhu@amd.com>
Reviewed-by: Jammy Zhou <Jammy.Zhou@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c

index 235fae54724b6b6856ffbfc8935669742bfa3b5d..40ae30530a01ee3421498811c76a1f63418c189f 100644 (file)
@@ -184,10 +184,10 @@ static ssize_t amdgpu_hwmon_show_temp(struct device *dev,
        struct amdgpu_device *adev = dev_get_drvdata(dev);
        int temp;
 
-       if (adev->pm.funcs->get_temperature)
-               temp = amdgpu_dpm_get_temperature(adev);
-       else
+       if (!amdgpu_powerplay && !adev->pm.funcs->get_temperature)
                temp = 0;
+       else
+               temp = amdgpu_dpm_get_temperature(adev);
 
        return snprintf(buf, PAGE_SIZE, "%d\n", temp);
 }
@@ -215,8 +215,10 @@ static ssize_t amdgpu_hwmon_get_pwm1_enable(struct device *dev,
        struct amdgpu_device *adev = dev_get_drvdata(dev);
        u32 pwm_mode = 0;
 
-       if (adev->pm.funcs->get_fan_control_mode)
-               pwm_mode = amdgpu_dpm_get_fan_control_mode(adev);
+       if (!amdgpu_powerplay && !adev->pm.funcs->get_fan_control_mode)
+               return -EINVAL;
+
+       pwm_mode = amdgpu_dpm_get_fan_control_mode(adev);
 
        /* never 0 (full-speed), fuse or smc-controlled always */
        return sprintf(buf, "%i\n", pwm_mode == FDO_PWM_MODE_STATIC ? 1 : 2);
@@ -231,7 +233,7 @@ static ssize_t amdgpu_hwmon_set_pwm1_enable(struct device *dev,
        int err;
        int value;
 
-       if (!adev->pm.funcs->set_fan_control_mode)
+       if (!amdgpu_powerplay && !adev->pm.funcs->set_fan_control_mode)
                return -EINVAL;
 
        err = kstrtoint(buf, 10, &value);
@@ -328,9 +330,6 @@ static umode_t hwmon_attributes_visible(struct kobject *kobj,
        struct amdgpu_device *adev = dev_get_drvdata(dev);
        umode_t effective_mode = attr->mode;
 
-       if (amdgpu_powerplay)
-               return 0;  /* to do */
-
        /* Skip limit attributes if DPM is not enabled */
        if (!adev->pm.dpm_enabled &&
            (attr == &sensor_dev_attr_temp1_crit.dev_attr.attr ||
@@ -341,6 +340,9 @@ static umode_t hwmon_attributes_visible(struct kobject *kobj,
             attr == &sensor_dev_attr_pwm1_min.dev_attr.attr))
                return 0;
 
+       if (amdgpu_powerplay)
+               return effective_mode;
+
        /* Skip fan attributes if fan is not present */
        if (adev->pm.no_fan &&
            (attr == &sensor_dev_attr_pwm1.dev_attr.attr ||