@@ -109,9 +109,16 @@ static bool pre_commit_is_vrr_active(struct intel_atomic_state *state,
109
109
return old_crtc_state -> vrr .enable && !intel_crtc_vrr_disabling (state , crtc );
110
110
}
111
111
112
- static int dsb_vblank_delay (const struct intel_crtc_state * crtc_state )
112
+ static int dsb_vblank_delay (struct intel_atomic_state * state ,
113
+ struct intel_crtc * crtc )
113
114
{
114
- return intel_mode_vblank_delay (& crtc_state -> hw .adjusted_mode );
115
+ const struct intel_crtc_state * crtc_state =
116
+ intel_pre_commit_crtc_state (state , crtc );
117
+
118
+ if (pre_commit_is_vrr_active (state , crtc ))
119
+ return intel_vrr_vblank_delay (crtc_state );
120
+ else
121
+ return intel_mode_vblank_delay (& crtc_state -> hw .adjusted_mode );
115
122
}
116
123
117
124
static int dsb_vtotal (struct intel_atomic_state * state ,
@@ -520,10 +527,11 @@ void intel_dsb_vblank_evade(struct intel_atomic_state *state,
520
527
intel_pre_commit_crtc_state (state , crtc );
521
528
/* FIXME calibrate sensibly */
522
529
int latency = intel_usecs_to_scanlines (& crtc_state -> hw .adjusted_mode , 20 );
523
- int vblank_delay = dsb_vblank_delay (crtc_state );
524
530
int start , end ;
525
531
526
532
if (pre_commit_is_vrr_active (state , crtc )) {
533
+ int vblank_delay = intel_vrr_vblank_delay (crtc_state );
534
+
527
535
end = intel_vrr_vmin_vblank_start (crtc_state );
528
536
start = end - vblank_delay - latency ;
529
537
intel_dsb_wait_scanline_out (state , dsb , start , end );
@@ -532,6 +540,8 @@ void intel_dsb_vblank_evade(struct intel_atomic_state *state,
532
540
start = end - vblank_delay - latency ;
533
541
intel_dsb_wait_scanline_out (state , dsb , start , end );
534
542
} else {
543
+ int vblank_delay = intel_mode_vblank_delay (& crtc_state -> hw .adjusted_mode );
544
+
535
545
end = intel_mode_vblank_start (& crtc_state -> hw .adjusted_mode );
536
546
start = end - vblank_delay - latency ;
537
547
intel_dsb_wait_scanline_out (state , dsb , start , end );
@@ -612,7 +622,7 @@ void intel_dsb_wait_vblank_delay(struct intel_atomic_state *state,
612
622
const struct intel_crtc_state * crtc_state =
613
623
intel_pre_commit_crtc_state (state , crtc );
614
624
int usecs = intel_scanlines_to_usecs (& crtc_state -> hw .adjusted_mode ,
615
- dsb_vblank_delay (crtc_state )) + 1 ;
625
+ dsb_vblank_delay (state , crtc )) + 1 ;
616
626
617
627
intel_dsb_wait_usec (dsb , usecs );
618
628
}
0 commit comments