[PATCH 24/28] drm/i915/vblank: Add crtc active timings for fixed_rr mode
Ankit Nautiyal
ankit.k.nautiyal at intel.com
Mon Feb 3 12:38:36 UTC 2025
Make provision for fixed refresh rate timings while updating the
crtc timings for vrr.
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal at intel.com>
---
drivers/gpu/drm/i915/display/intel_vblank.c | 5 +++++
drivers/gpu/drm/i915/display/intel_vrr.c | 7 ++++++-
drivers/gpu/drm/i915/display/intel_vrr.h | 2 ++
3 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/display/intel_vblank.c b/drivers/gpu/drm/i915/display/intel_vblank.c
index 3ed814245b61..8abcf4c2cfe7 100644
--- a/drivers/gpu/drm/i915/display/intel_vblank.c
+++ b/drivers/gpu/drm/i915/display/intel_vblank.c
@@ -523,6 +523,11 @@ static void intel_crtc_active_timings(struct drm_display_mode *mode,
mode->crtc_vblank_end = intel_vrr_vmax_vtotal(crtc_state);
mode->crtc_vblank_start = intel_vrr_vmin_vblank_start(crtc_state);
*vmax_vblank_start = intel_vrr_vmax_vblank_start(crtc_state);
+ } else if (vrr_mode == INTEL_VRRTG_MODE_FIXED_RR) {
+ mode->crtc_vtotal = intel_vrr_fixed_rr_vtotal(crtc_state);
+ mode->crtc_vblank_end = intel_vrr_fixed_rr_vtotal(crtc_state);
+ mode->crtc_vblank_start = intel_vrr_vmin_vblank_start(crtc_state);
+ *vmax_vblank_start = intel_vrr_fixed_rr_vmax_vblank_start(crtc_state);
} else {
MISSING_CASE(vrr_mode);
}
diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
index c852de748ce3..e44335cdc383 100644
--- a/drivers/gpu/drm/i915/display/intel_vrr.c
+++ b/drivers/gpu/drm/i915/display/intel_vrr.c
@@ -250,7 +250,6 @@ void intel_vrr_compute_vrr_timings(struct intel_crtc_state *crtc_state)
* For fixed refresh rate mode Vmin, Vmax and Flipline all are set to
* Vtotal value.
*/
-static
int intel_vrr_fixed_rr_vtotal(const struct intel_crtc_state *crtc_state)
{
struct intel_display *display = to_intel_display(crtc_state);
@@ -263,6 +262,12 @@ int intel_vrr_fixed_rr_vtotal(const struct intel_crtc_state *crtc_state)
intel_vrr_real_vblank_delay(crtc_state);
}
+int intel_vrr_fixed_rr_vmax_vblank_start(const struct intel_crtc_state *crtc_state)
+{
+ return intel_vrr_fixed_rr_vtotal(crtc_state) -
+ intel_vrr_vblank_exit_length(crtc_state);
+}
+
static
int intel_vrr_fixed_rr_vmax(const struct intel_crtc_state *crtc_state)
{
diff --git a/drivers/gpu/drm/i915/display/intel_vrr.h b/drivers/gpu/drm/i915/display/intel_vrr.h
index 5ae8d6409f1a..9ba988af703a 100644
--- a/drivers/gpu/drm/i915/display/intel_vrr.h
+++ b/drivers/gpu/drm/i915/display/intel_vrr.h
@@ -35,5 +35,7 @@ int intel_vrr_vmin_vblank_start(const struct intel_crtc_state *crtc_state);
int intel_vrr_vblank_delay(const struct intel_crtc_state *crtc_state);
bool intel_vrr_is_enabled(const struct intel_crtc_state *crtc_state);
bool intel_vrr_is_mode_vrr(const struct intel_crtc_state *crtc_state);
+int intel_vrr_fixed_rr_vtotal(const struct intel_crtc_state *crtc_state);
+int intel_vrr_fixed_rr_vmax_vblank_start(const struct intel_crtc_state *crtc_state);
#endif /* __INTEL_VRR_H__ */
--
2.45.2
More information about the Intel-gfx
mailing list