On Thu, Sep 11, 2025 at 08:15:42AM +0530, Ankit Nautiyal wrote: > Refactor dsc_prefill_latency and scaler_prefill_latency to take > linetime as an explicit parameter instead of computing it internally. > > This avoids redundant calculations and simplifies scanline conversion > logic in skl_is_vblank_too_short(). > > This change also facilitates future extraction of these helpers for use > cases where latencies are computed for an optimized guardband, based on the > highest resolution mode, rather than the current mode. > > Signed-off-by: Ankit Nautiyal <ankit.k.nauti...@intel.com> > Reviewed-by: Mitul Golani <mitulkumar.ajitkumar.gol...@intel.com> > --- > drivers/gpu/drm/i915/display/skl_watermark.c | 18 ++++++++---------- > 1 file changed, 8 insertions(+), 10 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/skl_watermark.c > b/drivers/gpu/drm/i915/display/skl_watermark.c > index 51548447f4aa..49d424f5b305 100644 > --- a/drivers/gpu/drm/i915/display/skl_watermark.c > +++ b/drivers/gpu/drm/i915/display/skl_watermark.c > @@ -2176,13 +2176,11 @@ cdclk_prefill_adjustment(const struct > intel_crtc_state *crtc_state) > } > > static int > -dsc_prefill_latency(const struct intel_crtc_state *crtc_state) > +dsc_prefill_latency(const struct intel_crtc_state *crtc_state, int linetime) > { > struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); > const struct intel_crtc_scaler_state *scaler_state = > &crtc_state->scaler_state; > - int linetime = DIV_ROUND_UP(1000 * crtc_state->hw.adjusted_mode.htotal, > - crtc_state->hw.adjusted_mode.clock); > int num_scaler_users = hweight32(scaler_state->scaler_users); > int chroma_downscaling_factor = > crtc_state->output_format == INTEL_OUTPUT_FORMAT_YCBCR420 ? 4 : > 1; > @@ -2206,18 +2204,16 @@ dsc_prefill_latency(const struct intel_crtc_state > *crtc_state) > > dsc_prefill_latency *= cdclk_prefill_adjustment(crtc_state); > > - return intel_usecs_to_scanlines(&crtc_state->hw.adjusted_mode, > dsc_prefill_latency); > + return dsc_prefill_latency; > } > > static int > -scaler_prefill_latency(const struct intel_crtc_state *crtc_state) > +scaler_prefill_latency(const struct intel_crtc_state *crtc_state, int > linetime) > { > const struct intel_crtc_scaler_state *scaler_state = > &crtc_state->scaler_state; > int num_scaler_users = hweight32(scaler_state->scaler_users); > int scaler_prefill_latency = 0; > - int linetime = DIV_ROUND_UP(1000 * crtc_state->hw.adjusted_mode.htotal, > - crtc_state->hw.adjusted_mode.clock); > > if (!num_scaler_users) > return scaler_prefill_latency; > @@ -2238,7 +2234,7 @@ scaler_prefill_latency(const struct intel_crtc_state > *crtc_state) > > scaler_prefill_latency *= cdclk_prefill_adjustment(crtc_state); > > - return intel_usecs_to_scanlines(&crtc_state->hw.adjusted_mode, > scaler_prefill_latency); > + return scaler_prefill_latency; > } > > static bool > @@ -2247,11 +2243,13 @@ skl_is_vblank_too_short(const struct intel_crtc_state > *crtc_state, > { > const struct drm_display_mode *adjusted_mode = > &crtc_state->hw.adjusted_mode; > + int linetime = DIV_ROUND_UP(1000 * adjusted_mode->htotal, > + adjusted_mode->clock); > > return crtc_state->framestart_delay + > intel_usecs_to_scanlines(adjusted_mode, latency) + > - scaler_prefill_latency(crtc_state) + > - dsc_prefill_latency(crtc_state) + > + DIV_ROUND_UP(scaler_prefill_latency(crtc_state, linetime), > linetime) + > + DIV_ROUND_UP(dsc_prefill_latency(crtc_state, linetime), > linetime) +
Looks like you could just add up all the usec latency numbers and convert the whole thing with a single intel_usecs_to_scanlines() call instead of this mismash of hand rolled and non-hand rolled stuff. > wm0_lines > > adjusted_mode->crtc_vtotal - adjusted_mode->crtc_vblank_start; > } > -- > 2.45.2 -- Ville Syrjälä Intel