RE: [PATCH 2/2] drm/i915/cdclk: Introduce has_cd2x_pipe_select()

"Kandpal, Suraj" <[email protected]> Wed, 22 Jul 2026 07:14:17 +0000
Newsgroups org.freedesktop.lists.intel-gfx,org.freedesktop.lists.intel-xe
Message-ID <DS4PPFE901A304FA27089FB794D60DE6888E3C12@DS4PPFE901A304F.namprd11.prod.outlook.com>
> Subject: [PATCH 2/2] drm/i915/cdclk: Introduce has_cd2x_pipe_select()
> 
> From: Ville Syrjälä <[email protected]>
> 
> We have several open coded checks for the platform's cd2x pipe select
> capability, each written slightly differently. Move it all into a common
> has_cd2x_pipe_select() helper.
> 
> No functional changes as the previous 'DISPLAY_VER < 30'
> checks were in codepaths that already exclude pre-bxt platforms, and
> intel_cdclk_can_cd2x_update() already rejects PTL+ via the later
> HAS_CDCLK_SQUASH() check.
> 
> Also update the docs for the register bitfield while at it.
> 
> Signed-off-by: Ville Syrjälä <[email protected]>

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

> ---
>  drivers/gpu/drm/i915/display/intel_cdclk.c        | 12 ++++++++----
>  drivers/gpu/drm/i915/display/intel_display_regs.h |  2 +-
>  2 files changed, 9 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_cdclk.c
> b/drivers/gpu/drm/i915/display/intel_cdclk.c
> index 9e5e15b0c4d1..75ada941d113 100644
> --- a/drivers/gpu/drm/i915/display/intel_cdclk.c
> +++ b/drivers/gpu/drm/i915/display/intel_cdclk.c
> @@ -2177,6 +2177,11 @@ static bool pll_enable_wa_needed(struct
> intel_display *display)
>  		display->cdclk.hw.vco > 0;
>  }
> 
> +static bool has_cd2x_pipe_select(struct intel_display *display) {
> +	return IS_DISPLAY_VER(display, 10, 20) || display->platform.broxton; }
> +
>  static u32 bxt_cdclk_ctl(struct intel_display *display,
>  			 const struct intel_cdclk_config *cdclk_config,
>  			 enum pipe pipe)
> @@ -2190,7 +2195,7 @@ static u32 bxt_cdclk_ctl(struct intel_display *display,
> 
>  	val = bxt_cdclk_cd2x_div_sel(display, cdclk, vco, waveform);
> 
> -	if (DISPLAY_VER(display) < 30)
> +	if (has_cd2x_pipe_select(display))
>  		val |= bxt_cdclk_cd2x_pipe(display, pipe);
> 
>  	/*
> @@ -2381,7 +2386,7 @@ static void bxt_sanitize_cdclk(struct intel_display
> *display)
>  	 * dividers both syncing to an active pipe, or asynchronously
>  	 * (PIPE_NONE).
>  	 */
> -	if (DISPLAY_VER(display) < 30) {
> +	if (has_cd2x_pipe_select(display)) {
>  		cdctl &= ~bxt_cdclk_cd2x_pipe_mask(display);
>  		cdctl |= bxt_cdclk_cd2x_pipe(display, INVALID_PIPE);
>  	}
> @@ -2579,8 +2584,7 @@ static bool intel_cdclk_can_cd2x_update(struct
> intel_display *display,
>  					const struct intel_cdclk_config *a,
>  					const struct intel_cdclk_config *b)  {
> -	/* Older hw doesn't have the capability */
> -	if (DISPLAY_VER(display) < 10 && !display->platform.broxton)
> +	if (!has_cd2x_pipe_select(display))
>  		return false;
> 
>  	/*
> diff --git a/drivers/gpu/drm/i915/display/intel_display_regs.h
> b/drivers/gpu/drm/i915/display/intel_display_regs.h
> index 0f5018482497..1faca3cdaceb 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_regs.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_regs.h
> @@ -2788,7 +2788,7 @@ enum skl_power_gate {
>  #define  BXT_CDCLK_CD2X_PIPE_MASK	REG_GENMASK(21, 20) /* bxt/glk */
>  #define  BXT_CDCLK_CD2X_PIPE(pipe)
> 	REG_FIELD_PREP(BXT_CDCLK_CD2X_PIPE_MASK, (pipe))
>  #define  BXT_CDCLK_CD2X_PIPE_NONE
> 	REG_FIELD_PREP(BXT_CDCLK_CD2X_PIPE_MASK, 3)
> -#define  ICL_CDCLK_CD2X_PIPE_MASK	REG_GENMASK(21, 19) /* icl+ */
> +#define  ICL_CDCLK_CD2X_PIPE_MASK	REG_GENMASK(21, 19) /* icl-lnl */
>  #define  ICL_CDCLK_CD2X_PIPE(pipe)
> 	REG_FIELD_PREP(ICL_CDCLK_CD2X_PIPE_MASK, (pipe) << 1)
>  #define  ICL_CDCLK_CD2X_PIPE_NONE
> 	REG_FIELD_PREP(ICL_CDCLK_CD2X_PIPE_MASK, 7)
>  #define  CDCLK_DIVMUX_CD_OVERRIDE	REG_BIT(19) /* pre-icl */
> --
> 2.54.0