On Thu, Sep 11, 2025 at 08:15:45AM +0530, Ankit Nautiyal wrote: > Add a helper to compute vblank time needed for transmitting specific > DisplayPort SDPs like PPS, GAMUT_METADATA, and VSC_EXT. Latency is > based on line count per packet type and current line time. > > Used to ensure adequate vblank when features like DSC/HDR are enabled. > > Bspec: 70151 > Signed-off-by: Ankit Nautiyal <ankit.k.nauti...@intel.com> > Reviewed-by: Mitul Golani <mitulkumar.ajitkumar.gol...@intel.com> > --- > drivers/gpu/drm/i915/display/intel_dp.c | 47 +++++++++++++++++++++++++ > drivers/gpu/drm/i915/display/intel_dp.h | 2 ++ > 2 files changed, 49 insertions(+) > > diff --git a/drivers/gpu/drm/i915/display/intel_dp.c > b/drivers/gpu/drm/i915/display/intel_dp.c > index 2eab591a8ef5..83c46e4680b3 100644 > --- a/drivers/gpu/drm/i915/display/intel_dp.c > +++ b/drivers/gpu/drm/i915/display/intel_dp.c > @@ -6857,3 +6857,50 @@ void intel_dp_mst_resume(struct intel_display *display) > } > } > } > + > +static > +int intel_dp_get_sdp_latency(u32 type, int linetime_us)
The "get" in the name is redundant. > +{ > + int lines; > + > + switch (type) { > + case DP_SDP_VSC_EXT_VESA: > + case DP_SDP_VSC_EXT_CEA: > + lines = 10; > + break; > + case HDMI_PACKET_TYPE_GAMUT_METADATA: > + lines = 8; > + break; > + case DP_SDP_PPS: > + lines = 6; > + break; > + default: > + lines = 0; > + break; > + } We should probably calculate these properly instead of just hardcoding annoying magic numbers. But I suppose these are supposed to be some kind of semi worst case numbers so perhaps OK for now. > + > + return lines * linetime_us; > +} > + > +int intel_dp_compute_sdp_latency(const struct intel_crtc_state *crtc_state, > + bool assume_all_enabled) > +{ > + const struct drm_display_mode *adjusted_mode = > &crtc_state->hw.adjusted_mode; > + int sdp_latency = 0; > + int linetime_us; > + > + linetime_us = DIV_ROUND_UP(adjusted_mode->crtc_htotal * 1000, > + adjusted_mode->crtc_clock); > + if (assume_all_enabled || > + crtc_state->infoframes.enable & > + intel_hdmi_infoframe_enable(HDMI_PACKET_TYPE_GAMUT_METADATA)) > + sdp_latency = max(sdp_latency, > + > intel_dp_get_sdp_latency(HDMI_PACKET_TYPE_GAMUT_METADATA, > + linetime_us)); > + > + if (assume_all_enabled || crtc_state->dsc.compression_enable) > + sdp_latency = max(sdp_latency, > + intel_dp_get_sdp_latency(DP_SDP_PPS, > linetime_us)); > + > + return sdp_latency; > +} > diff --git a/drivers/gpu/drm/i915/display/intel_dp.h > b/drivers/gpu/drm/i915/display/intel_dp.h > index f90cfd1dbbd0..d222749b191c 100644 > --- a/drivers/gpu/drm/i915/display/intel_dp.h > +++ b/drivers/gpu/drm/i915/display/intel_dp.h > @@ -215,5 +215,7 @@ int intel_dp_compute_min_hblank(struct intel_crtc_state > *crtc_state, > int intel_dp_dsc_bpp_step_x16(const struct intel_connector *connector); > void intel_dp_dpcd_set_probe(struct intel_dp *intel_dp, bool > force_on_external); > bool intel_dp_in_hdr_mode(const struct drm_connector_state *conn_state); > +int intel_dp_compute_sdp_latency(const struct intel_crtc_state *crtc_state, > + bool assume_all_enabled); > > #endif /* __INTEL_DP_H__ */ > -- > 2.45.2 -- Ville Syrjälä Intel