aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
index 5ed5598997e9..8de765dee3e7 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
@@ -113,6 +113,10 @@ static ssize_t amdgpu_get_dpm_forced_performance_level(struct device *dev,
113 struct drm_device *ddev = dev_get_drvdata(dev); 113 struct drm_device *ddev = dev_get_drvdata(dev);
114 struct amdgpu_device *adev = ddev->dev_private; 114 struct amdgpu_device *adev = ddev->dev_private;
115 115
116 if ((adev->flags & AMD_IS_PX) &&
117 (ddev->switch_power_state != DRM_SWITCH_POWER_ON))
118 return snprintf(buf, PAGE_SIZE, "off\n");
119
116 if (adev->pp_enabled) { 120 if (adev->pp_enabled) {
117 enum amd_dpm_forced_level level; 121 enum amd_dpm_forced_level level;
118 122
@@ -140,6 +144,11 @@ static ssize_t amdgpu_set_dpm_forced_performance_level(struct device *dev,
140 enum amdgpu_dpm_forced_level level; 144 enum amdgpu_dpm_forced_level level;
141 int ret = 0; 145 int ret = 0;
142 146
147 /* Can't force performance level when the card is off */
148 if ((adev->flags & AMD_IS_PX) &&
149 (ddev->switch_power_state != DRM_SWITCH_POWER_ON))
150 return -EINVAL;
151
143 if (strncmp("low", buf, strlen("low")) == 0) { 152 if (strncmp("low", buf, strlen("low")) == 0) {
144 level = AMDGPU_DPM_FORCED_LEVEL_LOW; 153 level = AMDGPU_DPM_FORCED_LEVEL_LOW;
145 } else if (strncmp("high", buf, strlen("high")) == 0) { 154 } else if (strncmp("high", buf, strlen("high")) == 0) {
@@ -181,8 +190,14 @@ static ssize_t amdgpu_hwmon_show_temp(struct device *dev,
181 char *buf) 190 char *buf)
182{ 191{
183 struct amdgpu_device *adev = dev_get_drvdata(dev); 192 struct amdgpu_device *adev = dev_get_drvdata(dev);
193 struct drm_device *ddev = adev->ddev;
184 int temp; 194 int temp;
185 195
196 /* Can't get temperature when the card is off */
197 if ((adev->flags & AMD_IS_PX) &&
198 (ddev->switch_power_state != DRM_SWITCH_POWER_ON))
199 return -EINVAL;
200
186 if (!adev->pp_enabled && !adev->pm.funcs->get_temperature) 201 if (!adev->pp_enabled && !adev->pm.funcs->get_temperature)
187 temp = 0; 202 temp = 0;
188 else 203 else
@@ -846,12 +861,16 @@ static int amdgpu_debugfs_pm_info(struct seq_file *m, void *data)
846 struct drm_info_node *node = (struct drm_info_node *) m->private; 861 struct drm_info_node *node = (struct drm_info_node *) m->private;
847 struct drm_device *dev = node->minor->dev; 862 struct drm_device *dev = node->minor->dev;
848 struct amdgpu_device *adev = dev->dev_private; 863 struct amdgpu_device *adev = dev->dev_private;
864 struct drm_device *ddev = adev->ddev;
849 865
850 if (!adev->pm.dpm_enabled) { 866 if (!adev->pm.dpm_enabled) {
851 seq_printf(m, "dpm not enabled\n"); 867 seq_printf(m, "dpm not enabled\n");
852 return 0; 868 return 0;
853 } 869 }
854 if (adev->pp_enabled) { 870 if ((adev->flags & AMD_IS_PX) &&
871 (ddev->switch_power_state != DRM_SWITCH_POWER_ON)) {
872 seq_printf(m, "PX asic powered off\n");
873 } else if (adev->pp_enabled) {
855 amdgpu_dpm_debugfs_print_current_performance_level(adev, m); 874 amdgpu_dpm_debugfs_print_current_performance_level(adev, m);
856 } else { 875 } else {
857 mutex_lock(&adev->pm.mutex); 876 mutex_lock(&adev->pm.mutex);