From: Ville Syrjälä Date: Mon, 20 Oct 2025 18:50:28 +0000 (+0300) Subject: drm/i915/vrr: Extract intel_vrr_tg_disable() X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c4b44d182030edd7acefbfb7124dcb10a775f697;p=thirdparty%2Fkernel%2Flinux.git drm/i915/vrr: Extract intel_vrr_tg_disable() Now that we always disable the VRR timing generator the same way we can extract the duplicated code into a helper. Signed-off-by: Ville Syrjälä Link: https://patchwork.freedesktop.org/patch/msgid/20251020185038.4272-13-ville.syrjala@linux.intel.com Reviewed-by: Ankit Nautiyal --- diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c index 19b38ad771896..3ed6a56fb7795 100644 --- a/drivers/gpu/drm/i915/display/intel_vrr.c +++ b/drivers/gpu/drm/i915/display/intel_vrr.c @@ -692,6 +692,22 @@ static void intel_vrr_set_vrr_timings(const struct intel_crtc_state *crtc_state) intel_vrr_hw_flipline(crtc_state) - 1); } +static void intel_vrr_tg_disable(const struct intel_crtc_state *old_crtc_state) +{ + struct intel_display *display = to_intel_display(old_crtc_state); + enum transcoder cpu_transcoder = old_crtc_state->cpu_transcoder; + + intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder), + trans_vrr_ctl(old_crtc_state)); + + if (intel_de_wait_for_clear(display, + TRANS_VRR_STATUS(display, cpu_transcoder), + VRR_STATUS_VRR_EN_LIVE, 1000)) + drm_err(display->drm, "Timed out waiting for VRR live status to clear\n"); + + intel_de_write(display, TRANS_PUSH(display, cpu_transcoder), 0); +} + void intel_vrr_enable(const struct intel_crtc_state *crtc_state) { struct intel_display *display = to_intel_display(crtc_state); @@ -717,29 +733,15 @@ void intel_vrr_enable(const struct intel_crtc_state *crtc_state) } } -static void intel_vrr_wait_for_live_status_clear(struct intel_display *display, - enum transcoder cpu_transcoder) -{ - if (intel_de_wait_for_clear(display, - TRANS_VRR_STATUS(display, cpu_transcoder), - VRR_STATUS_VRR_EN_LIVE, 1000)) - drm_err(display->drm, "Timed out waiting for VRR live status to clear\n"); -} - void intel_vrr_disable(const struct intel_crtc_state *old_crtc_state) { struct intel_display *display = to_intel_display(old_crtc_state); - enum transcoder cpu_transcoder = old_crtc_state->cpu_transcoder; if (!old_crtc_state->vrr.enable) return; - if (!intel_vrr_always_use_vrr_tg(display)) { - intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder), - trans_vrr_ctl(old_crtc_state)); - intel_vrr_wait_for_live_status_clear(display, cpu_transcoder); - intel_de_write(display, TRANS_PUSH(display, cpu_transcoder), 0); - } + if (!intel_vrr_always_use_vrr_tg(display)) + intel_vrr_tg_disable(old_crtc_state); intel_vrr_set_fixed_rr_timings(old_crtc_state); } @@ -771,7 +773,6 @@ void intel_vrr_transcoder_enable(const struct intel_crtc_state *crtc_state) void intel_vrr_transcoder_disable(const struct intel_crtc_state *crtc_state) { struct intel_display *display = to_intel_display(crtc_state); - enum transcoder cpu_transcoder = crtc_state->cpu_transcoder; if (!HAS_VRR(display)) return; @@ -779,12 +780,7 @@ void intel_vrr_transcoder_disable(const struct intel_crtc_state *crtc_state) if (!intel_vrr_possible(crtc_state)) return; - intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder), - trans_vrr_ctl(crtc_state)); - - intel_vrr_wait_for_live_status_clear(display, cpu_transcoder); - - intel_de_write(display, TRANS_PUSH(display, cpu_transcoder), 0); + intel_vrr_tg_disable(crtc_state); } bool intel_vrr_is_fixed_rr(const struct intel_crtc_state *crtc_state)