@@ -113,6 +113,10 @@ static ssize_t amdgpu_get_dpm_forced_performance_level(struct device *dev,
113
113
struct drm_device * ddev = dev_get_drvdata (dev );
114
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
120
if (adev -> pp_enabled ) {
117
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
144
enum amdgpu_dpm_forced_level level ;
141
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
152
if (strncmp ("low" , buf , strlen ("low" )) == 0 ) {
144
153
level = AMDGPU_DPM_FORCED_LEVEL_LOW ;
145
154
} else if (strncmp ("high" , buf , strlen ("high" )) == 0 ) {
@@ -181,8 +190,14 @@ static ssize_t amdgpu_hwmon_show_temp(struct device *dev,
181
190
char * buf )
182
191
{
183
192
struct amdgpu_device * adev = dev_get_drvdata (dev );
193
+ struct drm_device * ddev = adev -> ddev ;
184
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
201
if (!adev -> pp_enabled && !adev -> pm .funcs -> get_temperature )
187
202
temp = 0 ;
188
203
else
@@ -846,12 +861,16 @@ static int amdgpu_debugfs_pm_info(struct seq_file *m, void *data)
846
861
struct drm_info_node * node = (struct drm_info_node * ) m -> private ;
847
862
struct drm_device * dev = node -> minor -> dev ;
848
863
struct amdgpu_device * adev = dev -> dev_private ;
864
+ struct drm_device * ddev = adev -> ddev ;
849
865
850
866
if (!adev -> pm .dpm_enabled ) {
851
867
seq_printf (m , "dpm not enabled\n" );
852
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
874
amdgpu_dpm_debugfs_print_current_performance_level (adev , m );
856
875
} else {
857
876
mutex_lock (& adev -> pm .mutex );
0 commit comments