@@ -711,12 +711,13 @@ void dpu_crtc_complete_commit(struct drm_crtc *crtc)
711
711
_dpu_crtc_complete_flip (crtc );
712
712
}
713
713
714
- static void _dpu_crtc_setup_lm_bounds (struct drm_crtc * crtc ,
714
+ static int _dpu_crtc_check_and_setup_lm_bounds (struct drm_crtc * crtc ,
715
715
struct drm_crtc_state * state )
716
716
{
717
717
struct dpu_crtc_state * cstate = to_dpu_crtc_state (state );
718
718
struct drm_display_mode * adj_mode = & state -> adjusted_mode ;
719
719
u32 crtc_split_width = adj_mode -> hdisplay / cstate -> num_mixers ;
720
+ struct dpu_kms * dpu_kms = _dpu_crtc_get_kms (crtc );
720
721
int i ;
721
722
722
723
for (i = 0 ; i < cstate -> num_mixers ; i ++ ) {
@@ -727,7 +728,12 @@ static void _dpu_crtc_setup_lm_bounds(struct drm_crtc *crtc,
727
728
r -> y2 = adj_mode -> vdisplay ;
728
729
729
730
trace_dpu_crtc_setup_lm_bounds (DRMID (crtc ), i , r );
731
+
732
+ if (drm_rect_width (r ) > dpu_kms -> catalog -> caps -> max_mixer_width )
733
+ return - E2BIG ;
730
734
}
735
+
736
+ return 0 ;
731
737
}
732
738
733
739
static void _dpu_crtc_get_pcc_coeff (struct drm_crtc_state * state ,
@@ -803,7 +809,7 @@ static void dpu_crtc_atomic_begin(struct drm_crtc *crtc,
803
809
804
810
DRM_DEBUG_ATOMIC ("crtc%d\n" , crtc -> base .id );
805
811
806
- _dpu_crtc_setup_lm_bounds (crtc , crtc -> state );
812
+ _dpu_crtc_check_and_setup_lm_bounds (crtc , crtc -> state );
807
813
808
814
/* encoder will trigger pending mask now */
809
815
drm_for_each_encoder_mask (encoder , crtc -> dev , crtc -> state -> encoder_mask )
@@ -1189,8 +1195,11 @@ static int dpu_crtc_atomic_check(struct drm_crtc *crtc,
1189
1195
if (crtc_state -> active_changed )
1190
1196
crtc_state -> mode_changed = true;
1191
1197
1192
- if (cstate -> num_mixers )
1193
- _dpu_crtc_setup_lm_bounds (crtc , crtc_state );
1198
+ if (cstate -> num_mixers ) {
1199
+ rc = _dpu_crtc_check_and_setup_lm_bounds (crtc , crtc_state );
1200
+ if (rc )
1201
+ return rc ;
1202
+ }
1194
1203
1195
1204
/* FIXME: move this to dpu_plane_atomic_check? */
1196
1205
drm_atomic_crtc_state_for_each_plane_state (plane , pstate , crtc_state ) {
0 commit comments