File tree Expand file tree Collapse file tree 1 file changed +28
-0
lines changed Expand file tree Collapse file tree 1 file changed +28
-0
lines changed Original file line number Diff line number Diff line change @@ -574,6 +574,30 @@ mode_valid(struct drm_atomic_state *state)
574574 return 0 ;
575575}
576576
577+ static int drm_atomic_check_valid_clones (struct drm_atomic_state * state ,
578+ struct drm_crtc * crtc )
579+ {
580+ struct drm_encoder * drm_enc ;
581+ struct drm_crtc_state * crtc_state = drm_atomic_get_new_crtc_state (state ,
582+ crtc );
583+
584+ drm_for_each_encoder_mask (drm_enc , crtc -> dev , crtc_state -> encoder_mask ) {
585+ if (!drm_enc -> possible_clones ) {
586+ DRM_DEBUG ("enc%d possible_clones is 0\n" , drm_enc -> base .id );
587+ continue ;
588+ }
589+
590+ if ((crtc_state -> encoder_mask & drm_enc -> possible_clones ) !=
591+ crtc_state -> encoder_mask ) {
592+ DRM_DEBUG ("crtc%d failed valid clone check for mask 0x%x\n" ,
593+ crtc -> base .id , crtc_state -> encoder_mask );
594+ return - EINVAL ;
595+ }
596+ }
597+
598+ return 0 ;
599+ }
600+
577601/**
578602 * drm_atomic_helper_check_modeset - validate state object for modeset changes
579603 * @dev: DRM device
@@ -745,6 +769,10 @@ drm_atomic_helper_check_modeset(struct drm_device *dev,
745769 ret = drm_atomic_add_affected_planes (state , crtc );
746770 if (ret != 0 )
747771 return ret ;
772+
773+ ret = drm_atomic_check_valid_clones (state , crtc );
774+ if (ret != 0 )
775+ return ret ;
748776 }
749777
750778 /*
You can’t perform that action at this time.
0 commit comments