RE: [PATCH 02/14] drm/i915/display: Generalize intel_hdmi_dsc_get_num_slices helper

"Kandpal, Suraj" <[email protected]> Mon, 3 Aug 2026 04:36:08 +0000
Newsgroups org.freedesktop.lists.intel-gfx,org.freedesktop.lists.intel-xe
Message-ID <DS4PPFE901A304F7D63CDCF8A04FE08760BE3D52@DS4PPFE901A304F.namprd11.prod.outlook.com>
> Subject: [PATCH 02/14] drm/i915/display: Generalize
> intel_hdmi_dsc_get_num_slices helper
>=20
> Refactor intel_hdmi_dsc_get_num_slices to remove dependency on
> intel_crtc_state structure by accepting display mode and output format as
> parameters instead.
>=20
> This makes the function reusable for mode_valid cases where crtc_state is=
 not
> there.

Nit: *is not present

>=20
> Signed-off-by: Ankit Nautiyal <[email protected]>

LGTM,
Reviewed-by: Suraj Kandpal <[email protected]>

> ---
>  drivers/gpu/drm/i915/display/intel_dp.c   |  4 +++-
>  drivers/gpu/drm/i915/display/intel_hdmi.c | 14 ++++++++------
> drivers/gpu/drm/i915/display/intel_hdmi.h |  4 +++-
>  3 files changed, 14 insertions(+), 8 deletions(-)
>=20
> diff --git a/drivers/gpu/drm/i915/display/intel_dp.c
> b/drivers/gpu/drm/i915/display/intel_dp.c
> index 113d767e62e9..db64e6582286 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -4316,7 +4316,9 @@ intel_dp_pcon_dsc_enc_slices(struct intel_dp
> *intel_dp,
>  	int pcon_max_slices =3D drm_dp_pcon_dsc_max_slices(intel_dp-
> >pcon_dsc_dpcd);
>  	int pcon_max_slice_width =3D
> drm_dp_pcon_dsc_max_slice_width(intel_dp->pcon_dsc_dpcd);
>=20
> -	return intel_hdmi_dsc_get_num_slices(crtc_state, pcon_max_slices,
> +	return intel_hdmi_dsc_get_num_slices(&crtc_state-
> >hw.adjusted_mode,
> +					     crtc_state->output_format,
> +					     pcon_max_slices,
>  					     pcon_max_slice_width,
>  					     hdmi_max_slices,
> hdmi_throughput);  } diff --git a/drivers/gpu/drm/i915/display/intel_hdmi=
.c
> b/drivers/gpu/drm/i915/display/intel_hdmi.c
> index 9af0f3aba0fc..228c5e2be164 100644
> --- a/drivers/gpu/drm/i915/display/intel_hdmi.c
> +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
> @@ -3216,7 +3216,8 @@ int intel_hdmi_dsc_get_slice_height(int vactive)
>   * intel_hdmi_dsc_get_num_slices - get no. of dsc slices based on dsc en=
coder
>   * and dsc decoder capabilities
>   *
> - * @crtc_state: intel crtc_state
> + * @mode: drm_display_mode for which num of slices are needed
> + * @output_format : pipe output format
>   * @src_max_slices: maximum slices supported by the DSC encoder
>   * @src_max_slice_width: maximum slice width supported by DSC encoder
>   * @hdmi_max_slices: maximum slices supported by sink DSC decoder @@ -
> 3226,7 +3227,8 @@ int intel_hdmi_dsc_get_slice_height(int vactive)
>   * and decoder.
>   */
>  int
> -intel_hdmi_dsc_get_num_slices(const struct intel_crtc_state *crtc_state,
> +intel_hdmi_dsc_get_num_slices(const struct drm_display_mode *mode,
> +			      enum intel_output_format output_format,
>  			      int src_max_slices, int src_max_slice_width,
>  			      int hdmi_max_slices, int hdmi_throughput)  { @@ -
> 3248,7 +3250,7 @@ intel_hdmi_dsc_get_num_slices(const struct
> intel_crtc_state *crtc_state,
>  	int max_throughput; /* max clock freq. in khz per slice */
>  	int max_slice_width;
>  	int slice_width;
> -	int pixel_clock =3D crtc_state->hw.adjusted_mode.crtc_clock;
> +	int pixel_clock =3D mode->crtc_clock;
>=20
>  	if (!hdmi_throughput)
>  		return 0;
> @@ -3259,8 +3261,8 @@ intel_hdmi_dsc_get_num_slices(const struct
> intel_crtc_state *crtc_state,
>  	 * for 4:4:4 is 1.0. Multiplying these factors by 10 and later
>  	 * dividing adjusted clock value by 10.
>  	 */
> -	if (crtc_state->output_format =3D=3D INTEL_OUTPUT_FORMAT_YCBCR444
> ||
> -	    crtc_state->output_format =3D=3D INTEL_OUTPUT_FORMAT_RGB)
> +	if (output_format =3D=3D INTEL_OUTPUT_FORMAT_YCBCR444 ||
> +	    output_format =3D=3D INTEL_OUTPUT_FORMAT_RGB)
>  		kslice_adjust =3D 10;
>  	else
>  		kslice_adjust =3D 5;
> @@ -3315,7 +3317,7 @@ intel_hdmi_dsc_get_num_slices(const struct
> intel_crtc_state *crtc_state,
>  		else
>  			return 0;
>=20
> -		slice_width =3D DIV_ROUND_UP(crtc_state-
> >hw.adjusted_mode.hdisplay, target_slices);
> +		slice_width =3D DIV_ROUND_UP(mode->hdisplay, target_slices);
>  		if (slice_width >=3D max_slice_width)
>  			min_slices =3D target_slices + 1;
>  	} while (slice_width >=3D max_slice_width); diff --git
> a/drivers/gpu/drm/i915/display/intel_hdmi.h
> b/drivers/gpu/drm/i915/display/intel_hdmi.h
> index fb950fdd0e7a..4e2228ca0c5b 100644
> --- a/drivers/gpu/drm/i915/display/intel_hdmi.h
> +++ b/drivers/gpu/drm/i915/display/intel_hdmi.h
> @@ -13,6 +13,7 @@ enum intel_output_format;  enum port;  struct
> drm_connector;  struct drm_connector_state;
> +struct drm_display_mode;
>  struct drm_encoder;
>  struct intel_connector;
>  struct intel_crtc_state;
> @@ -56,7 +57,8 @@ int intel_hdmi_tmds_clock(int clock, int bpc, enum
> intel_output_format sink_form  int intel_hdmi_dsc_get_bpp(int
> src_fractional_bpp, int slice_width,
>  			   int num_slices, enum intel_output_format
> output_format,
>  			   bool hdmi_all_bpp, int hdmi_max_chunk_bytes); -int
> intel_hdmi_dsc_get_num_slices(const struct intel_crtc_state *crtc_state,
> +int intel_hdmi_dsc_get_num_slices(const struct drm_display_mode *mode,
> +				  enum intel_output_format output_format,
>  				  int src_max_slices, int src_max_slice_width,
>  				  int hdmi_max_slices, int hdmi_throughput);
> int intel_hdmi_dsc_get_slice_height(int vactive);
> --
> 2.50.1