mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-16 21:35:07 +00:00
drm/i915: Introduce intel_vrr_{vmin,vmax}_vtotal()
On ICL/TGL vmin/vmax/flipline won't actually match the vtotal values (currently they do, but that is wrong and needs to be fixed). Add a few helpers that will compute the actual vtotal values for us. Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20241210211007.5976-5-ville.syrjala@linux.intel.com Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
This commit is contained in:
parent
51e7f44027
commit
b7eeed399b
@ -140,7 +140,7 @@ static int dsb_vtotal(struct intel_atomic_state *state,
|
||||
const struct intel_crtc_state *crtc_state = pre_commit_crtc_state(state, crtc);
|
||||
|
||||
if (pre_commit_is_vrr_active(state, crtc))
|
||||
return crtc_state->vrr.vmax;
|
||||
return intel_vrr_vmax_vtotal(crtc_state);
|
||||
else
|
||||
return intel_mode_vtotal(&crtc_state->hw.adjusted_mode);
|
||||
}
|
||||
|
@ -523,8 +523,8 @@ void intel_crtc_update_active_timings(const struct intel_crtc_state *crtc_state,
|
||||
drm_WARN_ON(display->drm,
|
||||
(mode_flags & I915_MODE_FLAG_VRR) == 0);
|
||||
|
||||
adjusted_mode.crtc_vtotal = crtc_state->vrr.vmax;
|
||||
adjusted_mode.crtc_vblank_end = crtc_state->vrr.vmax;
|
||||
adjusted_mode.crtc_vtotal = intel_vrr_vmax_vtotal(crtc_state);
|
||||
adjusted_mode.crtc_vblank_end = intel_vrr_vmax_vtotal(crtc_state);
|
||||
adjusted_mode.crtc_vblank_start = intel_vrr_vmin_vblank_start(crtc_state);
|
||||
vmax_vblank_start = intel_vrr_vmax_vblank_start(crtc_state);
|
||||
} else {
|
||||
|
@ -102,6 +102,17 @@ static int intel_vrr_vblank_exit_length(const struct intel_crtc_state *crtc_stat
|
||||
return crtc_state->vrr.pipeline_full + crtc_state->framestart_delay + 1;
|
||||
}
|
||||
|
||||
int intel_vrr_vmin_vtotal(const struct intel_crtc_state *crtc_state)
|
||||
{
|
||||
/* Min vblank actually determined by flipline that is always >=vmin+1 */
|
||||
return crtc_state->vrr.vmin + 1;
|
||||
}
|
||||
|
||||
int intel_vrr_vmax_vtotal(const struct intel_crtc_state *crtc_state)
|
||||
{
|
||||
return crtc_state->vrr.vmax;
|
||||
}
|
||||
|
||||
int intel_vrr_vmin_vblank_start(const struct intel_crtc_state *crtc_state)
|
||||
{
|
||||
/* Min vblank actually determined by flipline that is always >=vmin+1 */
|
||||
|
@ -26,6 +26,8 @@ void intel_vrr_send_push(const struct intel_crtc_state *crtc_state);
|
||||
bool intel_vrr_is_push_sent(const struct intel_crtc_state *crtc_state);
|
||||
void intel_vrr_disable(const struct intel_crtc_state *old_crtc_state);
|
||||
void intel_vrr_get_config(struct intel_crtc_state *crtc_state);
|
||||
int intel_vrr_vmax_vtotal(const struct intel_crtc_state *crtc_state);
|
||||
int intel_vrr_vmin_vtotal(const struct intel_crtc_state *crtc_state);
|
||||
int intel_vrr_vmax_vblank_start(const struct intel_crtc_state *crtc_state);
|
||||
int intel_vrr_vmin_vblank_start(const struct intel_crtc_state *crtc_state);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user