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)
574
574
return 0 ;
575
575
}
576
576
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
+
577
601
/**
578
602
* drm_atomic_helper_check_modeset - validate state object for modeset changes
579
603
* @dev: DRM device
@@ -745,6 +769,10 @@ drm_atomic_helper_check_modeset(struct drm_device *dev,
745
769
ret = drm_atomic_add_affected_planes (state , crtc );
746
770
if (ret != 0 )
747
771
return ret ;
772
+
773
+ ret = drm_atomic_check_valid_clones (state , crtc );
774
+ if (ret != 0 )
775
+ return ret ;
748
776
}
749
777
750
778
/*
You can’t perform that action at this time.
0 commit comments