drm/i915: Validate that the timings are within the VRR range
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Fri, 1 Sep 2023 13:04:36 +0000 (16:04 +0300)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Wed, 20 Sep 2023 19:30:55 +0000 (22:30 +0300)
Let's assume there are some crazy displays where the high
end of the VRR range ends up being lower than the refresh
rate as determined by the actual timings. In that case
when we toggle VRR on/off we would step outside the VRR
range when toggling VRR on/off. Let's just make sure that
never happens by not using VRR in such cases. If the user
really wants VRR they should then select the timings to
land within the VRR range.

Cc: Manasi Navare <navaremanasi@chromium.org>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230901130440.2085-9-ville.syrjala@linux.intel.com
Reviewed-by: Manasi Navare <navaremanasi@chromium.org>
Reviewed-by: Mitul Golani <mitulkumar.ajitkumar.golani@intel.com>
drivers/gpu/drm/i915/display/intel_vrr.c

index 6ef782538337065d861fbd12302d904c47beec0d..12731ad725a8c2a78543e36fc16b2add04dbc442 100644 (file)
@@ -117,10 +117,10 @@ intel_vrr_compute_config(struct intel_crtc_state *crtc_state,
        const struct drm_display_info *info = &connector->base.display_info;
        int vmin, vmax;
 
-       if (!intel_vrr_is_capable(connector))
+       if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE)
                return;
 
-       if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE)
+       if (!intel_vrr_is_in_range(connector, drm_mode_vrefresh(adjusted_mode)))
                return;
 
        vmin = DIV_ROUND_UP(adjusted_mode->crtc_clock * 1000,