@@ -248,6 +248,8 @@ static void amdgpu_dm_crtc_vblank_control_worker(struct work_struct *work)
248248 struct vblank_control_work * vblank_work =
249249 container_of (work , struct vblank_control_work , work );
250250 struct amdgpu_display_manager * dm = vblank_work -> dm ;
251+ struct amdgpu_device * adev = drm_to_adev (dm -> ddev );
252+ int r ;
251253
252254 mutex_lock (& dm -> dc_lock );
253255
@@ -277,7 +279,16 @@ static void amdgpu_dm_crtc_vblank_control_worker(struct work_struct *work)
277279
278280 if (dm -> active_vblank_irq_count == 0 ) {
279281 dc_post_update_surfaces_to_stream (dm -> dc );
282+
283+ r = amdgpu_dpm_pause_power_profile (adev , true);
284+ if (r )
285+ dev_warn (adev -> dev , "failed to set default power profile mode\n" );
286+
280287 dc_allow_idle_optimizations (dm -> dc , true);
288+
289+ r = amdgpu_dpm_pause_power_profile (adev , false);
290+ if (r )
291+ dev_warn (adev -> dev , "failed to restore the power profile mode\n" );
281292 }
282293
283294 mutex_unlock (& dm -> dc_lock );
@@ -297,8 +308,12 @@ static inline int amdgpu_dm_crtc_set_vblank(struct drm_crtc *crtc, bool enable)
297308 int irq_type ;
298309 int rc = 0 ;
299310
300- if (acrtc -> otg_inst == -1 )
301- goto skip ;
311+ if (enable && !acrtc -> base .enabled ) {
312+ drm_dbg_vbl (crtc -> dev ,
313+ "Reject vblank enable on unconfigured CRTC %d (enabled=%d)\n" ,
314+ acrtc -> crtc_id , acrtc -> base .enabled );
315+ return - EINVAL ;
316+ }
302317
303318 irq_type = amdgpu_display_crtc_idx_to_irq_type (adev , acrtc -> crtc_id );
304319
@@ -383,7 +398,7 @@ static inline int amdgpu_dm_crtc_set_vblank(struct drm_crtc *crtc, bool enable)
383398 return rc ;
384399 }
385400#endif
386- skip :
401+
387402 if (amdgpu_in_reset (adev ))
388403 return 0 ;
389404
0 commit comments