diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c | 78 |
1 files changed, 51 insertions, 27 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c index 8b7efd0a7028..2b546567853b 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c | |||
@@ -159,12 +159,16 @@ static ssize_t amdgpu_get_dpm_state(struct device *dev, | |||
159 | struct amdgpu_device *adev = ddev->dev_private; | 159 | struct amdgpu_device *adev = ddev->dev_private; |
160 | enum amd_pm_state_type pm; | 160 | enum amd_pm_state_type pm; |
161 | 161 | ||
162 | if (is_support_sw_smu(adev) && adev->smu.ppt_funcs->get_current_power_state) | 162 | if (is_support_sw_smu(adev)) { |
163 | pm = amdgpu_smu_get_current_power_state(adev); | 163 | if (adev->smu.ppt_funcs->get_current_power_state) |
164 | else if (adev->powerplay.pp_funcs->get_current_power_state) | 164 | pm = amdgpu_smu_get_current_power_state(adev); |
165 | else | ||
166 | pm = adev->pm.dpm.user_state; | ||
167 | } else if (adev->powerplay.pp_funcs->get_current_power_state) { | ||
165 | pm = amdgpu_dpm_get_current_power_state(adev); | 168 | pm = amdgpu_dpm_get_current_power_state(adev); |
166 | else | 169 | } else { |
167 | pm = adev->pm.dpm.user_state; | 170 | pm = adev->pm.dpm.user_state; |
171 | } | ||
168 | 172 | ||
169 | return snprintf(buf, PAGE_SIZE, "%s\n", | 173 | return snprintf(buf, PAGE_SIZE, "%s\n", |
170 | (pm == POWER_STATE_TYPE_BATTERY) ? "battery" : | 174 | (pm == POWER_STATE_TYPE_BATTERY) ? "battery" : |
@@ -191,7 +195,11 @@ static ssize_t amdgpu_set_dpm_state(struct device *dev, | |||
191 | goto fail; | 195 | goto fail; |
192 | } | 196 | } |
193 | 197 | ||
194 | if (adev->powerplay.pp_funcs->dispatch_tasks) { | 198 | if (is_support_sw_smu(adev)) { |
199 | mutex_lock(&adev->pm.mutex); | ||
200 | adev->pm.dpm.user_state = state; | ||
201 | mutex_unlock(&adev->pm.mutex); | ||
202 | } else if (adev->powerplay.pp_funcs->dispatch_tasks) { | ||
195 | amdgpu_dpm_dispatch_task(adev, AMD_PP_TASK_ENABLE_USER_STATE, &state); | 203 | amdgpu_dpm_dispatch_task(adev, AMD_PP_TASK_ENABLE_USER_STATE, &state); |
196 | } else { | 204 | } else { |
197 | mutex_lock(&adev->pm.mutex); | 205 | mutex_lock(&adev->pm.mutex); |
@@ -1734,7 +1742,7 @@ static ssize_t amdgpu_hwmon_get_fan1_input(struct device *dev, | |||
1734 | return -EINVAL; | 1742 | return -EINVAL; |
1735 | 1743 | ||
1736 | if (is_support_sw_smu(adev)) { | 1744 | if (is_support_sw_smu(adev)) { |
1737 | err = smu_get_current_rpm(&adev->smu, &speed); | 1745 | err = smu_get_fan_speed_rpm(&adev->smu, &speed); |
1738 | if (err) | 1746 | if (err) |
1739 | return err; | 1747 | return err; |
1740 | } else if (adev->powerplay.pp_funcs->get_fan_speed_rpm) { | 1748 | } else if (adev->powerplay.pp_funcs->get_fan_speed_rpm) { |
@@ -1794,7 +1802,7 @@ static ssize_t amdgpu_hwmon_get_fan1_target(struct device *dev, | |||
1794 | return -EINVAL; | 1802 | return -EINVAL; |
1795 | 1803 | ||
1796 | if (is_support_sw_smu(adev)) { | 1804 | if (is_support_sw_smu(adev)) { |
1797 | err = smu_get_current_rpm(&adev->smu, &rpm); | 1805 | err = smu_get_fan_speed_rpm(&adev->smu, &rpm); |
1798 | if (err) | 1806 | if (err) |
1799 | return err; | 1807 | return err; |
1800 | } else if (adev->powerplay.pp_funcs->get_fan_speed_rpm) { | 1808 | } else if (adev->powerplay.pp_funcs->get_fan_speed_rpm) { |
@@ -3067,28 +3075,44 @@ static int amdgpu_debugfs_pm_info_pp(struct seq_file *m, struct amdgpu_device *a | |||
3067 | if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_ENABLED_SMC_FEATURES_MASK, (void *)&value64, &size)) | 3075 | if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_ENABLED_SMC_FEATURES_MASK, (void *)&value64, &size)) |
3068 | seq_printf(m, "SMC Feature Mask: 0x%016llx\n", value64); | 3076 | seq_printf(m, "SMC Feature Mask: 0x%016llx\n", value64); |
3069 | 3077 | ||
3070 | /* UVD clocks */ | 3078 | if (adev->asic_type > CHIP_VEGA20) { |
3071 | if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_UVD_POWER, (void *)&value, &size)) { | 3079 | /* VCN clocks */ |
3072 | if (!value) { | 3080 | if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_VCN_POWER_STATE, (void *)&value, &size)) { |
3073 | seq_printf(m, "UVD: Disabled\n"); | 3081 | if (!value) { |
3074 | } else { | 3082 | seq_printf(m, "VCN: Disabled\n"); |
3075 | seq_printf(m, "UVD: Enabled\n"); | 3083 | } else { |
3076 | if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_UVD_DCLK, (void *)&value, &size)) | 3084 | seq_printf(m, "VCN: Enabled\n"); |
3077 | seq_printf(m, "\t%u MHz (DCLK)\n", value/100); | 3085 | if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_UVD_DCLK, (void *)&value, &size)) |
3078 | if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_UVD_VCLK, (void *)&value, &size)) | 3086 | seq_printf(m, "\t%u MHz (DCLK)\n", value/100); |
3079 | seq_printf(m, "\t%u MHz (VCLK)\n", value/100); | 3087 | if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_UVD_VCLK, (void *)&value, &size)) |
3088 | seq_printf(m, "\t%u MHz (VCLK)\n", value/100); | ||
3089 | } | ||
3080 | } | 3090 | } |
3081 | } | 3091 | seq_printf(m, "\n"); |
3082 | seq_printf(m, "\n"); | 3092 | } else { |
3093 | /* UVD clocks */ | ||
3094 | if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_UVD_POWER, (void *)&value, &size)) { | ||
3095 | if (!value) { | ||
3096 | seq_printf(m, "UVD: Disabled\n"); | ||
3097 | } else { | ||
3098 | seq_printf(m, "UVD: Enabled\n"); | ||
3099 | if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_UVD_DCLK, (void *)&value, &size)) | ||
3100 | seq_printf(m, "\t%u MHz (DCLK)\n", value/100); | ||
3101 | if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_UVD_VCLK, (void *)&value, &size)) | ||
3102 | seq_printf(m, "\t%u MHz (VCLK)\n", value/100); | ||
3103 | } | ||
3104 | } | ||
3105 | seq_printf(m, "\n"); | ||
3083 | 3106 | ||
3084 | /* VCE clocks */ | 3107 | /* VCE clocks */ |
3085 | if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_VCE_POWER, (void *)&value, &size)) { | 3108 | if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_VCE_POWER, (void *)&value, &size)) { |
3086 | if (!value) { | 3109 | if (!value) { |
3087 | seq_printf(m, "VCE: Disabled\n"); | 3110 | seq_printf(m, "VCE: Disabled\n"); |
3088 | } else { | 3111 | } else { |
3089 | seq_printf(m, "VCE: Enabled\n"); | 3112 | seq_printf(m, "VCE: Enabled\n"); |
3090 | if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_VCE_ECCLK, (void *)&value, &size)) | 3113 | if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_VCE_ECCLK, (void *)&value, &size)) |
3091 | seq_printf(m, "\t%u MHz (ECCLK)\n", value/100); | 3114 | seq_printf(m, "\t%u MHz (ECCLK)\n", value/100); |
3115 | } | ||
3092 | } | 3116 | } |
3093 | } | 3117 | } |
3094 | 3118 | ||