[PATCH 2/6] drm/i915/cdclk: Convert CDCLK code to intel_display

Rodrigo Vivi rodrigo.vivi at intel.com
Fri Sep 6 15:09:51 UTC 2024


On Fri, Sep 06, 2024 at 05:33:02PM +0300, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala at linux.intel.com>
> 
> struct intel_display will replace struct drm_i915_private as
> the main thing for display code. Convert the CDCLK code to
> use it (as much as possible at this stage).

better to take this one in quickly before it starts to conflict
on rebases.

Reviewed-by: Rodrigo Vivi <rodrigo.vivi at intel.com>

> 
> Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_cdclk.c    | 1168 +++++++++--------
>  drivers/gpu/drm/i915/display/intel_cdclk.h    |   24 +-
>  .../drm/i915/display/intel_display_debugfs.c  |    2 +-
>  .../drm/i915/display/intel_display_device.c   |    2 +-
>  .../drm/i915/display/intel_display_driver.c   |   17 +-
>  .../drm/i915/display/intel_display_power.c    |   35 +-
>  .../i915/display/intel_display_power_well.c   |    9 +-
>  drivers/gpu/drm/i915/display/skl_watermark.c  |    3 +-
>  8 files changed, 657 insertions(+), 603 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_cdclk.c b/drivers/gpu/drm/i915/display/intel_cdclk.c
> index 9d870d15d888..b4eda0a2a45d 100644
> --- a/drivers/gpu/drm/i915/display/intel_cdclk.c
> +++ b/drivers/gpu/drm/i915/display/intel_cdclk.c
> @@ -113,81 +113,81 @@
>   */
>  
>  struct intel_cdclk_funcs {
> -	void (*get_cdclk)(struct drm_i915_private *i915,
> +	void (*get_cdclk)(struct intel_display *display,
>  			  struct intel_cdclk_config *cdclk_config);
> -	void (*set_cdclk)(struct drm_i915_private *i915,
> +	void (*set_cdclk)(struct intel_display *display,
>  			  const struct intel_cdclk_config *cdclk_config,
>  			  enum pipe pipe);
>  	int (*modeset_calc_cdclk)(struct intel_atomic_state *state);
>  	u8 (*calc_voltage_level)(int cdclk);
>  };
>  
> -void intel_cdclk_get_cdclk(struct drm_i915_private *dev_priv,
> +void intel_cdclk_get_cdclk(struct intel_display *display,
>  			   struct intel_cdclk_config *cdclk_config)
>  {
> -	dev_priv->display.funcs.cdclk->get_cdclk(dev_priv, cdclk_config);
> +	display->funcs.cdclk->get_cdclk(display, cdclk_config);
>  }
>  
> -static void intel_cdclk_set_cdclk(struct drm_i915_private *dev_priv,
> +static void intel_cdclk_set_cdclk(struct intel_display *display,
>  				  const struct intel_cdclk_config *cdclk_config,
>  				  enum pipe pipe)
>  {
> -	dev_priv->display.funcs.cdclk->set_cdclk(dev_priv, cdclk_config, pipe);
> +	display->funcs.cdclk->set_cdclk(display, cdclk_config, pipe);
>  }
>  
>  static int intel_cdclk_modeset_calc_cdclk(struct intel_atomic_state *state)
>  {
> -	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
> +	struct intel_display *display = to_intel_display(state);
>  
> -	return dev_priv->display.funcs.cdclk->modeset_calc_cdclk(state);
> +	return display->funcs.cdclk->modeset_calc_cdclk(state);
>  }
>  
> -static u8 intel_cdclk_calc_voltage_level(struct drm_i915_private *dev_priv,
> +static u8 intel_cdclk_calc_voltage_level(struct intel_display *display,
>  					 int cdclk)
>  {
> -	return dev_priv->display.funcs.cdclk->calc_voltage_level(cdclk);
> +	return display->funcs.cdclk->calc_voltage_level(cdclk);
>  }
>  
> -static void fixed_133mhz_get_cdclk(struct drm_i915_private *dev_priv,
> +static void fixed_133mhz_get_cdclk(struct intel_display *display,
>  				   struct intel_cdclk_config *cdclk_config)
>  {
>  	cdclk_config->cdclk = 133333;
>  }
>  
> -static void fixed_200mhz_get_cdclk(struct drm_i915_private *dev_priv,
> +static void fixed_200mhz_get_cdclk(struct intel_display *display,
>  				   struct intel_cdclk_config *cdclk_config)
>  {
>  	cdclk_config->cdclk = 200000;
>  }
>  
> -static void fixed_266mhz_get_cdclk(struct drm_i915_private *dev_priv,
> +static void fixed_266mhz_get_cdclk(struct intel_display *display,
>  				   struct intel_cdclk_config *cdclk_config)
>  {
>  	cdclk_config->cdclk = 266667;
>  }
>  
> -static void fixed_333mhz_get_cdclk(struct drm_i915_private *dev_priv,
> +static void fixed_333mhz_get_cdclk(struct intel_display *display,
>  				   struct intel_cdclk_config *cdclk_config)
>  {
>  	cdclk_config->cdclk = 333333;
>  }
>  
> -static void fixed_400mhz_get_cdclk(struct drm_i915_private *dev_priv,
> +static void fixed_400mhz_get_cdclk(struct intel_display *display,
>  				   struct intel_cdclk_config *cdclk_config)
>  {
>  	cdclk_config->cdclk = 400000;
>  }
>  
> -static void fixed_450mhz_get_cdclk(struct drm_i915_private *dev_priv,
> +static void fixed_450mhz_get_cdclk(struct intel_display *display,
>  				   struct intel_cdclk_config *cdclk_config)
>  {
>  	cdclk_config->cdclk = 450000;
>  }
>  
> -static void i85x_get_cdclk(struct drm_i915_private *dev_priv,
> +static void i85x_get_cdclk(struct intel_display *display,
>  			   struct intel_cdclk_config *cdclk_config)
>  {
> -	struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
> +	struct pci_dev *pdev = to_pci_dev(display->drm->dev);
>  	u16 hpllcc = 0;
>  
>  	/*
> @@ -226,10 +226,10 @@ static void i85x_get_cdclk(struct drm_i915_private *dev_priv,
>  	}
>  }
>  
> -static void i915gm_get_cdclk(struct drm_i915_private *dev_priv,
> +static void i915gm_get_cdclk(struct intel_display *display,
>  			     struct intel_cdclk_config *cdclk_config)
>  {
> -	struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
> +	struct pci_dev *pdev = to_pci_dev(display->drm->dev);
>  	u16 gcfgc = 0;
>  
>  	pci_read_config_word(pdev, GCFGC, &gcfgc);
> @@ -250,10 +250,10 @@ static void i915gm_get_cdclk(struct drm_i915_private *dev_priv,
>  	}
>  }
>  
> -static void i945gm_get_cdclk(struct drm_i915_private *dev_priv,
> +static void i945gm_get_cdclk(struct intel_display *display,
>  			     struct intel_cdclk_config *cdclk_config)
>  {
> -	struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
> +	struct pci_dev *pdev = to_pci_dev(display->drm->dev);
>  	u16 gcfgc = 0;
>  
>  	pci_read_config_word(pdev, GCFGC, &gcfgc);
> @@ -274,7 +274,7 @@ static void i945gm_get_cdclk(struct drm_i915_private *dev_priv,
>  	}
>  }
>  
> -static unsigned int intel_hpll_vco(struct drm_i915_private *dev_priv)
> +static unsigned int intel_hpll_vco(struct intel_display *display)
>  {
>  	static const unsigned int blb_vco[8] = {
>  		[0] = 3200000,
> @@ -313,6 +313,7 @@ static unsigned int intel_hpll_vco(struct drm_i915_private *dev_priv)
>  		[4] = 2666667,
>  		[5] = 4266667,
>  	};
> +	struct drm_i915_private *dev_priv = to_i915(display->drm);
>  	const unsigned int *vco_table;
>  	unsigned int vco;
>  	u8 tmp = 0;
> @@ -331,23 +332,23 @@ static unsigned int intel_hpll_vco(struct drm_i915_private *dev_priv)
>  	else
>  		return 0;
>  
> -	tmp = intel_de_read(dev_priv,
> +	tmp = intel_de_read(display,
>  			    IS_PINEVIEW(dev_priv) || IS_MOBILE(dev_priv) ? HPLLVCO_MOBILE : HPLLVCO);
>  
>  	vco = vco_table[tmp & 0x7];
>  	if (vco == 0)
> -		drm_err(&dev_priv->drm, "Bad HPLL VCO (HPLLVCO=0x%02x)\n",
> +		drm_err(display->drm, "Bad HPLL VCO (HPLLVCO=0x%02x)\n",
>  			tmp);
>  	else
> -		drm_dbg_kms(&dev_priv->drm, "HPLL VCO %u kHz\n", vco);
> +		drm_dbg_kms(display->drm, "HPLL VCO %u kHz\n", vco);
>  
>  	return vco;
>  }
>  
> -static void g33_get_cdclk(struct drm_i915_private *dev_priv,
> +static void g33_get_cdclk(struct intel_display *display,
>  			  struct intel_cdclk_config *cdclk_config)
>  {
> -	struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
> +	struct pci_dev *pdev = to_pci_dev(display->drm->dev);
>  	static const u8 div_3200[] = { 12, 10,  8,  7, 5, 16 };
>  	static const u8 div_4000[] = { 14, 12, 10,  8, 6, 20 };
>  	static const u8 div_4800[] = { 20, 14, 12, 10, 8, 24 };
> @@ -356,7 +357,7 @@ static void g33_get_cdclk(struct drm_i915_private *dev_priv,
>  	unsigned int cdclk_sel;
>  	u16 tmp = 0;
>  
> -	cdclk_config->vco = intel_hpll_vco(dev_priv);
> +	cdclk_config->vco = intel_hpll_vco(display);
>  
>  	pci_read_config_word(pdev, GCFGC, &tmp);
>  
> @@ -387,16 +388,16 @@ static void g33_get_cdclk(struct drm_i915_private *dev_priv,
>  	return;
>  
>  fail:
> -	drm_err(&dev_priv->drm,
> +	drm_err(display->drm,
>  		"Unable to determine CDCLK. HPLL VCO=%u kHz, CFGC=0x%08x\n",
>  		cdclk_config->vco, tmp);
>  	cdclk_config->cdclk = 190476;
>  }
>  
> -static void pnv_get_cdclk(struct drm_i915_private *dev_priv,
> +static void pnv_get_cdclk(struct intel_display *display,
>  			  struct intel_cdclk_config *cdclk_config)
>  {
> -	struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
> +	struct pci_dev *pdev = to_pci_dev(display->drm->dev);
>  	u16 gcfgc = 0;
>  
>  	pci_read_config_word(pdev, GCFGC, &gcfgc);
> @@ -415,7 +416,7 @@ static void pnv_get_cdclk(struct drm_i915_private *dev_priv,
>  		cdclk_config->cdclk = 200000;
>  		break;
>  	default:
> -		drm_err(&dev_priv->drm,
> +		drm_err(display->drm,
>  			"Unknown pnv display core clock 0x%04x\n", gcfgc);
>  		fallthrough;
>  	case GC_DISPLAY_CLOCK_133_MHZ_PNV:
> @@ -427,10 +428,10 @@ static void pnv_get_cdclk(struct drm_i915_private *dev_priv,
>  	}
>  }
>  
> -static void i965gm_get_cdclk(struct drm_i915_private *dev_priv,
> +static void i965gm_get_cdclk(struct intel_display *display,
>  			     struct intel_cdclk_config *cdclk_config)
>  {
> -	struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
> +	struct pci_dev *pdev = to_pci_dev(display->drm->dev);
>  	static const u8 div_3200[] = { 16, 10,  8 };
>  	static const u8 div_4000[] = { 20, 12, 10 };
>  	static const u8 div_5333[] = { 24, 16, 14 };
> @@ -438,7 +439,7 @@ static void i965gm_get_cdclk(struct drm_i915_private *dev_priv,
>  	unsigned int cdclk_sel;
>  	u16 tmp = 0;
>  
> -	cdclk_config->vco = intel_hpll_vco(dev_priv);
> +	cdclk_config->vco = intel_hpll_vco(display);
>  
>  	pci_read_config_word(pdev, GCFGC, &tmp);
>  
> @@ -466,20 +467,20 @@ static void i965gm_get_cdclk(struct drm_i915_private *dev_priv,
>  	return;
>  
>  fail:
> -	drm_err(&dev_priv->drm,
> +	drm_err(display->drm,
>  		"Unable to determine CDCLK. HPLL VCO=%u kHz, CFGC=0x%04x\n",
>  		cdclk_config->vco, tmp);
>  	cdclk_config->cdclk = 200000;
>  }
>  
> -static void gm45_get_cdclk(struct drm_i915_private *dev_priv,
> +static void gm45_get_cdclk(struct intel_display *display,
>  			   struct intel_cdclk_config *cdclk_config)
>  {
> -	struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
> +	struct pci_dev *pdev = to_pci_dev(display->drm->dev);
>  	unsigned int cdclk_sel;
>  	u16 tmp = 0;
>  
> -	cdclk_config->vco = intel_hpll_vco(dev_priv);
> +	cdclk_config->vco = intel_hpll_vco(display);
>  
>  	pci_read_config_word(pdev, GCFGC, &tmp);
>  
> @@ -495,7 +496,7 @@ static void gm45_get_cdclk(struct drm_i915_private *dev_priv,
>  		cdclk_config->cdclk = cdclk_sel ? 320000 : 228571;
>  		break;
>  	default:
> -		drm_err(&dev_priv->drm,
> +		drm_err(display->drm,
>  			"Unable to determine CDCLK. HPLL VCO=%u, CFGC=0x%04x\n",
>  			cdclk_config->vco, tmp);
>  		cdclk_config->cdclk = 222222;
> @@ -503,15 +504,16 @@ static void gm45_get_cdclk(struct drm_i915_private *dev_priv,
>  	}
>  }
>  
> -static void hsw_get_cdclk(struct drm_i915_private *dev_priv,
> +static void hsw_get_cdclk(struct intel_display *display,
>  			  struct intel_cdclk_config *cdclk_config)
>  {
> -	u32 lcpll = intel_de_read(dev_priv, LCPLL_CTL);
> +	struct drm_i915_private *dev_priv = to_i915(display->drm);
> +	u32 lcpll = intel_de_read(display, LCPLL_CTL);
>  	u32 freq = lcpll & LCPLL_CLK_FREQ_MASK;
>  
>  	if (lcpll & LCPLL_CD_SOURCE_FCLK)
>  		cdclk_config->cdclk = 800000;
> -	else if (intel_de_read(dev_priv, FUSE_STRAP) & HSW_CDCLK_LIMIT)
> +	else if (intel_de_read(display, FUSE_STRAP) & HSW_CDCLK_LIMIT)
>  		cdclk_config->cdclk = 450000;
>  	else if (freq == LCPLL_CLK_FREQ_450)
>  		cdclk_config->cdclk = 450000;
> @@ -521,8 +523,9 @@ static void hsw_get_cdclk(struct drm_i915_private *dev_priv,
>  		cdclk_config->cdclk = 540000;
>  }
>  
> -static int vlv_calc_cdclk(struct drm_i915_private *dev_priv, int min_cdclk)
> +static int vlv_calc_cdclk(struct intel_display *display, int min_cdclk)
>  {
> +	struct drm_i915_private *dev_priv = to_i915(display->drm);
>  	int freq_320 = (dev_priv->hpll_freq <<  1) % 320000 != 0 ?
>  		333333 : 320000;
>  
> @@ -541,8 +544,10 @@ static int vlv_calc_cdclk(struct drm_i915_private *dev_priv, int min_cdclk)
>  		return 200000;
>  }
>  
> -static u8 vlv_calc_voltage_level(struct drm_i915_private *dev_priv, int cdclk)
> +static u8 vlv_calc_voltage_level(struct intel_display *display, int cdclk)
>  {
> +	struct drm_i915_private *dev_priv = to_i915(display->drm);
> +
>  	if (IS_VALLEYVIEW(dev_priv)) {
>  		if (cdclk >= 320000) /* jump to highest voltage for 400MHz too */
>  			return 2;
> @@ -560,9 +565,10 @@ static u8 vlv_calc_voltage_level(struct drm_i915_private *dev_priv, int cdclk)
>  	}
>  }
>  
> -static void vlv_get_cdclk(struct drm_i915_private *dev_priv,
> +static void vlv_get_cdclk(struct intel_display *display,
>  			  struct intel_cdclk_config *cdclk_config)
>  {
> +	struct drm_i915_private *dev_priv = to_i915(display->drm);
>  	u32 val;
>  
>  	vlv_iosf_sb_get(dev_priv,
> @@ -586,8 +592,9 @@ static void vlv_get_cdclk(struct drm_i915_private *dev_priv,
>  			DSPFREQGUAR_SHIFT_CHV;
>  }
>  
> -static void vlv_program_pfi_credits(struct drm_i915_private *dev_priv)
> +static void vlv_program_pfi_credits(struct intel_display *display)
>  {
> +	struct drm_i915_private *dev_priv = to_i915(display->drm);
>  	unsigned int credits, default_credits;
>  
>  	if (IS_CHERRYVIEW(dev_priv))
> @@ -595,7 +602,7 @@ static void vlv_program_pfi_credits(struct drm_i915_private *dev_priv)
>  	else
>  		default_credits = PFI_CREDIT(8);
>  
> -	if (dev_priv->display.cdclk.hw.cdclk >= dev_priv->czclk_freq) {
> +	if (display->cdclk.hw.cdclk >= dev_priv->czclk_freq) {
>  		/* CHV suggested value is 31 or 63 */
>  		if (IS_CHERRYVIEW(dev_priv))
>  			credits = PFI_CREDIT_63;
> @@ -609,24 +616,25 @@ static void vlv_program_pfi_credits(struct drm_i915_private *dev_priv)
>  	 * WA - write default credits before re-programming
>  	 * FIXME: should we also set the resend bit here?
>  	 */
> -	intel_de_write(dev_priv, GCI_CONTROL,
> +	intel_de_write(display, GCI_CONTROL,
>  		       VGA_FAST_MODE_DISABLE | default_credits);
>  
> -	intel_de_write(dev_priv, GCI_CONTROL,
> +	intel_de_write(display, GCI_CONTROL,
>  		       VGA_FAST_MODE_DISABLE | credits | PFI_CREDIT_RESEND);
>  
>  	/*
>  	 * FIXME is this guaranteed to clear
>  	 * immediately or should we poll for it?
>  	 */
> -	drm_WARN_ON(&dev_priv->drm,
> -		    intel_de_read(dev_priv, GCI_CONTROL) & PFI_CREDIT_RESEND);
> +	drm_WARN_ON(display->drm,
> +		    intel_de_read(display, GCI_CONTROL) & PFI_CREDIT_RESEND);
>  }
>  
> -static void vlv_set_cdclk(struct drm_i915_private *dev_priv,
> +static void vlv_set_cdclk(struct intel_display *display,
>  			  const struct intel_cdclk_config *cdclk_config,
>  			  enum pipe pipe)
>  {
> +	struct drm_i915_private *dev_priv = to_i915(display->drm);
>  	int cdclk = cdclk_config->cdclk;
>  	u32 val, cmd = cdclk_config->voltage_level;
>  	intel_wakeref_t wakeref;
> @@ -663,7 +671,7 @@ static void vlv_set_cdclk(struct drm_i915_private *dev_priv,
>  	if (wait_for((vlv_punit_read(dev_priv, PUNIT_REG_DSPSSPM) &
>  		      DSPFREQSTAT_MASK) == (cmd << DSPFREQSTAT_SHIFT),
>  		     50)) {
> -		drm_err(&dev_priv->drm,
> +		drm_err(display->drm,
>  			"timed out waiting for CDclk change\n");
>  	}
>  
> @@ -682,7 +690,7 @@ static void vlv_set_cdclk(struct drm_i915_private *dev_priv,
>  		if (wait_for((vlv_cck_read(dev_priv, CCK_DISPLAY_CLOCK_CONTROL) &
>  			      CCK_FREQUENCY_STATUS) == (divider << CCK_FREQUENCY_STATUS_SHIFT),
>  			     50))
> -			drm_err(&dev_priv->drm,
> +			drm_err(display->drm,
>  				"timed out waiting for CDclk change\n");
>  	}
>  
> @@ -705,17 +713,18 @@ static void vlv_set_cdclk(struct drm_i915_private *dev_priv,
>  			BIT(VLV_IOSF_SB_BUNIT) |
>  			BIT(VLV_IOSF_SB_PUNIT));
>  
> -	intel_update_cdclk(dev_priv);
> +	intel_update_cdclk(display);
>  
> -	vlv_program_pfi_credits(dev_priv);
> +	vlv_program_pfi_credits(display);
>  
>  	intel_display_power_put(dev_priv, POWER_DOMAIN_DISPLAY_CORE, wakeref);
>  }
>  
> -static void chv_set_cdclk(struct drm_i915_private *dev_priv,
> +static void chv_set_cdclk(struct intel_display *display,
>  			  const struct intel_cdclk_config *cdclk_config,
>  			  enum pipe pipe)
>  {
> +	struct drm_i915_private *dev_priv = to_i915(display->drm);
>  	int cdclk = cdclk_config->cdclk;
>  	u32 val, cmd = cdclk_config->voltage_level;
>  	intel_wakeref_t wakeref;
> @@ -747,15 +756,15 @@ static void chv_set_cdclk(struct drm_i915_private *dev_priv,
>  	if (wait_for((vlv_punit_read(dev_priv, PUNIT_REG_DSPSSPM) &
>  		      DSPFREQSTAT_MASK_CHV) == (cmd << DSPFREQSTAT_SHIFT_CHV),
>  		     50)) {
> -		drm_err(&dev_priv->drm,
> +		drm_err(display->drm,
>  			"timed out waiting for CDclk change\n");
>  	}
>  
>  	vlv_punit_put(dev_priv);
>  
> -	intel_update_cdclk(dev_priv);
> +	intel_update_cdclk(display);
>  
> -	vlv_program_pfi_credits(dev_priv);
> +	vlv_program_pfi_credits(display);
>  
>  	intel_display_power_put(dev_priv, POWER_DOMAIN_DISPLAY_CORE, wakeref);
>  }
> @@ -787,15 +796,15 @@ static u8 bdw_calc_voltage_level(int cdclk)
>  	}
>  }
>  
> -static void bdw_get_cdclk(struct drm_i915_private *dev_priv,
> +static void bdw_get_cdclk(struct intel_display *display,
>  			  struct intel_cdclk_config *cdclk_config)
>  {
> -	u32 lcpll = intel_de_read(dev_priv, LCPLL_CTL);
> +	u32 lcpll = intel_de_read(display, LCPLL_CTL);
>  	u32 freq = lcpll & LCPLL_CLK_FREQ_MASK;
>  
>  	if (lcpll & LCPLL_CD_SOURCE_FCLK)
>  		cdclk_config->cdclk = 800000;
> -	else if (intel_de_read(dev_priv, FUSE_STRAP) & HSW_CDCLK_LIMIT)
> +	else if (intel_de_read(display, FUSE_STRAP) & HSW_CDCLK_LIMIT)
>  		cdclk_config->cdclk = 450000;
>  	else if (freq == LCPLL_CLK_FREQ_450)
>  		cdclk_config->cdclk = 450000;
> @@ -831,15 +840,16 @@ static u32 bdw_cdclk_freq_sel(int cdclk)
>  	}
>  }
>  
> -static void bdw_set_cdclk(struct drm_i915_private *dev_priv,
> +static void bdw_set_cdclk(struct intel_display *display,
>  			  const struct intel_cdclk_config *cdclk_config,
>  			  enum pipe pipe)
>  {
> +	struct drm_i915_private *dev_priv = to_i915(display->drm);
>  	int cdclk = cdclk_config->cdclk;
>  	int ret;
>  
> -	if (drm_WARN(&dev_priv->drm,
> -		     (intel_de_read(dev_priv, LCPLL_CTL) &
> +	if (drm_WARN(display->drm,
> +		     (intel_de_read(display, LCPLL_CTL) &
>  		      (LCPLL_PLL_DISABLE | LCPLL_PLL_LOCK |
>  		       LCPLL_CD_CLOCK_DISABLE | LCPLL_ROOT_CD_CLOCK_DISABLE |
>  		       LCPLL_CD2X_CLOCK_DISABLE | LCPLL_POWER_DOWN_ALLOW |
> @@ -849,39 +859,39 @@ static void bdw_set_cdclk(struct drm_i915_private *dev_priv,
>  
>  	ret = snb_pcode_write(&dev_priv->uncore, BDW_PCODE_DISPLAY_FREQ_CHANGE_REQ, 0x0);
>  	if (ret) {
> -		drm_err(&dev_priv->drm,
> +		drm_err(display->drm,
>  			"failed to inform pcode about cdclk change\n");
>  		return;
>  	}
>  
> -	intel_de_rmw(dev_priv, LCPLL_CTL,
> +	intel_de_rmw(display, LCPLL_CTL,
>  		     0, LCPLL_CD_SOURCE_FCLK);
>  
>  	/*
>  	 * According to the spec, it should be enough to poll for this 1 us.
>  	 * However, extensive testing shows that this can take longer.
>  	 */
> -	if (wait_for_us(intel_de_read(dev_priv, LCPLL_CTL) &
> +	if (wait_for_us(intel_de_read(display, LCPLL_CTL) &
>  			LCPLL_CD_SOURCE_FCLK_DONE, 100))
> -		drm_err(&dev_priv->drm, "Switching to FCLK failed\n");
> +		drm_err(display->drm, "Switching to FCLK failed\n");
>  
> -	intel_de_rmw(dev_priv, LCPLL_CTL,
> +	intel_de_rmw(display, LCPLL_CTL,
>  		     LCPLL_CLK_FREQ_MASK, bdw_cdclk_freq_sel(cdclk));
>  
> -	intel_de_rmw(dev_priv, LCPLL_CTL,
> +	intel_de_rmw(display, LCPLL_CTL,
>  		     LCPLL_CD_SOURCE_FCLK, 0);
>  
> -	if (wait_for_us((intel_de_read(dev_priv, LCPLL_CTL) &
> +	if (wait_for_us((intel_de_read(display, LCPLL_CTL) &
>  			 LCPLL_CD_SOURCE_FCLK_DONE) == 0, 1))
> -		drm_err(&dev_priv->drm, "Switching back to LCPLL failed\n");
> +		drm_err(display->drm, "Switching back to LCPLL failed\n");
>  
>  	snb_pcode_write(&dev_priv->uncore, HSW_PCODE_DE_WRITE_FREQ_REQ,
>  			cdclk_config->voltage_level);
>  
> -	intel_de_write(dev_priv, CDCLK_FREQ,
> +	intel_de_write(display, CDCLK_FREQ,
>  		       DIV_ROUND_CLOSEST(cdclk, 1000) - 1);
>  
> -	intel_update_cdclk(dev_priv);
> +	intel_update_cdclk(display);
>  }
>  
>  static int skl_calc_cdclk(int min_cdclk, int vco)
> @@ -919,7 +929,7 @@ static u8 skl_calc_voltage_level(int cdclk)
>  		return 0;
>  }
>  
> -static void skl_dpll0_update(struct drm_i915_private *dev_priv,
> +static void skl_dpll0_update(struct intel_display *display,
>  			     struct intel_cdclk_config *cdclk_config)
>  {
>  	u32 val;
> @@ -927,16 +937,16 @@ static void skl_dpll0_update(struct drm_i915_private *dev_priv,
>  	cdclk_config->ref = 24000;
>  	cdclk_config->vco = 0;
>  
> -	val = intel_de_read(dev_priv, LCPLL1_CTL);
> +	val = intel_de_read(display, LCPLL1_CTL);
>  	if ((val & LCPLL_PLL_ENABLE) == 0)
>  		return;
>  
> -	if (drm_WARN_ON(&dev_priv->drm, (val & LCPLL_PLL_LOCK) == 0))
> +	if (drm_WARN_ON(display->drm, (val & LCPLL_PLL_LOCK) == 0))
>  		return;
>  
> -	val = intel_de_read(dev_priv, DPLL_CTRL1);
> +	val = intel_de_read(display, DPLL_CTRL1);
>  
> -	if (drm_WARN_ON(&dev_priv->drm,
> +	if (drm_WARN_ON(display->drm,
>  			(val & (DPLL_CTRL1_HDMI_MODE(SKL_DPLL0) |
>  				DPLL_CTRL1_SSC(SKL_DPLL0) |
>  				DPLL_CTRL1_OVERRIDE(SKL_DPLL0))) !=
> @@ -960,19 +970,19 @@ static void skl_dpll0_update(struct drm_i915_private *dev_priv,
>  	}
>  }
>  
> -static void skl_get_cdclk(struct drm_i915_private *dev_priv,
> +static void skl_get_cdclk(struct intel_display *display,
>  			  struct intel_cdclk_config *cdclk_config)
>  {
>  	u32 cdctl;
>  
> -	skl_dpll0_update(dev_priv, cdclk_config);
> +	skl_dpll0_update(display, cdclk_config);
>  
>  	cdclk_config->cdclk = cdclk_config->bypass = cdclk_config->ref;
>  
>  	if (cdclk_config->vco == 0)
>  		goto out;
>  
> -	cdctl = intel_de_read(dev_priv, CDCLK_CTL);
> +	cdctl = intel_de_read(display, CDCLK_CTL);
>  
>  	if (cdclk_config->vco == 8640000) {
>  		switch (cdctl & CDCLK_FREQ_SEL_MASK) {
> @@ -1027,19 +1037,19 @@ static int skl_cdclk_decimal(int cdclk)
>  	return DIV_ROUND_CLOSEST(cdclk - 1000, 500);
>  }
>  
> -static void skl_set_preferred_cdclk_vco(struct drm_i915_private *i915, int vco)
> +static void skl_set_preferred_cdclk_vco(struct intel_display *display, int vco)
>  {
> -	bool changed = i915->display.cdclk.skl_preferred_vco_freq != vco;
> +	bool changed = display->cdclk.skl_preferred_vco_freq != vco;
>  
> -	i915->display.cdclk.skl_preferred_vco_freq = vco;
> +	display->cdclk.skl_preferred_vco_freq = vco;
>  
>  	if (changed)
> -		intel_update_max_cdclk(i915);
> +		intel_update_max_cdclk(display);
>  }
>  
> -static u32 skl_dpll0_link_rate(struct drm_i915_private *dev_priv, int vco)
> +static u32 skl_dpll0_link_rate(struct intel_display *display, int vco)
>  {
> -	drm_WARN_ON(&dev_priv->drm, vco != 8100000 && vco != 8640000);
> +	drm_WARN_ON(display->drm, vco != 8100000 && vco != 8640000);
>  
>  	/*
>  	 * We always enable DPLL0 with the lowest link rate possible, but still
> @@ -1056,47 +1066,47 @@ static u32 skl_dpll0_link_rate(struct drm_i915_private *dev_priv, int vco)
>  		return DPLL_CTRL1_LINK_RATE(DPLL_CTRL1_LINK_RATE_810, SKL_DPLL0);
>  }
>  
> -static void skl_dpll0_enable(struct drm_i915_private *dev_priv, int vco)
> +static void skl_dpll0_enable(struct intel_display *display, int vco)
>  {
> -	intel_de_rmw(dev_priv, DPLL_CTRL1,
> +	intel_de_rmw(display, DPLL_CTRL1,
>  		     DPLL_CTRL1_HDMI_MODE(SKL_DPLL0) |
>  		     DPLL_CTRL1_SSC(SKL_DPLL0) |
>  		     DPLL_CTRL1_LINK_RATE_MASK(SKL_DPLL0),
>  		     DPLL_CTRL1_OVERRIDE(SKL_DPLL0) |
> -		     skl_dpll0_link_rate(dev_priv, vco));
> -	intel_de_posting_read(dev_priv, DPLL_CTRL1);
> +		     skl_dpll0_link_rate(display, vco));
> +	intel_de_posting_read(display, DPLL_CTRL1);
>  
> -	intel_de_rmw(dev_priv, LCPLL1_CTL,
> +	intel_de_rmw(display, LCPLL1_CTL,
>  		     0, LCPLL_PLL_ENABLE);
>  
> -	if (intel_de_wait_for_set(dev_priv, LCPLL1_CTL, LCPLL_PLL_LOCK, 5))
> -		drm_err(&dev_priv->drm, "DPLL0 not locked\n");
> +	if (intel_de_wait_for_set(display, LCPLL1_CTL, LCPLL_PLL_LOCK, 5))
> +		drm_err(display->drm, "DPLL0 not locked\n");
>  
> -	dev_priv->display.cdclk.hw.vco = vco;
> +	display->cdclk.hw.vco = vco;
>  
>  	/* We'll want to keep using the current vco from now on. */
> -	skl_set_preferred_cdclk_vco(dev_priv, vco);
> +	skl_set_preferred_cdclk_vco(display, vco);
>  }
>  
> -static void skl_dpll0_disable(struct drm_i915_private *dev_priv)
> +static void skl_dpll0_disable(struct intel_display *display)
>  {
> -	intel_de_rmw(dev_priv, LCPLL1_CTL,
> +	intel_de_rmw(display, LCPLL1_CTL,
>  		     LCPLL_PLL_ENABLE, 0);
>  
> -	if (intel_de_wait_for_clear(dev_priv, LCPLL1_CTL, LCPLL_PLL_LOCK, 1))
> -		drm_err(&dev_priv->drm, "Couldn't disable DPLL0\n");
> +	if (intel_de_wait_for_clear(display, LCPLL1_CTL, LCPLL_PLL_LOCK, 1))
> +		drm_err(display->drm, "Couldn't disable DPLL0\n");
>  
> -	dev_priv->display.cdclk.hw.vco = 0;
> +	display->cdclk.hw.vco = 0;
>  }
>  
> -static u32 skl_cdclk_freq_sel(struct drm_i915_private *dev_priv,
> +static u32 skl_cdclk_freq_sel(struct intel_display *display,
>  			      int cdclk, int vco)
>  {
>  	switch (cdclk) {
>  	default:
> -		drm_WARN_ON(&dev_priv->drm,
> -			    cdclk != dev_priv->display.cdclk.hw.bypass);
> -		drm_WARN_ON(&dev_priv->drm, vco != 0);
> +		drm_WARN_ON(display->drm,
> +			    cdclk != display->cdclk.hw.bypass);
> +		drm_WARN_ON(display->drm, vco != 0);
>  		fallthrough;
>  	case 308571:
>  	case 337500:
> @@ -1112,10 +1122,11 @@ static u32 skl_cdclk_freq_sel(struct drm_i915_private *dev_priv,
>  	}
>  }
>  
> -static void skl_set_cdclk(struct drm_i915_private *dev_priv,
> +static void skl_set_cdclk(struct intel_display *display,
>  			  const struct intel_cdclk_config *cdclk_config,
>  			  enum pipe pipe)
>  {
> +	struct drm_i915_private *dev_priv = to_i915(display->drm);
>  	int cdclk = cdclk_config->cdclk;
>  	int vco = cdclk_config->vco;
>  	u32 freq_select, cdclk_ctl;
> @@ -1129,7 +1140,7 @@ static void skl_set_cdclk(struct drm_i915_private *dev_priv,
>  	 * use the corresponding VCO freq as that always leads to using the
>  	 * minimum 308MHz CDCLK.
>  	 */
> -	drm_WARN_ON_ONCE(&dev_priv->drm,
> +	drm_WARN_ON_ONCE(display->drm,
>  			 IS_SKYLAKE(dev_priv) && vco == 8640000);
>  
>  	ret = skl_pcode_request(&dev_priv->uncore, SKL_PCODE_CDCLK_CONTROL,
> @@ -1137,54 +1148,54 @@ static void skl_set_cdclk(struct drm_i915_private *dev_priv,
>  				SKL_CDCLK_READY_FOR_CHANGE,
>  				SKL_CDCLK_READY_FOR_CHANGE, 3);
>  	if (ret) {
> -		drm_err(&dev_priv->drm,
> +		drm_err(display->drm,
>  			"Failed to inform PCU about cdclk change (%d)\n", ret);
>  		return;
>  	}
>  
> -	freq_select = skl_cdclk_freq_sel(dev_priv, cdclk, vco);
> +	freq_select = skl_cdclk_freq_sel(display, cdclk, vco);
>  
> -	if (dev_priv->display.cdclk.hw.vco != 0 &&
> -	    dev_priv->display.cdclk.hw.vco != vco)
> -		skl_dpll0_disable(dev_priv);
> +	if (display->cdclk.hw.vco != 0 &&
> +	    display->cdclk.hw.vco != vco)
> +		skl_dpll0_disable(display);
>  
> -	cdclk_ctl = intel_de_read(dev_priv, CDCLK_CTL);
> +	cdclk_ctl = intel_de_read(display, CDCLK_CTL);
>  
> -	if (dev_priv->display.cdclk.hw.vco != vco) {
> +	if (display->cdclk.hw.vco != vco) {
>  		/* Wa Display #1183: skl,kbl,cfl */
>  		cdclk_ctl &= ~(CDCLK_FREQ_SEL_MASK | CDCLK_FREQ_DECIMAL_MASK);
>  		cdclk_ctl |= freq_select | skl_cdclk_decimal(cdclk);
> -		intel_de_write(dev_priv, CDCLK_CTL, cdclk_ctl);
> +		intel_de_write(display, CDCLK_CTL, cdclk_ctl);
>  	}
>  
>  	/* Wa Display #1183: skl,kbl,cfl */
>  	cdclk_ctl |= CDCLK_DIVMUX_CD_OVERRIDE;
> -	intel_de_write(dev_priv, CDCLK_CTL, cdclk_ctl);
> -	intel_de_posting_read(dev_priv, CDCLK_CTL);
> +	intel_de_write(display, CDCLK_CTL, cdclk_ctl);
> +	intel_de_posting_read(display, CDCLK_CTL);
>  
> -	if (dev_priv->display.cdclk.hw.vco != vco)
> -		skl_dpll0_enable(dev_priv, vco);
> +	if (display->cdclk.hw.vco != vco)
> +		skl_dpll0_enable(display, vco);
>  
>  	/* Wa Display #1183: skl,kbl,cfl */
>  	cdclk_ctl &= ~(CDCLK_FREQ_SEL_MASK | CDCLK_FREQ_DECIMAL_MASK);
> -	intel_de_write(dev_priv, CDCLK_CTL, cdclk_ctl);
> +	intel_de_write(display, CDCLK_CTL, cdclk_ctl);
>  
>  	cdclk_ctl |= freq_select | skl_cdclk_decimal(cdclk);
> -	intel_de_write(dev_priv, CDCLK_CTL, cdclk_ctl);
> +	intel_de_write(display, CDCLK_CTL, cdclk_ctl);
>  
>  	/* Wa Display #1183: skl,kbl,cfl */
>  	cdclk_ctl &= ~CDCLK_DIVMUX_CD_OVERRIDE;
> -	intel_de_write(dev_priv, CDCLK_CTL, cdclk_ctl);
> -	intel_de_posting_read(dev_priv, CDCLK_CTL);
> +	intel_de_write(display, CDCLK_CTL, cdclk_ctl);
> +	intel_de_posting_read(display, CDCLK_CTL);
>  
>  	/* inform PCU of the change */
>  	snb_pcode_write(&dev_priv->uncore, SKL_PCODE_CDCLK_CONTROL,
>  			cdclk_config->voltage_level);
>  
> -	intel_update_cdclk(dev_priv);
> +	intel_update_cdclk(display);
>  }
>  
> -static void skl_sanitize_cdclk(struct drm_i915_private *dev_priv)
> +static void skl_sanitize_cdclk(struct intel_display *display)
>  {
>  	u32 cdctl, expected;
>  
> @@ -1193,15 +1204,15 @@ static void skl_sanitize_cdclk(struct drm_i915_private *dev_priv)
>  	 * There is SWF18 scratchpad register defined which is set by the
>  	 * pre-os which can be used by the OS drivers to check the status
>  	 */
> -	if ((intel_de_read(dev_priv, SWF_ILK(0x18)) & 0x00FFFFFF) == 0)
> +	if ((intel_de_read(display, SWF_ILK(0x18)) & 0x00FFFFFF) == 0)
>  		goto sanitize;
>  
> -	intel_update_cdclk(dev_priv);
> -	intel_cdclk_dump_config(dev_priv, &dev_priv->display.cdclk.hw, "Current CDCLK");
> +	intel_update_cdclk(display);
> +	intel_cdclk_dump_config(display, &display->cdclk.hw, "Current CDCLK");
>  
>  	/* Is PLL enabled and locked ? */
> -	if (dev_priv->display.cdclk.hw.vco == 0 ||
> -	    dev_priv->display.cdclk.hw.cdclk == dev_priv->display.cdclk.hw.bypass)
> +	if (display->cdclk.hw.vco == 0 ||
> +	    display->cdclk.hw.cdclk == display->cdclk.hw.bypass)
>  		goto sanitize;
>  
>  	/* DPLL okay; verify the cdclock
> @@ -1210,60 +1221,60 @@ static void skl_sanitize_cdclk(struct drm_i915_private *dev_priv)
>  	 * decimal part is programmed wrong from BIOS where pre-os does not
>  	 * enable display. Verify the same as well.
>  	 */
> -	cdctl = intel_de_read(dev_priv, CDCLK_CTL);
> +	cdctl = intel_de_read(display, CDCLK_CTL);
>  	expected = (cdctl & CDCLK_FREQ_SEL_MASK) |
> -		skl_cdclk_decimal(dev_priv->display.cdclk.hw.cdclk);
> +		skl_cdclk_decimal(display->cdclk.hw.cdclk);
>  	if (cdctl == expected)
>  		/* All well; nothing to sanitize */
>  		return;
>  
>  sanitize:
> -	drm_dbg_kms(&dev_priv->drm, "Sanitizing cdclk programmed by pre-os\n");
> +	drm_dbg_kms(display->drm, "Sanitizing cdclk programmed by pre-os\n");
>  
>  	/* force cdclk programming */
> -	dev_priv->display.cdclk.hw.cdclk = 0;
> +	display->cdclk.hw.cdclk = 0;
>  	/* force full PLL disable + enable */
> -	dev_priv->display.cdclk.hw.vco = ~0;
> +	display->cdclk.hw.vco = ~0;
>  }
>  
> -static void skl_cdclk_init_hw(struct drm_i915_private *dev_priv)
> +static void skl_cdclk_init_hw(struct intel_display *display)
>  {
>  	struct intel_cdclk_config cdclk_config;
>  
> -	skl_sanitize_cdclk(dev_priv);
> +	skl_sanitize_cdclk(display);
>  
> -	if (dev_priv->display.cdclk.hw.cdclk != 0 &&
> -	    dev_priv->display.cdclk.hw.vco != 0) {
> +	if (display->cdclk.hw.cdclk != 0 &&
> +	    display->cdclk.hw.vco != 0) {
>  		/*
>  		 * Use the current vco as our initial
>  		 * guess as to what the preferred vco is.
>  		 */
> -		if (dev_priv->display.cdclk.skl_preferred_vco_freq == 0)
> -			skl_set_preferred_cdclk_vco(dev_priv,
> -						    dev_priv->display.cdclk.hw.vco);
> +		if (display->cdclk.skl_preferred_vco_freq == 0)
> +			skl_set_preferred_cdclk_vco(display,
> +						    display->cdclk.hw.vco);
>  		return;
>  	}
>  
> -	cdclk_config = dev_priv->display.cdclk.hw;
> +	cdclk_config = display->cdclk.hw;
>  
> -	cdclk_config.vco = dev_priv->display.cdclk.skl_preferred_vco_freq;
> +	cdclk_config.vco = display->cdclk.skl_preferred_vco_freq;
>  	if (cdclk_config.vco == 0)
>  		cdclk_config.vco = 8100000;
>  	cdclk_config.cdclk = skl_calc_cdclk(0, cdclk_config.vco);
>  	cdclk_config.voltage_level = skl_calc_voltage_level(cdclk_config.cdclk);
>  
> -	skl_set_cdclk(dev_priv, &cdclk_config, INVALID_PIPE);
> +	skl_set_cdclk(display, &cdclk_config, INVALID_PIPE);
>  }
>  
> -static void skl_cdclk_uninit_hw(struct drm_i915_private *dev_priv)
> +static void skl_cdclk_uninit_hw(struct intel_display *display)
>  {
> -	struct intel_cdclk_config cdclk_config = dev_priv->display.cdclk.hw;
> +	struct intel_cdclk_config cdclk_config = display->cdclk.hw;
>  
>  	cdclk_config.cdclk = cdclk_config.bypass;
>  	cdclk_config.vco = 0;
>  	cdclk_config.voltage_level = skl_calc_voltage_level(cdclk_config.cdclk);
>  
> -	skl_set_cdclk(dev_priv, &cdclk_config, INVALID_PIPE);
> +	skl_set_cdclk(display, &cdclk_config, INVALID_PIPE);
>  }
>  
>  struct intel_cdclk_vals {
> @@ -1471,37 +1482,37 @@ static int cdclk_divider(int cdclk, int vco, u16 waveform)
>  				 cdclk * cdclk_squash_len);
>  }
>  
> -static int bxt_calc_cdclk(struct drm_i915_private *dev_priv, int min_cdclk)
> +static int bxt_calc_cdclk(struct intel_display *display, int min_cdclk)
>  {
> -	const struct intel_cdclk_vals *table = dev_priv->display.cdclk.table;
> +	const struct intel_cdclk_vals *table = display->cdclk.table;
>  	int i;
>  
>  	for (i = 0; table[i].refclk; i++)
> -		if (table[i].refclk == dev_priv->display.cdclk.hw.ref &&
> +		if (table[i].refclk == display->cdclk.hw.ref &&
>  		    table[i].cdclk >= min_cdclk)
>  			return table[i].cdclk;
>  
> -	drm_WARN(&dev_priv->drm, 1,
> +	drm_WARN(display->drm, 1,
>  		 "Cannot satisfy minimum cdclk %d with refclk %u\n",
> -		 min_cdclk, dev_priv->display.cdclk.hw.ref);
> +		 min_cdclk, display->cdclk.hw.ref);
>  	return 0;
>  }
>  
> -static int bxt_calc_cdclk_pll_vco(struct drm_i915_private *dev_priv, int cdclk)
> +static int bxt_calc_cdclk_pll_vco(struct intel_display *display, int cdclk)
>  {
> -	const struct intel_cdclk_vals *table = dev_priv->display.cdclk.table;
> +	const struct intel_cdclk_vals *table = display->cdclk.table;
>  	int i;
>  
> -	if (cdclk == dev_priv->display.cdclk.hw.bypass)
> +	if (cdclk == display->cdclk.hw.bypass)
>  		return 0;
>  
>  	for (i = 0; table[i].refclk; i++)
> -		if (table[i].refclk == dev_priv->display.cdclk.hw.ref &&
> +		if (table[i].refclk == display->cdclk.hw.ref &&
>  		    table[i].cdclk == cdclk)
> -			return dev_priv->display.cdclk.hw.ref * table[i].ratio;
> +			return display->cdclk.hw.ref * table[i].ratio;
>  
> -	drm_WARN(&dev_priv->drm, 1, "cdclk %d not valid for refclk %u\n",
> -		 cdclk, dev_priv->display.cdclk.hw.ref);
> +	drm_WARN(display->drm, 1, "cdclk %d not valid for refclk %u\n",
> +		 cdclk, display->cdclk.hw.ref);
>  	return 0;
>  }
>  
> @@ -1583,10 +1594,10 @@ static u8 rplu_calc_voltage_level(int cdclk)
>  				  rplu_voltage_level_max_cdclk);
>  }
>  
> -static void icl_readout_refclk(struct drm_i915_private *dev_priv,
> +static void icl_readout_refclk(struct intel_display *display,
>  			       struct intel_cdclk_config *cdclk_config)
>  {
> -	u32 dssm = intel_de_read(dev_priv, SKL_DSSM) & ICL_DSSM_CDCLK_PLL_REFCLK_MASK;
> +	u32 dssm = intel_de_read(display, SKL_DSSM) & ICL_DSSM_CDCLK_PLL_REFCLK_MASK;
>  
>  	switch (dssm) {
>  	default:
> @@ -1604,19 +1615,20 @@ static void icl_readout_refclk(struct drm_i915_private *dev_priv,
>  	}
>  }
>  
> -static void bxt_de_pll_readout(struct drm_i915_private *dev_priv,
> +static void bxt_de_pll_readout(struct intel_display *display,
>  			       struct intel_cdclk_config *cdclk_config)
>  {
> +	struct drm_i915_private *dev_priv = to_i915(display->drm);
>  	u32 val, ratio;
>  
>  	if (IS_DG2(dev_priv))
>  		cdclk_config->ref = 38400;
> -	else if (DISPLAY_VER(dev_priv) >= 11)
> -		icl_readout_refclk(dev_priv, cdclk_config);
> +	else if (DISPLAY_VER(display) >= 11)
> +		icl_readout_refclk(display, cdclk_config);
>  	else
>  		cdclk_config->ref = 19200;
>  
> -	val = intel_de_read(dev_priv, BXT_DE_PLL_ENABLE);
> +	val = intel_de_read(display, BXT_DE_PLL_ENABLE);
>  	if ((val & BXT_DE_PLL_PLL_ENABLE) == 0 ||
>  	    (val & BXT_DE_PLL_LOCK) == 0) {
>  		/*
> @@ -1631,26 +1643,26 @@ static void bxt_de_pll_readout(struct drm_i915_private *dev_priv,
>  	 * DISPLAY_VER >= 11 have the ratio directly in the PLL enable register,
>  	 * gen9lp had it in a separate PLL control register.
>  	 */
> -	if (DISPLAY_VER(dev_priv) >= 11)
> +	if (DISPLAY_VER(display) >= 11)
>  		ratio = val & ICL_CDCLK_PLL_RATIO_MASK;
>  	else
> -		ratio = intel_de_read(dev_priv, BXT_DE_PLL_CTL) & BXT_DE_PLL_RATIO_MASK;
> +		ratio = intel_de_read(display, BXT_DE_PLL_CTL) & BXT_DE_PLL_RATIO_MASK;
>  
>  	cdclk_config->vco = ratio * cdclk_config->ref;
>  }
>  
> -static void bxt_get_cdclk(struct drm_i915_private *dev_priv,
> +static void bxt_get_cdclk(struct intel_display *display,
>  			  struct intel_cdclk_config *cdclk_config)
>  {
>  	u32 squash_ctl = 0;
>  	u32 divider;
>  	int div;
>  
> -	bxt_de_pll_readout(dev_priv, cdclk_config);
> +	bxt_de_pll_readout(display, cdclk_config);
>  
> -	if (DISPLAY_VER(dev_priv) >= 12)
> +	if (DISPLAY_VER(display) >= 12)
>  		cdclk_config->bypass = cdclk_config->ref / 2;
> -	else if (DISPLAY_VER(dev_priv) >= 11)
> +	else if (DISPLAY_VER(display) >= 11)
>  		cdclk_config->bypass = 50000;
>  	else
>  		cdclk_config->bypass = cdclk_config->ref;
> @@ -1660,7 +1672,7 @@ static void bxt_get_cdclk(struct drm_i915_private *dev_priv,
>  		goto out;
>  	}
>  
> -	divider = intel_de_read(dev_priv, CDCLK_CTL) & BXT_CDCLK_CD2X_DIV_SEL_MASK;
> +	divider = intel_de_read(display, CDCLK_CTL) & BXT_CDCLK_CD2X_DIV_SEL_MASK;
>  
>  	switch (divider) {
>  	case BXT_CDCLK_CD2X_DIV_SEL_1:
> @@ -1680,8 +1692,8 @@ static void bxt_get_cdclk(struct drm_i915_private *dev_priv,
>  		return;
>  	}
>  
> -	if (HAS_CDCLK_SQUASH(dev_priv))
> -		squash_ctl = intel_de_read(dev_priv, CDCLK_SQUASH_CTL);
> +	if (HAS_CDCLK_SQUASH(display))
> +		squash_ctl = intel_de_read(display, CDCLK_SQUASH_CTL);
>  
>  	if (squash_ctl & CDCLK_SQUASH_ENABLE) {
>  		u16 waveform;
> @@ -1697,107 +1709,107 @@ static void bxt_get_cdclk(struct drm_i915_private *dev_priv,
>  	}
>  
>   out:
> -	if (DISPLAY_VER(dev_priv) >= 20)
> -		cdclk_config->joined_mbus = intel_de_read(dev_priv, MBUS_CTL) & MBUS_JOIN;
> +	if (DISPLAY_VER(display) >= 20)
> +		cdclk_config->joined_mbus = intel_de_read(display, MBUS_CTL) & MBUS_JOIN;
>  	/*
>  	 * Can't read this out :( Let's assume it's
>  	 * at least what the CDCLK frequency requires.
>  	 */
>  	cdclk_config->voltage_level =
> -		intel_cdclk_calc_voltage_level(dev_priv, cdclk_config->cdclk);
> +		intel_cdclk_calc_voltage_level(display, cdclk_config->cdclk);
>  }
>  
> -static void bxt_de_pll_disable(struct drm_i915_private *dev_priv)
> +static void bxt_de_pll_disable(struct intel_display *display)
>  {
> -	intel_de_write(dev_priv, BXT_DE_PLL_ENABLE, 0);
> +	intel_de_write(display, BXT_DE_PLL_ENABLE, 0);
>  
>  	/* Timeout 200us */
> -	if (intel_de_wait_for_clear(dev_priv,
> +	if (intel_de_wait_for_clear(display,
>  				    BXT_DE_PLL_ENABLE, BXT_DE_PLL_LOCK, 1))
> -		drm_err(&dev_priv->drm, "timeout waiting for DE PLL unlock\n");
> +		drm_err(display->drm, "timeout waiting for DE PLL unlock\n");
>  
> -	dev_priv->display.cdclk.hw.vco = 0;
> +	display->cdclk.hw.vco = 0;
>  }
>  
> -static void bxt_de_pll_enable(struct drm_i915_private *dev_priv, int vco)
> +static void bxt_de_pll_enable(struct intel_display *display, int vco)
>  {
> -	int ratio = DIV_ROUND_CLOSEST(vco, dev_priv->display.cdclk.hw.ref);
> +	int ratio = DIV_ROUND_CLOSEST(vco, display->cdclk.hw.ref);
>  
> -	intel_de_rmw(dev_priv, BXT_DE_PLL_CTL,
> +	intel_de_rmw(display, BXT_DE_PLL_CTL,
>  		     BXT_DE_PLL_RATIO_MASK, BXT_DE_PLL_RATIO(ratio));
>  
> -	intel_de_write(dev_priv, BXT_DE_PLL_ENABLE, BXT_DE_PLL_PLL_ENABLE);
> +	intel_de_write(display, BXT_DE_PLL_ENABLE, BXT_DE_PLL_PLL_ENABLE);
>  
>  	/* Timeout 200us */
> -	if (intel_de_wait_for_set(dev_priv,
> +	if (intel_de_wait_for_set(display,
>  				  BXT_DE_PLL_ENABLE, BXT_DE_PLL_LOCK, 1))
> -		drm_err(&dev_priv->drm, "timeout waiting for DE PLL lock\n");
> +		drm_err(display->drm, "timeout waiting for DE PLL lock\n");
>  
> -	dev_priv->display.cdclk.hw.vco = vco;
> +	display->cdclk.hw.vco = vco;
>  }
>  
> -static void icl_cdclk_pll_disable(struct drm_i915_private *dev_priv)
> +static void icl_cdclk_pll_disable(struct intel_display *display)
>  {
> -	intel_de_rmw(dev_priv, BXT_DE_PLL_ENABLE,
> +	intel_de_rmw(display, BXT_DE_PLL_ENABLE,
>  		     BXT_DE_PLL_PLL_ENABLE, 0);
>  
>  	/* Timeout 200us */
> -	if (intel_de_wait_for_clear(dev_priv, BXT_DE_PLL_ENABLE, BXT_DE_PLL_LOCK, 1))
> -		drm_err(&dev_priv->drm, "timeout waiting for CDCLK PLL unlock\n");
> +	if (intel_de_wait_for_clear(display, BXT_DE_PLL_ENABLE, BXT_DE_PLL_LOCK, 1))
> +		drm_err(display->drm, "timeout waiting for CDCLK PLL unlock\n");
>  
> -	dev_priv->display.cdclk.hw.vco = 0;
> +	display->cdclk.hw.vco = 0;
>  }
>  
> -static void icl_cdclk_pll_enable(struct drm_i915_private *dev_priv, int vco)
> +static void icl_cdclk_pll_enable(struct intel_display *display, int vco)
>  {
> -	int ratio = DIV_ROUND_CLOSEST(vco, dev_priv->display.cdclk.hw.ref);
> +	int ratio = DIV_ROUND_CLOSEST(vco, display->cdclk.hw.ref);
>  	u32 val;
>  
>  	val = ICL_CDCLK_PLL_RATIO(ratio);
> -	intel_de_write(dev_priv, BXT_DE_PLL_ENABLE, val);
> +	intel_de_write(display, BXT_DE_PLL_ENABLE, val);
>  
>  	val |= BXT_DE_PLL_PLL_ENABLE;
> -	intel_de_write(dev_priv, BXT_DE_PLL_ENABLE, val);
> +	intel_de_write(display, BXT_DE_PLL_ENABLE, val);
>  
>  	/* Timeout 200us */
> -	if (intel_de_wait_for_set(dev_priv, BXT_DE_PLL_ENABLE, BXT_DE_PLL_LOCK, 1))
> -		drm_err(&dev_priv->drm, "timeout waiting for CDCLK PLL lock\n");
> +	if (intel_de_wait_for_set(display, BXT_DE_PLL_ENABLE, BXT_DE_PLL_LOCK, 1))
> +		drm_err(display->drm, "timeout waiting for CDCLK PLL lock\n");
>  
> -	dev_priv->display.cdclk.hw.vco = vco;
> +	display->cdclk.hw.vco = vco;
>  }
>  
> -static void adlp_cdclk_pll_crawl(struct drm_i915_private *dev_priv, int vco)
> +static void adlp_cdclk_pll_crawl(struct intel_display *display, int vco)
>  {
> -	int ratio = DIV_ROUND_CLOSEST(vco, dev_priv->display.cdclk.hw.ref);
> +	int ratio = DIV_ROUND_CLOSEST(vco, display->cdclk.hw.ref);
>  	u32 val;
>  
>  	/* Write PLL ratio without disabling */
>  	val = ICL_CDCLK_PLL_RATIO(ratio) | BXT_DE_PLL_PLL_ENABLE;
> -	intel_de_write(dev_priv, BXT_DE_PLL_ENABLE, val);
> +	intel_de_write(display, BXT_DE_PLL_ENABLE, val);
>  
>  	/* Submit freq change request */
>  	val |= BXT_DE_PLL_FREQ_REQ;
> -	intel_de_write(dev_priv, BXT_DE_PLL_ENABLE, val);
> +	intel_de_write(display, BXT_DE_PLL_ENABLE, val);
>  
>  	/* Timeout 200us */
> -	if (intel_de_wait_for_set(dev_priv, BXT_DE_PLL_ENABLE,
> +	if (intel_de_wait_for_set(display, BXT_DE_PLL_ENABLE,
>  				  BXT_DE_PLL_LOCK | BXT_DE_PLL_FREQ_REQ_ACK, 1))
> -		drm_err(&dev_priv->drm, "timeout waiting for FREQ change request ack\n");
> +		drm_err(display->drm, "timeout waiting for FREQ change request ack\n");
>  
>  	val &= ~BXT_DE_PLL_FREQ_REQ;
> -	intel_de_write(dev_priv, BXT_DE_PLL_ENABLE, val);
> +	intel_de_write(display, BXT_DE_PLL_ENABLE, val);
>  
> -	dev_priv->display.cdclk.hw.vco = vco;
> +	display->cdclk.hw.vco = vco;
>  }
>  
> -static u32 bxt_cdclk_cd2x_pipe(struct drm_i915_private *dev_priv, enum pipe pipe)
> +static u32 bxt_cdclk_cd2x_pipe(struct intel_display *display, enum pipe pipe)
>  {
> -	if (DISPLAY_VER(dev_priv) >= 12) {
> +	if (DISPLAY_VER(display) >= 12) {
>  		if (pipe == INVALID_PIPE)
>  			return TGL_CDCLK_CD2X_PIPE_NONE;
>  		else
>  			return TGL_CDCLK_CD2X_PIPE(pipe);
> -	} else if (DISPLAY_VER(dev_priv) >= 11) {
> +	} else if (DISPLAY_VER(display) >= 11) {
>  		if (pipe == INVALID_PIPE)
>  			return ICL_CDCLK_CD2X_PIPE_NONE;
>  		else
> @@ -1810,15 +1822,15 @@ static u32 bxt_cdclk_cd2x_pipe(struct drm_i915_private *dev_priv, enum pipe pipe
>  	}
>  }
>  
> -static u32 bxt_cdclk_cd2x_div_sel(struct drm_i915_private *dev_priv,
> +static u32 bxt_cdclk_cd2x_div_sel(struct intel_display *display,
>  				  int cdclk, int vco, u16 waveform)
>  {
>  	/* cdclk = vco / 2 / div{1,1.5,2,4} */
>  	switch (cdclk_divider(cdclk, vco, waveform)) {
>  	default:
> -		drm_WARN_ON(&dev_priv->drm,
> -			    cdclk != dev_priv->display.cdclk.hw.bypass);
> -		drm_WARN_ON(&dev_priv->drm, vco != 0);
> +		drm_WARN_ON(display->drm,
> +			    cdclk != display->cdclk.hw.bypass);
> +		drm_WARN_ON(display->drm, vco != 0);
>  		fallthrough;
>  	case 2:
>  		return BXT_CDCLK_CD2X_DIV_SEL_1;
> @@ -1831,47 +1843,47 @@ static u32 bxt_cdclk_cd2x_div_sel(struct drm_i915_private *dev_priv,
>  	}
>  }
>  
> -static u16 cdclk_squash_waveform(struct drm_i915_private *dev_priv,
> +static u16 cdclk_squash_waveform(struct intel_display *display,
>  				 int cdclk)
>  {
> -	const struct intel_cdclk_vals *table = dev_priv->display.cdclk.table;
> +	const struct intel_cdclk_vals *table = display->cdclk.table;
>  	int i;
>  
> -	if (cdclk == dev_priv->display.cdclk.hw.bypass)
> +	if (cdclk == display->cdclk.hw.bypass)
>  		return 0;
>  
>  	for (i = 0; table[i].refclk; i++)
> -		if (table[i].refclk == dev_priv->display.cdclk.hw.ref &&
> +		if (table[i].refclk == display->cdclk.hw.ref &&
>  		    table[i].cdclk == cdclk)
>  			return table[i].waveform;
>  
> -	drm_WARN(&dev_priv->drm, 1, "cdclk %d not valid for refclk %u\n",
> -		 cdclk, dev_priv->display.cdclk.hw.ref);
> +	drm_WARN(display->drm, 1, "cdclk %d not valid for refclk %u\n",
> +		 cdclk, display->cdclk.hw.ref);
>  
>  	return 0xffff;
>  }
>  
> -static void icl_cdclk_pll_update(struct drm_i915_private *i915, int vco)
> +static void icl_cdclk_pll_update(struct intel_display *display, int vco)
>  {
> -	if (i915->display.cdclk.hw.vco != 0 &&
> -	    i915->display.cdclk.hw.vco != vco)
> -		icl_cdclk_pll_disable(i915);
> +	if (display->cdclk.hw.vco != 0 &&
> +	    display->cdclk.hw.vco != vco)
> +		icl_cdclk_pll_disable(display);
>  
> -	if (i915->display.cdclk.hw.vco != vco)
> -		icl_cdclk_pll_enable(i915, vco);
> +	if (display->cdclk.hw.vco != vco)
> +		icl_cdclk_pll_enable(display, vco);
>  }
>  
> -static void bxt_cdclk_pll_update(struct drm_i915_private *i915, int vco)
> +static void bxt_cdclk_pll_update(struct intel_display *display, int vco)
>  {
> -	if (i915->display.cdclk.hw.vco != 0 &&
> -	    i915->display.cdclk.hw.vco != vco)
> -		bxt_de_pll_disable(i915);
> +	if (display->cdclk.hw.vco != 0 &&
> +	    display->cdclk.hw.vco != vco)
> +		bxt_de_pll_disable(display);
>  
> -	if (i915->display.cdclk.hw.vco != vco)
> -		bxt_de_pll_enable(i915, vco);
> +	if (display->cdclk.hw.vco != vco)
> +		bxt_de_pll_enable(display, vco);
>  }
>  
> -static void dg2_cdclk_squash_program(struct drm_i915_private *i915,
> +static void dg2_cdclk_squash_program(struct intel_display *display,
>  				     u16 waveform)
>  {
>  	u32 squash_ctl = 0;
> @@ -1880,7 +1892,7 @@ static void dg2_cdclk_squash_program(struct drm_i915_private *i915,
>  		squash_ctl = CDCLK_SQUASH_ENABLE |
>  			     CDCLK_SQUASH_WINDOW_SIZE(0xf) | waveform;
>  
> -	intel_de_write(i915, CDCLK_SQUASH_CTL, squash_ctl);
> +	intel_de_write(display, CDCLK_SQUASH_CTL, squash_ctl);
>  }
>  
>  static bool cdclk_pll_is_unknown(unsigned int vco)
> @@ -1893,38 +1905,40 @@ static bool cdclk_pll_is_unknown(unsigned int vco)
>  	return vco == ~0;
>  }
>  
> -static bool mdclk_source_is_cdclk_pll(struct drm_i915_private *i915)
> +static bool mdclk_source_is_cdclk_pll(struct intel_display *display)
>  {
> -	return DISPLAY_VER(i915) >= 20;
> +	return DISPLAY_VER(display) >= 20;
>  }
>  
> -static u32 xe2lpd_mdclk_source_sel(struct drm_i915_private *i915)
> +static u32 xe2lpd_mdclk_source_sel(struct intel_display *display)
>  {
> -	if (mdclk_source_is_cdclk_pll(i915))
> +	if (mdclk_source_is_cdclk_pll(display))
>  		return MDCLK_SOURCE_SEL_CDCLK_PLL;
>  
>  	return MDCLK_SOURCE_SEL_CD2XCLK;
>  }
>  
> -int intel_mdclk_cdclk_ratio(struct drm_i915_private *i915,
> +int intel_mdclk_cdclk_ratio(struct intel_display *display,
>  			    const struct intel_cdclk_config *cdclk_config)
>  {
> -	if (mdclk_source_is_cdclk_pll(i915))
> +	if (mdclk_source_is_cdclk_pll(display))
>  		return DIV_ROUND_UP(cdclk_config->vco, cdclk_config->cdclk);
>  
>  	/* Otherwise, source for MDCLK is CD2XCLK. */
>  	return 2;
>  }
>  
> -static void xe2lpd_mdclk_cdclk_ratio_program(struct drm_i915_private *i915,
> +static void xe2lpd_mdclk_cdclk_ratio_program(struct intel_display *display,
>  					     const struct intel_cdclk_config *cdclk_config)
>  {
> +	struct drm_i915_private *i915 = to_i915(display->drm);
> +
>  	intel_dbuf_mdclk_cdclk_ratio_update(i915,
> -					    intel_mdclk_cdclk_ratio(i915, cdclk_config),
> +					    intel_mdclk_cdclk_ratio(display, cdclk_config),
>  					    cdclk_config->joined_mbus);
>  }
>  
> -static bool cdclk_compute_crawl_and_squash_midpoint(struct drm_i915_private *i915,
> +static bool cdclk_compute_crawl_and_squash_midpoint(struct intel_display *display,
>  						    const struct intel_cdclk_config *old_cdclk_config,
>  						    const struct intel_cdclk_config *new_cdclk_config,
>  						    struct intel_cdclk_config *mid_cdclk_config)
> @@ -1937,11 +1951,11 @@ static bool cdclk_compute_crawl_and_squash_midpoint(struct drm_i915_private *i91
>  		return false;
>  
>  	/* Return if both Squash and Crawl are not present */
> -	if (!HAS_CDCLK_CRAWL(i915) || !HAS_CDCLK_SQUASH(i915))
> +	if (!HAS_CDCLK_CRAWL(display) || !HAS_CDCLK_SQUASH(display))
>  		return false;
>  
> -	old_waveform = cdclk_squash_waveform(i915, old_cdclk_config->cdclk);
> -	new_waveform = cdclk_squash_waveform(i915, new_cdclk_config->cdclk);
> +	old_waveform = cdclk_squash_waveform(display, old_cdclk_config->cdclk);
> +	new_waveform = cdclk_squash_waveform(display, new_cdclk_config->cdclk);
>  
>  	/* Return if Squash only or Crawl only is the desired action */
>  	if (old_cdclk_config->vco == 0 || new_cdclk_config->vco == 0 ||
> @@ -1958,7 +1972,7 @@ static bool cdclk_compute_crawl_and_squash_midpoint(struct drm_i915_private *i91
>  	 * Should not happen currently. We might need more midpoint
>  	 * transitions if we need to also change the cd2x divider.
>  	 */
> -	if (drm_WARN_ON(&i915->drm, old_div != new_div))
> +	if (drm_WARN_ON(display->drm, old_div != new_div))
>  		return false;
>  
>  	*mid_cdclk_config = *new_cdclk_config;
> @@ -1987,37 +2001,40 @@ static bool cdclk_compute_crawl_and_squash_midpoint(struct drm_i915_private *i91
>  
>  	/* make sure the mid clock came out sane */
>  
> -	drm_WARN_ON(&i915->drm, mid_cdclk_config->cdclk <
> +	drm_WARN_ON(display->drm, mid_cdclk_config->cdclk <
>  		    min(old_cdclk_config->cdclk, new_cdclk_config->cdclk));
> -	drm_WARN_ON(&i915->drm, mid_cdclk_config->cdclk >
> -		    i915->display.cdclk.max_cdclk_freq);
> -	drm_WARN_ON(&i915->drm, cdclk_squash_waveform(i915, mid_cdclk_config->cdclk) !=
> +	drm_WARN_ON(display->drm, mid_cdclk_config->cdclk >
> +		    display->cdclk.max_cdclk_freq);
> +	drm_WARN_ON(display->drm, cdclk_squash_waveform(display, mid_cdclk_config->cdclk) !=
>  		    mid_waveform);
>  
>  	return true;
>  }
>  
> -static bool pll_enable_wa_needed(struct drm_i915_private *dev_priv)
> +static bool pll_enable_wa_needed(struct intel_display *display)
>  {
> -	return (DISPLAY_VER_FULL(dev_priv) == IP_VER(20, 0) ||
> -		DISPLAY_VER_FULL(dev_priv) == IP_VER(14, 0) ||
> +	struct drm_i915_private *dev_priv = to_i915(display->drm);
> +
> +	return (DISPLAY_VER_FULL(display) == IP_VER(20, 0) ||
> +		DISPLAY_VER_FULL(display) == IP_VER(14, 0) ||
>  		IS_DG2(dev_priv)) &&
> -		dev_priv->display.cdclk.hw.vco > 0;
> +		display->cdclk.hw.vco > 0;
>  }
>  
> -static u32 bxt_cdclk_ctl(struct drm_i915_private *i915,
> +static u32 bxt_cdclk_ctl(struct intel_display *display,
>  			 const struct intel_cdclk_config *cdclk_config,
>  			 enum pipe pipe)
>  {
> +	struct drm_i915_private *i915 = to_i915(display->drm);
>  	int cdclk = cdclk_config->cdclk;
>  	int vco = cdclk_config->vco;
>  	u16 waveform;
>  	u32 val;
>  
> -	waveform = cdclk_squash_waveform(i915, cdclk);
> +	waveform = cdclk_squash_waveform(display, cdclk);
>  
> -	val = bxt_cdclk_cd2x_div_sel(i915, cdclk, vco, waveform) |
> -		bxt_cdclk_cd2x_pipe(i915, pipe);
> +	val = bxt_cdclk_cd2x_div_sel(display, cdclk, vco, waveform) |
> +		bxt_cdclk_cd2x_pipe(display, pipe);
>  
>  	/*
>  	 * Disable SSA Precharge when CD clock frequency < 500 MHz,
> @@ -2027,52 +2044,52 @@ static u32 bxt_cdclk_ctl(struct drm_i915_private *i915,
>  	    cdclk >= 500000)
>  		val |= BXT_CDCLK_SSA_PRECHARGE_ENABLE;
>  
> -	if (DISPLAY_VER(i915) >= 20)
> -		val |= xe2lpd_mdclk_source_sel(i915);
> +	if (DISPLAY_VER(display) >= 20)
> +		val |= xe2lpd_mdclk_source_sel(display);
>  	else
>  		val |= skl_cdclk_decimal(cdclk);
>  
>  	return val;
>  }
>  
> -static void _bxt_set_cdclk(struct drm_i915_private *dev_priv,
> +static void _bxt_set_cdclk(struct intel_display *display,
>  			   const struct intel_cdclk_config *cdclk_config,
>  			   enum pipe pipe)
>  {
> -	struct intel_display *display = &dev_priv->display;
>  	int cdclk = cdclk_config->cdclk;
>  	int vco = cdclk_config->vco;
>  
> -	if (HAS_CDCLK_CRAWL(dev_priv) && dev_priv->display.cdclk.hw.vco > 0 && vco > 0 &&
> -	    !cdclk_pll_is_unknown(dev_priv->display.cdclk.hw.vco)) {
> -		if (dev_priv->display.cdclk.hw.vco != vco)
> -			adlp_cdclk_pll_crawl(dev_priv, vco);
> -	} else if (DISPLAY_VER(dev_priv) >= 11) {
> +	if (HAS_CDCLK_CRAWL(display) && display->cdclk.hw.vco > 0 && vco > 0 &&
> +	    !cdclk_pll_is_unknown(display->cdclk.hw.vco)) {
> +		if (display->cdclk.hw.vco != vco)
> +			adlp_cdclk_pll_crawl(display, vco);
> +	} else if (DISPLAY_VER(display) >= 11) {
>  		/* wa_15010685871: dg2, mtl */
> -		if (pll_enable_wa_needed(dev_priv))
> -			dg2_cdclk_squash_program(dev_priv, 0);
> +		if (pll_enable_wa_needed(display))
> +			dg2_cdclk_squash_program(display, 0);
>  
> -		icl_cdclk_pll_update(dev_priv, vco);
> +		icl_cdclk_pll_update(display, vco);
>  	} else {
> -		bxt_cdclk_pll_update(dev_priv, vco);
> +		bxt_cdclk_pll_update(display, vco);
>  	}
>  
> -	if (HAS_CDCLK_SQUASH(dev_priv)) {
> -		u16 waveform = cdclk_squash_waveform(dev_priv, cdclk);
> +	if (HAS_CDCLK_SQUASH(display)) {
> +		u16 waveform = cdclk_squash_waveform(display, cdclk);
>  
> -		dg2_cdclk_squash_program(dev_priv, waveform);
> +		dg2_cdclk_squash_program(display, waveform);
>  	}
>  
> -	intel_de_write(dev_priv, CDCLK_CTL, bxt_cdclk_ctl(dev_priv, cdclk_config, pipe));
> +	intel_de_write(display, CDCLK_CTL, bxt_cdclk_ctl(display, cdclk_config, pipe));
>  
>  	if (pipe != INVALID_PIPE)
>  		intel_crtc_wait_for_next_vblank(intel_crtc_for_pipe(display, pipe));
>  }
>  
> -static void bxt_set_cdclk(struct drm_i915_private *dev_priv,
> +static void bxt_set_cdclk(struct intel_display *display,
>  			  const struct intel_cdclk_config *cdclk_config,
>  			  enum pipe pipe)
>  {
> +	struct drm_i915_private *dev_priv = to_i915(display->drm);
>  	struct intel_cdclk_config mid_cdclk_config;
>  	int cdclk = cdclk_config->cdclk;
>  	int ret = 0;
> @@ -2083,9 +2100,9 @@ static void bxt_set_cdclk(struct drm_i915_private *dev_priv,
>  	 * mailbox communication, skip
>  	 * this step.
>  	 */
> -	if (DISPLAY_VER(dev_priv) >= 14 || IS_DG2(dev_priv))
> +	if (DISPLAY_VER(display) >= 14 || IS_DG2(dev_priv))
>  		/* NOOP */;
> -	else if (DISPLAY_VER(dev_priv) >= 11)
> +	else if (DISPLAY_VER(display) >= 11)
>  		ret = skl_pcode_request(&dev_priv->uncore, SKL_PCODE_CDCLK_CONTROL,
>  					SKL_CDCLK_PREPARE_FOR_CHANGE,
>  					SKL_CDCLK_READY_FOR_CHANGE,
> @@ -2100,35 +2117,35 @@ static void bxt_set_cdclk(struct drm_i915_private *dev_priv,
>  					      0x80000000, 150, 2);
>  
>  	if (ret) {
> -		drm_err(&dev_priv->drm,
> +		drm_err(display->drm,
>  			"Failed to inform PCU about cdclk change (err %d, freq %d)\n",
>  			ret, cdclk);
>  		return;
>  	}
>  
> -	if (DISPLAY_VER(dev_priv) >= 20 && cdclk < dev_priv->display.cdclk.hw.cdclk)
> -		xe2lpd_mdclk_cdclk_ratio_program(dev_priv, cdclk_config);
> +	if (DISPLAY_VER(display) >= 20 && cdclk < display->cdclk.hw.cdclk)
> +		xe2lpd_mdclk_cdclk_ratio_program(display, cdclk_config);
>  
> -	if (cdclk_compute_crawl_and_squash_midpoint(dev_priv, &dev_priv->display.cdclk.hw,
> +	if (cdclk_compute_crawl_and_squash_midpoint(display, &display->cdclk.hw,
>  						    cdclk_config, &mid_cdclk_config)) {
> -		_bxt_set_cdclk(dev_priv, &mid_cdclk_config, pipe);
> -		_bxt_set_cdclk(dev_priv, cdclk_config, pipe);
> +		_bxt_set_cdclk(display, &mid_cdclk_config, pipe);
> +		_bxt_set_cdclk(display, cdclk_config, pipe);
>  	} else {
> -		_bxt_set_cdclk(dev_priv, cdclk_config, pipe);
> +		_bxt_set_cdclk(display, cdclk_config, pipe);
>  	}
>  
> -	if (DISPLAY_VER(dev_priv) >= 20 && cdclk > dev_priv->display.cdclk.hw.cdclk)
> -		xe2lpd_mdclk_cdclk_ratio_program(dev_priv, cdclk_config);
> +	if (DISPLAY_VER(display) >= 20 && cdclk > display->cdclk.hw.cdclk)
> +		xe2lpd_mdclk_cdclk_ratio_program(display, cdclk_config);
>  
> -	if (DISPLAY_VER(dev_priv) >= 14)
> +	if (DISPLAY_VER(display) >= 14)
>  		/*
>  		 * NOOP - No Pcode communication needed for
>  		 * Display versions 14 and beyond
>  		 */;
> -	else if (DISPLAY_VER(dev_priv) >= 11 && !IS_DG2(dev_priv))
> +	else if (DISPLAY_VER(display) >= 11 && !IS_DG2(dev_priv))
>  		ret = snb_pcode_write(&dev_priv->uncore, SKL_PCODE_CDCLK_CONTROL,
>  				      cdclk_config->voltage_level);
> -	if (DISPLAY_VER(dev_priv) < 11) {
> +	if (DISPLAY_VER(display) < 11) {
>  		/*
>  		 * The timeout isn't specified, the 2ms used here is based on
>  		 * experiment.
> @@ -2141,42 +2158,42 @@ static void bxt_set_cdclk(struct drm_i915_private *dev_priv,
>  					      150, 2);
>  	}
>  	if (ret) {
> -		drm_err(&dev_priv->drm,
> +		drm_err(display->drm,
>  			"PCode CDCLK freq set failed, (err %d, freq %d)\n",
>  			ret, cdclk);
>  		return;
>  	}
>  
> -	intel_update_cdclk(dev_priv);
> +	intel_update_cdclk(display);
>  
> -	if (DISPLAY_VER(dev_priv) >= 11)
> +	if (DISPLAY_VER(display) >= 11)
>  		/*
>  		 * Can't read out the voltage level :(
>  		 * Let's just assume everything is as expected.
>  		 */
> -		dev_priv->display.cdclk.hw.voltage_level = cdclk_config->voltage_level;
> +		display->cdclk.hw.voltage_level = cdclk_config->voltage_level;
>  }
>  
> -static void bxt_sanitize_cdclk(struct drm_i915_private *dev_priv)
> +static void bxt_sanitize_cdclk(struct intel_display *display)
>  {
>  	u32 cdctl, expected;
>  	int cdclk, vco;
>  
> -	intel_update_cdclk(dev_priv);
> -	intel_cdclk_dump_config(dev_priv, &dev_priv->display.cdclk.hw, "Current CDCLK");
> +	intel_update_cdclk(display);
> +	intel_cdclk_dump_config(display, &display->cdclk.hw, "Current CDCLK");
>  
> -	if (dev_priv->display.cdclk.hw.vco == 0 ||
> -	    dev_priv->display.cdclk.hw.cdclk == dev_priv->display.cdclk.hw.bypass)
> +	if (display->cdclk.hw.vco == 0 ||
> +	    display->cdclk.hw.cdclk == display->cdclk.hw.bypass)
>  		goto sanitize;
>  
>  	/* Make sure this is a legal cdclk value for the platform */
> -	cdclk = bxt_calc_cdclk(dev_priv, dev_priv->display.cdclk.hw.cdclk);
> -	if (cdclk != dev_priv->display.cdclk.hw.cdclk)
> +	cdclk = bxt_calc_cdclk(display, display->cdclk.hw.cdclk);
> +	if (cdclk != display->cdclk.hw.cdclk)
>  		goto sanitize;
>  
>  	/* Make sure the VCO is correct for the cdclk */
> -	vco = bxt_calc_cdclk_pll_vco(dev_priv, cdclk);
> -	if (vco != dev_priv->display.cdclk.hw.vco)
> +	vco = bxt_calc_cdclk_pll_vco(display, cdclk);
> +	if (vco != display->cdclk.hw.vco)
>  		goto sanitize;
>  
>  	/*
> @@ -2184,129 +2201,133 @@ static void bxt_sanitize_cdclk(struct drm_i915_private *dev_priv)
>  	 * set reserved MBZ bits in CDCLK_CTL at least during exiting from S4,
>  	 * so sanitize this register.
>  	 */
> -	cdctl = intel_de_read(dev_priv, CDCLK_CTL);
> -	expected = bxt_cdclk_ctl(dev_priv, &dev_priv->display.cdclk.hw, INVALID_PIPE);
> +	cdctl = intel_de_read(display, CDCLK_CTL);
> +	expected = bxt_cdclk_ctl(display, &display->cdclk.hw, INVALID_PIPE);
>  
>  	/*
>  	 * Let's ignore the pipe field, since BIOS could have configured the
>  	 * dividers both synching to an active pipe, or asynchronously
>  	 * (PIPE_NONE).
>  	 */
> -	cdctl &= ~bxt_cdclk_cd2x_pipe(dev_priv, INVALID_PIPE);
> -	expected &= ~bxt_cdclk_cd2x_pipe(dev_priv, INVALID_PIPE);
> +	cdctl &= ~bxt_cdclk_cd2x_pipe(display, INVALID_PIPE);
> +	expected &= ~bxt_cdclk_cd2x_pipe(display, INVALID_PIPE);
>  
>  	if (cdctl == expected)
>  		/* All well; nothing to sanitize */
>  		return;
>  
>  sanitize:
> -	drm_dbg_kms(&dev_priv->drm, "Sanitizing cdclk programmed by pre-os\n");
> +	drm_dbg_kms(display->drm, "Sanitizing cdclk programmed by pre-os\n");
>  
>  	/* force cdclk programming */
> -	dev_priv->display.cdclk.hw.cdclk = 0;
> +	display->cdclk.hw.cdclk = 0;
>  
>  	/* force full PLL disable + enable */
> -	dev_priv->display.cdclk.hw.vco = ~0;
> +	display->cdclk.hw.vco = ~0;
>  }
>  
> -static void bxt_cdclk_init_hw(struct drm_i915_private *dev_priv)
> +static void bxt_cdclk_init_hw(struct intel_display *display)
>  {
>  	struct intel_cdclk_config cdclk_config;
>  
> -	bxt_sanitize_cdclk(dev_priv);
> +	bxt_sanitize_cdclk(display);
>  
> -	if (dev_priv->display.cdclk.hw.cdclk != 0 &&
> -	    dev_priv->display.cdclk.hw.vco != 0)
> +	if (display->cdclk.hw.cdclk != 0 &&
> +	    display->cdclk.hw.vco != 0)
>  		return;
>  
> -	cdclk_config = dev_priv->display.cdclk.hw;
> +	cdclk_config = display->cdclk.hw;
>  
>  	/*
>  	 * FIXME:
>  	 * - The initial CDCLK needs to be read from VBT.
>  	 *   Need to make this change after VBT has changes for BXT.
>  	 */
> -	cdclk_config.cdclk = bxt_calc_cdclk(dev_priv, 0);
> -	cdclk_config.vco = bxt_calc_cdclk_pll_vco(dev_priv, cdclk_config.cdclk);
> +	cdclk_config.cdclk = bxt_calc_cdclk(display, 0);
> +	cdclk_config.vco = bxt_calc_cdclk_pll_vco(display, cdclk_config.cdclk);
>  	cdclk_config.voltage_level =
> -		intel_cdclk_calc_voltage_level(dev_priv, cdclk_config.cdclk);
> +		intel_cdclk_calc_voltage_level(display, cdclk_config.cdclk);
>  
> -	bxt_set_cdclk(dev_priv, &cdclk_config, INVALID_PIPE);
> +	bxt_set_cdclk(display, &cdclk_config, INVALID_PIPE);
>  }
>  
> -static void bxt_cdclk_uninit_hw(struct drm_i915_private *dev_priv)
> +static void bxt_cdclk_uninit_hw(struct intel_display *display)
>  {
> -	struct intel_cdclk_config cdclk_config = dev_priv->display.cdclk.hw;
> +	struct intel_cdclk_config cdclk_config = display->cdclk.hw;
>  
>  	cdclk_config.cdclk = cdclk_config.bypass;
>  	cdclk_config.vco = 0;
>  	cdclk_config.voltage_level =
> -		intel_cdclk_calc_voltage_level(dev_priv, cdclk_config.cdclk);
> +		intel_cdclk_calc_voltage_level(display, cdclk_config.cdclk);
>  
> -	bxt_set_cdclk(dev_priv, &cdclk_config, INVALID_PIPE);
> +	bxt_set_cdclk(display, &cdclk_config, INVALID_PIPE);
>  }
>  
>  /**
>   * intel_cdclk_init_hw - Initialize CDCLK hardware
> - * @i915: i915 device
> + * @display: display instance
>   *
> - * Initialize CDCLK. This consists mainly of initializing dev_priv->display.cdclk.hw and
> + * Initialize CDCLK. This consists mainly of initializing display->cdclk.hw and
>   * sanitizing the state of the hardware if needed. This is generally done only
>   * during the display core initialization sequence, after which the DMC will
>   * take care of turning CDCLK off/on as needed.
>   */
> -void intel_cdclk_init_hw(struct drm_i915_private *i915)
> +void intel_cdclk_init_hw(struct intel_display *display)
>  {
> -	if (DISPLAY_VER(i915) >= 10 || IS_BROXTON(i915))
> -		bxt_cdclk_init_hw(i915);
> -	else if (DISPLAY_VER(i915) == 9)
> -		skl_cdclk_init_hw(i915);
> +	struct drm_i915_private *i915 = to_i915(display->drm);
> +
> +	if (DISPLAY_VER(display) >= 10 || IS_BROXTON(i915))
> +		bxt_cdclk_init_hw(display);
> +	else if (DISPLAY_VER(display) == 9)
> +		skl_cdclk_init_hw(display);
>  }
>  
>  /**
>   * intel_cdclk_uninit_hw - Uninitialize CDCLK hardware
> - * @i915: i915 device
> + * @display: display instance
>   *
>   * Uninitialize CDCLK. This is done only during the display core
>   * uninitialization sequence.
>   */
> -void intel_cdclk_uninit_hw(struct drm_i915_private *i915)
> +void intel_cdclk_uninit_hw(struct intel_display *display)
>  {
> -	if (DISPLAY_VER(i915) >= 10 || IS_BROXTON(i915))
> -		bxt_cdclk_uninit_hw(i915);
> -	else if (DISPLAY_VER(i915) == 9)
> -		skl_cdclk_uninit_hw(i915);
> +	struct drm_i915_private *i915 = to_i915(display->drm);
> +
> +	if (DISPLAY_VER(display) >= 10 || IS_BROXTON(i915))
> +		bxt_cdclk_uninit_hw(display);
> +	else if (DISPLAY_VER(display) == 9)
> +		skl_cdclk_uninit_hw(display);
>  }
>  
> -static bool intel_cdclk_can_crawl_and_squash(struct drm_i915_private *i915,
> +static bool intel_cdclk_can_crawl_and_squash(struct intel_display *display,
>  					     const struct intel_cdclk_config *a,
>  					     const struct intel_cdclk_config *b)
>  {
>  	u16 old_waveform;
>  	u16 new_waveform;
>  
> -	drm_WARN_ON(&i915->drm, cdclk_pll_is_unknown(a->vco));
> +	drm_WARN_ON(display->drm, cdclk_pll_is_unknown(a->vco));
>  
>  	if (a->vco == 0 || b->vco == 0)
>  		return false;
>  
> -	if (!HAS_CDCLK_CRAWL(i915) || !HAS_CDCLK_SQUASH(i915))
> +	if (!HAS_CDCLK_CRAWL(display) || !HAS_CDCLK_SQUASH(display))
>  		return false;
>  
> -	old_waveform = cdclk_squash_waveform(i915, a->cdclk);
> -	new_waveform = cdclk_squash_waveform(i915, b->cdclk);
> +	old_waveform = cdclk_squash_waveform(display, a->cdclk);
> +	new_waveform = cdclk_squash_waveform(display, b->cdclk);
>  
>  	return a->vco != b->vco &&
>  	       old_waveform != new_waveform;
>  }
>  
> -static bool intel_cdclk_can_crawl(struct drm_i915_private *dev_priv,
> +static bool intel_cdclk_can_crawl(struct intel_display *display,
>  				  const struct intel_cdclk_config *a,
>  				  const struct intel_cdclk_config *b)
>  {
>  	int a_div, b_div;
>  
> -	if (!HAS_CDCLK_CRAWL(dev_priv))
> +	if (!HAS_CDCLK_CRAWL(display))
>  		return false;
>  
>  	/*
> @@ -2322,7 +2343,7 @@ static bool intel_cdclk_can_crawl(struct drm_i915_private *dev_priv,
>  		a->ref == b->ref;
>  }
>  
> -static bool intel_cdclk_can_squash(struct drm_i915_private *dev_priv,
> +static bool intel_cdclk_can_squash(struct intel_display *display,
>  				   const struct intel_cdclk_config *a,
>  				   const struct intel_cdclk_config *b)
>  {
> @@ -2332,7 +2353,7 @@ static bool intel_cdclk_can_squash(struct drm_i915_private *dev_priv,
>  	 * the moment all platforms with squasher use a fixed cd2x
>  	 * divider.
>  	 */
> -	if (!HAS_CDCLK_SQUASH(dev_priv))
> +	if (!HAS_CDCLK_SQUASH(display))
>  		return false;
>  
>  	return a->cdclk != b->cdclk &&
> @@ -2361,7 +2382,7 @@ bool intel_cdclk_clock_changed(const struct intel_cdclk_config *a,
>  /**
>   * intel_cdclk_can_cd2x_update - Determine if changing between the two CDCLK
>   *                               configurations requires only a cd2x divider update
> - * @dev_priv: i915 device
> + * @display: display instance
>   * @a: first CDCLK configuration
>   * @b: second CDCLK configuration
>   *
> @@ -2369,12 +2390,14 @@ bool intel_cdclk_clock_changed(const struct intel_cdclk_config *a,
>   * True if changing between the two CDCLK configurations
>   * can be done with just a cd2x divider update, false if not.
>   */
> -static bool intel_cdclk_can_cd2x_update(struct drm_i915_private *dev_priv,
> +static bool intel_cdclk_can_cd2x_update(struct intel_display *display,
>  					const struct intel_cdclk_config *a,
>  					const struct intel_cdclk_config *b)
>  {
> +	struct drm_i915_private *dev_priv = to_i915(display->drm);
> +
>  	/* Older hw doesn't have the capability */
> -	if (DISPLAY_VER(dev_priv) < 10 && !IS_BROXTON(dev_priv))
> +	if (DISPLAY_VER(display) < 10 && !IS_BROXTON(dev_priv))
>  		return false;
>  
>  	/*
> @@ -2383,7 +2406,7 @@ static bool intel_cdclk_can_cd2x_update(struct drm_i915_private *dev_priv,
>  	 * the moment all platforms with squasher use a fixed cd2x
>  	 * divider.
>  	 */
> -	if (HAS_CDCLK_SQUASH(dev_priv))
> +	if (HAS_CDCLK_SQUASH(display))
>  		return false;
>  
>  	return a->cdclk != b->cdclk &&
> @@ -2407,23 +2430,24 @@ static bool intel_cdclk_changed(const struct intel_cdclk_config *a,
>  		a->voltage_level != b->voltage_level;
>  }
>  
> -void intel_cdclk_dump_config(struct drm_i915_private *i915,
> +void intel_cdclk_dump_config(struct intel_display *display,
>  			     const struct intel_cdclk_config *cdclk_config,
>  			     const char *context)
>  {
> -	drm_dbg_kms(&i915->drm, "%s %d kHz, VCO %d kHz, ref %d kHz, bypass %d kHz, voltage level %d\n",
> +	drm_dbg_kms(display->drm, "%s %d kHz, VCO %d kHz, ref %d kHz, bypass %d kHz, voltage level %d\n",
>  		    context, cdclk_config->cdclk, cdclk_config->vco,
>  		    cdclk_config->ref, cdclk_config->bypass,
>  		    cdclk_config->voltage_level);
>  }
>  
> -static void intel_pcode_notify(struct drm_i915_private *i915,
> +static void intel_pcode_notify(struct intel_display *display,
>  			       u8 voltage_level,
>  			       u8 active_pipe_count,
>  			       u16 cdclk,
>  			       bool cdclk_update_valid,
>  			       bool pipe_count_update_valid)
>  {
> +	struct drm_i915_private *i915 = to_i915(display->drm);
>  	int ret;
>  	u32 update_mask = 0;
>  
> @@ -2444,26 +2468,27 @@ static void intel_pcode_notify(struct drm_i915_private *i915,
>  				SKL_CDCLK_READY_FOR_CHANGE,
>  				SKL_CDCLK_READY_FOR_CHANGE, 3);
>  	if (ret)
> -		drm_err(&i915->drm,
> +		drm_err(display->drm,
>  			"Failed to inform PCU about display config (err %d)\n",
>  			ret);
>  }
>  
> -static void intel_set_cdclk(struct drm_i915_private *dev_priv,
> +static void intel_set_cdclk(struct intel_display *display,
>  			    const struct intel_cdclk_config *cdclk_config,
>  			    enum pipe pipe, const char *context)
>  {
> +	struct drm_i915_private *dev_priv = to_i915(display->drm);
>  	struct intel_encoder *encoder;
>  
> -	if (!intel_cdclk_changed(&dev_priv->display.cdclk.hw, cdclk_config))
> +	if (!intel_cdclk_changed(&display->cdclk.hw, cdclk_config))
>  		return;
>  
> -	if (drm_WARN_ON_ONCE(&dev_priv->drm, !dev_priv->display.funcs.cdclk->set_cdclk))
> +	if (drm_WARN_ON_ONCE(display->drm, !display->funcs.cdclk->set_cdclk))
>  		return;
>  
> -	intel_cdclk_dump_config(dev_priv, cdclk_config, context);
> +	intel_cdclk_dump_config(display, cdclk_config, context);
>  
> -	for_each_intel_encoder_with_psr(&dev_priv->drm, encoder) {
> +	for_each_intel_encoder_with_psr(display->drm, encoder) {
>  		struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
>  
>  		intel_psr_pause(intel_dp);
> @@ -2476,24 +2501,24 @@ static void intel_set_cdclk(struct drm_i915_private *dev_priv,
>  	 * functions use cdclk. Not all platforms/ports do,
>  	 * but we'll lock them all for simplicity.
>  	 */
> -	mutex_lock(&dev_priv->display.gmbus.mutex);
> -	for_each_intel_dp(&dev_priv->drm, encoder) {
> +	mutex_lock(&display->gmbus.mutex);
> +	for_each_intel_dp(display->drm, encoder) {
>  		struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
>  
>  		mutex_lock_nest_lock(&intel_dp->aux.hw_mutex,
> -				     &dev_priv->display.gmbus.mutex);
> +				     &display->gmbus.mutex);
>  	}
>  
> -	intel_cdclk_set_cdclk(dev_priv, cdclk_config, pipe);
> +	intel_cdclk_set_cdclk(display, cdclk_config, pipe);
>  
> -	for_each_intel_dp(&dev_priv->drm, encoder) {
> +	for_each_intel_dp(display->drm, encoder) {
>  		struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
>  
>  		mutex_unlock(&intel_dp->aux.hw_mutex);
>  	}
> -	mutex_unlock(&dev_priv->display.gmbus.mutex);
> +	mutex_unlock(&display->gmbus.mutex);
>  
> -	for_each_intel_encoder_with_psr(&dev_priv->drm, encoder) {
> +	for_each_intel_encoder_with_psr(display->drm, encoder) {
>  		struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
>  
>  		intel_psr_resume(intel_dp);
> @@ -2501,17 +2526,17 @@ static void intel_set_cdclk(struct drm_i915_private *dev_priv,
>  
>  	intel_audio_cdclk_change_post(dev_priv);
>  
> -	if (drm_WARN(&dev_priv->drm,
> -		     intel_cdclk_changed(&dev_priv->display.cdclk.hw, cdclk_config),
> +	if (drm_WARN(display->drm,
> +		     intel_cdclk_changed(&display->cdclk.hw, cdclk_config),
>  		     "cdclk state doesn't match!\n")) {
> -		intel_cdclk_dump_config(dev_priv, &dev_priv->display.cdclk.hw, "[hw state]");
> -		intel_cdclk_dump_config(dev_priv, cdclk_config, "[sw state]");
> +		intel_cdclk_dump_config(display, &display->cdclk.hw, "[hw state]");
> +		intel_cdclk_dump_config(display, cdclk_config, "[sw state]");
>  	}
>  }
>  
>  static void intel_cdclk_pcode_pre_notify(struct intel_atomic_state *state)
>  {
> -	struct drm_i915_private *i915 = to_i915(state->base.dev);
> +	struct intel_display *display = to_intel_display(state);
>  	const struct intel_cdclk_state *old_cdclk_state =
>  		intel_atomic_get_old_cdclk_state(state);
>  	const struct intel_cdclk_state *new_cdclk_state =
> @@ -2550,13 +2575,13 @@ static void intel_cdclk_pcode_pre_notify(struct intel_atomic_state *state)
>  	if (update_pipe_count)
>  		num_active_pipes = hweight8(new_cdclk_state->active_pipes);
>  
> -	intel_pcode_notify(i915, voltage_level, num_active_pipes, cdclk,
> +	intel_pcode_notify(display, voltage_level, num_active_pipes, cdclk,
>  			   change_cdclk, update_pipe_count);
>  }
>  
>  static void intel_cdclk_pcode_post_notify(struct intel_atomic_state *state)
>  {
> -	struct drm_i915_private *i915 = to_i915(state->base.dev);
> +	struct intel_display *display = to_intel_display(state);
>  	const struct intel_cdclk_state *new_cdclk_state =
>  		intel_atomic_get_new_cdclk_state(state);
>  	const struct intel_cdclk_state *old_cdclk_state =
> @@ -2587,7 +2612,7 @@ static void intel_cdclk_pcode_post_notify(struct intel_atomic_state *state)
>  	if (update_pipe_count)
>  		num_active_pipes = hweight8(new_cdclk_state->active_pipes);
>  
> -	intel_pcode_notify(i915, voltage_level, num_active_pipes, cdclk,
> +	intel_pcode_notify(display, voltage_level, num_active_pipes, cdclk,
>  			   update_cdclk, update_pipe_count);
>  }
>  
> @@ -2612,7 +2637,8 @@ bool intel_cdclk_is_decreasing_later(struct intel_atomic_state *state)
>  void
>  intel_set_cdclk_pre_plane_update(struct intel_atomic_state *state)
>  {
> -	struct drm_i915_private *i915 = to_i915(state->base.dev);
> +	struct intel_display *display = to_intel_display(state);
> +	struct drm_i915_private *i915 = to_i915(display->drm);
>  	const struct intel_cdclk_state *old_cdclk_state =
>  		intel_atomic_get_old_cdclk_state(state);
>  	const struct intel_cdclk_state *new_cdclk_state =
> @@ -2649,9 +2675,9 @@ intel_set_cdclk_pre_plane_update(struct intel_atomic_state *state)
>  	 */
>  	cdclk_config.joined_mbus = old_cdclk_state->actual.joined_mbus;
>  
> -	drm_WARN_ON(&i915->drm, !new_cdclk_state->base.changed);
> +	drm_WARN_ON(display->drm, !new_cdclk_state->base.changed);
>  
> -	intel_set_cdclk(i915, &cdclk_config, pipe,
> +	intel_set_cdclk(display, &cdclk_config, pipe,
>  			"Pre changing CDCLK to");
>  }
>  
> @@ -2665,7 +2691,8 @@ intel_set_cdclk_pre_plane_update(struct intel_atomic_state *state)
>  void
>  intel_set_cdclk_post_plane_update(struct intel_atomic_state *state)
>  {
> -	struct drm_i915_private *i915 = to_i915(state->base.dev);
> +	struct intel_display *display = to_intel_display(state);
> +	struct drm_i915_private *i915 = to_i915(display->drm);
>  	const struct intel_cdclk_state *old_cdclk_state =
>  		intel_atomic_get_old_cdclk_state(state);
>  	const struct intel_cdclk_state *new_cdclk_state =
> @@ -2685,20 +2712,21 @@ intel_set_cdclk_post_plane_update(struct intel_atomic_state *state)
>  	else
>  		pipe = INVALID_PIPE;
>  
> -	drm_WARN_ON(&i915->drm, !new_cdclk_state->base.changed);
> +	drm_WARN_ON(display->drm, !new_cdclk_state->base.changed);
>  
> -	intel_set_cdclk(i915, &new_cdclk_state->actual, pipe,
> +	intel_set_cdclk(display, &new_cdclk_state->actual, pipe,
>  			"Post changing CDCLK to");
>  }
>  
>  static int intel_pixel_rate_to_cdclk(const struct intel_crtc_state *crtc_state)
>  {
> -	struct drm_i915_private *dev_priv = to_i915(crtc_state->uapi.crtc->dev);
> +	struct intel_display *display = to_intel_display(crtc_state->uapi.crtc->dev);
> +	struct drm_i915_private *dev_priv = to_i915(display->drm);
>  	int pixel_rate = crtc_state->pixel_rate;
>  
> -	if (DISPLAY_VER(dev_priv) >= 10)
> +	if (DISPLAY_VER(display) >= 10)
>  		return DIV_ROUND_UP(pixel_rate, 2);
> -	else if (DISPLAY_VER(dev_priv) == 9 ||
> +	else if (DISPLAY_VER(display) == 9 ||
>  		 IS_BROADWELL(dev_priv) || IS_HASWELL(dev_priv))
>  		return pixel_rate;
>  	else if (IS_CHERRYVIEW(dev_priv))
> @@ -2712,11 +2740,11 @@ static int intel_pixel_rate_to_cdclk(const struct intel_crtc_state *crtc_state)
>  static int intel_planes_min_cdclk(const struct intel_crtc_state *crtc_state)
>  {
>  	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
> -	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
> +	struct intel_display *display = to_intel_display(crtc);
>  	struct intel_plane *plane;
>  	int min_cdclk = 0;
>  
> -	for_each_intel_plane_on_crtc(&dev_priv->drm, crtc, plane)
> +	for_each_intel_plane_on_crtc(display->drm, crtc, plane)
>  		min_cdclk = max(crtc_state->min_cdclk[plane->id], min_cdclk);
>  
>  	return min_cdclk;
> @@ -2725,7 +2753,7 @@ static int intel_planes_min_cdclk(const struct intel_crtc_state *crtc_state)
>  static int intel_vdsc_min_cdclk(const struct intel_crtc_state *crtc_state)
>  {
>  	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
> -	struct drm_i915_private *i915 = to_i915(crtc->base.dev);
> +	struct intel_display *display = to_intel_display(crtc);
>  	int num_vdsc_instances = intel_dsc_get_num_vdsc_instances(crtc_state);
>  	int min_cdclk = 0;
>  
> @@ -2754,7 +2782,7 @@ static int intel_vdsc_min_cdclk(const struct intel_crtc_state *crtc_state)
>  		 * Since PPC = 2 with bigjoiner
>  		 * => CDCLK >= compressed_bpp * Pixel clock  / 2 * Bigjoiner Interface bits
>  		 */
> -		int bigjoiner_interface_bits = DISPLAY_VER(i915) >= 14 ? 36 : 24;
> +		int bigjoiner_interface_bits = DISPLAY_VER(display) >= 14 ? 36 : 24;
>  		int min_cdclk_bj =
>  			(fxp_q4_to_int_roundup(crtc_state->dsc.compressed_bpp_x16) *
>  			 pixel_clock) / (2 * bigjoiner_interface_bits);
> @@ -2767,8 +2795,9 @@ static int intel_vdsc_min_cdclk(const struct intel_crtc_state *crtc_state)
>  
>  int intel_crtc_compute_min_cdclk(const struct intel_crtc_state *crtc_state)
>  {
> -	struct drm_i915_private *dev_priv =
> -		to_i915(crtc_state->uapi.crtc->dev);
> +	struct intel_display *display =
> +		to_intel_display(crtc_state->uapi.crtc->dev);
> +	struct drm_i915_private *dev_priv = to_i915(display->drm);
>  	int min_cdclk;
>  
>  	if (!crtc_state->hw.enable)
> @@ -2789,10 +2818,10 @@ int intel_crtc_compute_min_cdclk(const struct intel_crtc_state *crtc_state)
>  	    crtc_state->has_audio &&
>  	    crtc_state->port_clock >= 540000 &&
>  	    crtc_state->lane_count == 4) {
> -		if (DISPLAY_VER(dev_priv) == 10) {
> +		if (DISPLAY_VER(display) == 10) {
>  			/* Display WA #1145: glk */
>  			min_cdclk = max(316800, min_cdclk);
> -		} else if (DISPLAY_VER(dev_priv) == 9 || IS_BROADWELL(dev_priv)) {
> +		} else if (DISPLAY_VER(display) == 9 || IS_BROADWELL(dev_priv)) {
>  			/* Display WA #1144: skl,bxt */
>  			min_cdclk = max(432000, min_cdclk);
>  		}
> @@ -2802,7 +2831,7 @@ int intel_crtc_compute_min_cdclk(const struct intel_crtc_state *crtc_state)
>  	 * According to BSpec, "The CD clock frequency must be at least twice
>  	 * the frequency of the Azalia BCLK." and BCLK is 96 MHz by default.
>  	 */
> -	if (crtc_state->has_audio && DISPLAY_VER(dev_priv) >= 9)
> +	if (crtc_state->has_audio && DISPLAY_VER(display) >= 9)
>  		min_cdclk = max(2 * 96000, min_cdclk);
>  
>  	/*
> @@ -2844,7 +2873,8 @@ int intel_crtc_compute_min_cdclk(const struct intel_crtc_state *crtc_state)
>  
>  static int intel_compute_min_cdclk(struct intel_atomic_state *state)
>  {
> -	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
> +	struct intel_display *display = to_intel_display(state);
> +	struct drm_i915_private *dev_priv = to_i915(display->drm);
>  	struct intel_cdclk_state *cdclk_state =
>  		intel_atomic_get_new_cdclk_state(state);
>  	const struct intel_bw_state *bw_state;
> @@ -2887,7 +2917,7 @@ static int intel_compute_min_cdclk(struct intel_atomic_state *state)
>  
>  	min_cdclk = max(cdclk_state->force_min_cdclk,
>  			cdclk_state->bw_min_cdclk);
> -	for_each_pipe(dev_priv, pipe)
> +	for_each_pipe(display, pipe)
>  		min_cdclk = max(cdclk_state->min_cdclk[pipe], min_cdclk);
>  
>  	/*
> @@ -2902,10 +2932,10 @@ static int intel_compute_min_cdclk(struct intel_atomic_state *state)
>  	    !is_power_of_2(cdclk_state->active_pipes))
>  		min_cdclk = max(2 * 96000, min_cdclk);
>  
> -	if (min_cdclk > dev_priv->display.cdclk.max_cdclk_freq) {
> -		drm_dbg_kms(&dev_priv->drm,
> +	if (min_cdclk > display->cdclk.max_cdclk_freq) {
> +		drm_dbg_kms(display->drm,
>  			    "required cdclk (%d kHz) exceeds max (%d kHz)\n",
> -			    min_cdclk, dev_priv->display.cdclk.max_cdclk_freq);
> +			    min_cdclk, display->cdclk.max_cdclk_freq);
>  		return -EINVAL;
>  	}
>  
> @@ -2927,7 +2957,7 @@ static int intel_compute_min_cdclk(struct intel_atomic_state *state)
>   */
>  static int bxt_compute_min_voltage_level(struct intel_atomic_state *state)
>  {
> -	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
> +	struct intel_display *display = to_intel_display(state);
>  	struct intel_cdclk_state *cdclk_state =
>  		intel_atomic_get_new_cdclk_state(state);
>  	struct intel_crtc *crtc;
> @@ -2955,7 +2985,7 @@ static int bxt_compute_min_voltage_level(struct intel_atomic_state *state)
>  	}
>  
>  	min_voltage_level = 0;
> -	for_each_pipe(dev_priv, pipe)
> +	for_each_pipe(display, pipe)
>  		min_voltage_level = max(cdclk_state->min_voltage_level[pipe],
>  					min_voltage_level);
>  
> @@ -2964,7 +2994,7 @@ static int bxt_compute_min_voltage_level(struct intel_atomic_state *state)
>  
>  static int vlv_modeset_calc_cdclk(struct intel_atomic_state *state)
>  {
> -	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
> +	struct intel_display *display = to_intel_display(state);
>  	struct intel_cdclk_state *cdclk_state =
>  		intel_atomic_get_new_cdclk_state(state);
>  	int min_cdclk, cdclk;
> @@ -2973,18 +3003,18 @@ static int vlv_modeset_calc_cdclk(struct intel_atomic_state *state)
>  	if (min_cdclk < 0)
>  		return min_cdclk;
>  
> -	cdclk = vlv_calc_cdclk(dev_priv, min_cdclk);
> +	cdclk = vlv_calc_cdclk(display, min_cdclk);
>  
>  	cdclk_state->logical.cdclk = cdclk;
>  	cdclk_state->logical.voltage_level =
> -		vlv_calc_voltage_level(dev_priv, cdclk);
> +		vlv_calc_voltage_level(display, cdclk);
>  
>  	if (!cdclk_state->active_pipes) {
> -		cdclk = vlv_calc_cdclk(dev_priv, cdclk_state->force_min_cdclk);
> +		cdclk = vlv_calc_cdclk(display, cdclk_state->force_min_cdclk);
>  
>  		cdclk_state->actual.cdclk = cdclk;
>  		cdclk_state->actual.voltage_level =
> -			vlv_calc_voltage_level(dev_priv, cdclk);
> +			vlv_calc_voltage_level(display, cdclk);
>  	} else {
>  		cdclk_state->actual = cdclk_state->logical;
>  	}
> @@ -3023,7 +3053,7 @@ static int bdw_modeset_calc_cdclk(struct intel_atomic_state *state)
>  
>  static int skl_dpll0_vco(struct intel_atomic_state *state)
>  {
> -	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
> +	struct intel_display *display = to_intel_display(state);
>  	struct intel_cdclk_state *cdclk_state =
>  		intel_atomic_get_new_cdclk_state(state);
>  	struct intel_crtc *crtc;
> @@ -3032,7 +3062,7 @@ static int skl_dpll0_vco(struct intel_atomic_state *state)
>  
>  	vco = cdclk_state->logical.vco;
>  	if (!vco)
> -		vco = dev_priv->display.cdclk.skl_preferred_vco_freq;
> +		vco = display->cdclk.skl_preferred_vco_freq;
>  
>  	for_each_new_intel_crtc_in_state(state, crtc, crtc_state, i) {
>  		if (!crtc_state->hw.enable)
> @@ -3094,7 +3124,7 @@ static int skl_modeset_calc_cdclk(struct intel_atomic_state *state)
>  
>  static int bxt_modeset_calc_cdclk(struct intel_atomic_state *state)
>  {
> -	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
> +	struct intel_display *display = to_intel_display(state);
>  	struct intel_cdclk_state *cdclk_state =
>  		intel_atomic_get_new_cdclk_state(state);
>  	int min_cdclk, min_voltage_level, cdclk, vco;
> @@ -3107,23 +3137,23 @@ static int bxt_modeset_calc_cdclk(struct intel_atomic_state *state)
>  	if (min_voltage_level < 0)
>  		return min_voltage_level;
>  
> -	cdclk = bxt_calc_cdclk(dev_priv, min_cdclk);
> -	vco = bxt_calc_cdclk_pll_vco(dev_priv, cdclk);
> +	cdclk = bxt_calc_cdclk(display, min_cdclk);
> +	vco = bxt_calc_cdclk_pll_vco(display, cdclk);
>  
>  	cdclk_state->logical.vco = vco;
>  	cdclk_state->logical.cdclk = cdclk;
>  	cdclk_state->logical.voltage_level =
>  		max_t(int, min_voltage_level,
> -		      intel_cdclk_calc_voltage_level(dev_priv, cdclk));
> +		      intel_cdclk_calc_voltage_level(display, cdclk));
>  
>  	if (!cdclk_state->active_pipes) {
> -		cdclk = bxt_calc_cdclk(dev_priv, cdclk_state->force_min_cdclk);
> -		vco = bxt_calc_cdclk_pll_vco(dev_priv, cdclk);
> +		cdclk = bxt_calc_cdclk(display, cdclk_state->force_min_cdclk);
> +		vco = bxt_calc_cdclk_pll_vco(display, cdclk);
>  
>  		cdclk_state->actual.vco = vco;
>  		cdclk_state->actual.cdclk = cdclk;
>  		cdclk_state->actual.voltage_level =
> -			intel_cdclk_calc_voltage_level(dev_priv, cdclk);
> +			intel_cdclk_calc_voltage_level(display, cdclk);
>  	} else {
>  		cdclk_state->actual = cdclk_state->logical;
>  	}
> @@ -3175,10 +3205,10 @@ static const struct intel_global_state_funcs intel_cdclk_funcs = {
>  struct intel_cdclk_state *
>  intel_atomic_get_cdclk_state(struct intel_atomic_state *state)
>  {
> -	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
> +	struct intel_display *display = to_intel_display(state);
>  	struct intel_global_state *cdclk_state;
>  
> -	cdclk_state = intel_atomic_get_global_obj_state(state, &dev_priv->display.cdclk.obj);
> +	cdclk_state = intel_atomic_get_global_obj_state(state, &display->cdclk.obj);
>  	if (IS_ERR(cdclk_state))
>  		return ERR_CAST(cdclk_state);
>  
> @@ -3234,24 +3264,26 @@ int intel_cdclk_state_set_joined_mbus(struct intel_atomic_state *state, bool joi
>  	return intel_atomic_lock_global_state(&cdclk_state->base);
>  }
>  
> -int intel_cdclk_init(struct drm_i915_private *dev_priv)
> +int intel_cdclk_init(struct intel_display *display)
>  {
> +	struct drm_i915_private *dev_priv = to_i915(display->drm);
>  	struct intel_cdclk_state *cdclk_state;
>  
>  	cdclk_state = kzalloc(sizeof(*cdclk_state), GFP_KERNEL);
>  	if (!cdclk_state)
>  		return -ENOMEM;
>  
> -	intel_atomic_global_obj_init(dev_priv, &dev_priv->display.cdclk.obj,
> +	intel_atomic_global_obj_init(dev_priv, &display->cdclk.obj,
>  				     &cdclk_state->base, &intel_cdclk_funcs);
>  
>  	return 0;
>  }
>  
> -static bool intel_cdclk_need_serialize(struct drm_i915_private *i915,
> +static bool intel_cdclk_need_serialize(struct intel_display *display,
>  				       const struct intel_cdclk_state *old_cdclk_state,
>  				       const struct intel_cdclk_state *new_cdclk_state)
>  {
> +	struct drm_i915_private *i915 = to_i915(display->drm);
>  	bool power_well_cnt_changed = hweight8(old_cdclk_state->active_pipes) !=
>  				      hweight8(new_cdclk_state->active_pipes);
>  	bool cdclk_changed = intel_cdclk_changed(&old_cdclk_state->actual,
> @@ -3266,7 +3298,6 @@ static bool intel_cdclk_need_serialize(struct drm_i915_private *i915,
>  int intel_modeset_calc_cdclk(struct intel_atomic_state *state)
>  {
>  	struct intel_display *display = to_intel_display(state);
> -	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
>  	const struct intel_cdclk_state *old_cdclk_state;
>  	struct intel_cdclk_state *new_cdclk_state;
>  	enum pipe pipe = INVALID_PIPE;
> @@ -3285,7 +3316,7 @@ int intel_modeset_calc_cdclk(struct intel_atomic_state *state)
>  	if (ret)
>  		return ret;
>  
> -	if (intel_cdclk_need_serialize(dev_priv, old_cdclk_state, new_cdclk_state)) {
> +	if (intel_cdclk_need_serialize(display, old_cdclk_state, new_cdclk_state)) {
>  		/*
>  		 * Also serialize commits across all crtcs
>  		 * if the actual hw needs to be poked.
> @@ -3305,7 +3336,7 @@ int intel_modeset_calc_cdclk(struct intel_atomic_state *state)
>  	}
>  
>  	if (is_power_of_2(new_cdclk_state->active_pipes) &&
> -	    intel_cdclk_can_cd2x_update(dev_priv,
> +	    intel_cdclk_can_cd2x_update(display,
>  					&old_cdclk_state->actual,
>  					&new_cdclk_state->actual)) {
>  		struct intel_crtc *crtc;
> @@ -3322,25 +3353,25 @@ int intel_modeset_calc_cdclk(struct intel_atomic_state *state)
>  			pipe = INVALID_PIPE;
>  	}
>  
> -	if (intel_cdclk_can_crawl_and_squash(dev_priv,
> +	if (intel_cdclk_can_crawl_and_squash(display,
>  					     &old_cdclk_state->actual,
>  					     &new_cdclk_state->actual)) {
> -		drm_dbg_kms(&dev_priv->drm,
> +		drm_dbg_kms(display->drm,
>  			    "Can change cdclk via crawling and squashing\n");
> -	} else if (intel_cdclk_can_squash(dev_priv,
> +	} else if (intel_cdclk_can_squash(display,
>  					&old_cdclk_state->actual,
>  					&new_cdclk_state->actual)) {
> -		drm_dbg_kms(&dev_priv->drm,
> +		drm_dbg_kms(display->drm,
>  			    "Can change cdclk via squashing\n");
> -	} else if (intel_cdclk_can_crawl(dev_priv,
> +	} else if (intel_cdclk_can_crawl(display,
>  					 &old_cdclk_state->actual,
>  					 &new_cdclk_state->actual)) {
> -		drm_dbg_kms(&dev_priv->drm,
> +		drm_dbg_kms(display->drm,
>  			    "Can change cdclk via crawling\n");
>  	} else if (pipe != INVALID_PIPE) {
>  		new_cdclk_state->pipe = pipe;
>  
> -		drm_dbg_kms(&dev_priv->drm,
> +		drm_dbg_kms(display->drm,
>  			    "Can change cdclk cd2x divider with pipe %c active\n",
>  			    pipe_name(pipe));
>  	} else if (intel_cdclk_clock_changed(&old_cdclk_state->actual,
> @@ -3352,24 +3383,24 @@ int intel_modeset_calc_cdclk(struct intel_atomic_state *state)
>  
>  		new_cdclk_state->disable_pipes = true;
>  
> -		drm_dbg_kms(&dev_priv->drm,
> +		drm_dbg_kms(display->drm,
>  			    "Modeset required for cdclk change\n");
>  	}
>  
> -	if (intel_mdclk_cdclk_ratio(dev_priv, &old_cdclk_state->actual) !=
> -	    intel_mdclk_cdclk_ratio(dev_priv, &new_cdclk_state->actual)) {
> -		int ratio = intel_mdclk_cdclk_ratio(dev_priv, &new_cdclk_state->actual);
> +	if (intel_mdclk_cdclk_ratio(display, &old_cdclk_state->actual) !=
> +	    intel_mdclk_cdclk_ratio(display, &new_cdclk_state->actual)) {
> +		int ratio = intel_mdclk_cdclk_ratio(display, &new_cdclk_state->actual);
>  
>  		ret = intel_dbuf_state_set_mdclk_cdclk_ratio(state, ratio);
>  		if (ret)
>  			return ret;
>  	}
>  
> -	drm_dbg_kms(&dev_priv->drm,
> +	drm_dbg_kms(display->drm,
>  		    "New cdclk calculated to be logical %u kHz, actual %u kHz\n",
>  		    new_cdclk_state->logical.cdclk,
>  		    new_cdclk_state->actual.cdclk);
> -	drm_dbg_kms(&dev_priv->drm,
> +	drm_dbg_kms(display->drm,
>  		    "New voltage level calculated to be logical %u, actual %u\n",
>  		    new_cdclk_state->logical.voltage_level,
>  		    new_cdclk_state->actual.voltage_level);
> @@ -3377,18 +3408,19 @@ int intel_modeset_calc_cdclk(struct intel_atomic_state *state)
>  	return 0;
>  }
>  
> -static int intel_compute_max_dotclk(struct drm_i915_private *dev_priv)
> +static int intel_compute_max_dotclk(struct intel_display *display)
>  {
> -	int max_cdclk_freq = dev_priv->display.cdclk.max_cdclk_freq;
> +	struct drm_i915_private *dev_priv = to_i915(display->drm);
> +	int max_cdclk_freq = display->cdclk.max_cdclk_freq;
>  
> -	if (DISPLAY_VER(dev_priv) >= 10)
> +	if (DISPLAY_VER(display) >= 10)
>  		return 2 * max_cdclk_freq;
> -	else if (DISPLAY_VER(dev_priv) == 9 ||
> +	else if (DISPLAY_VER(display) == 9 ||
>  		 IS_BROADWELL(dev_priv) || IS_HASWELL(dev_priv))
>  		return max_cdclk_freq;
>  	else if (IS_CHERRYVIEW(dev_priv))
>  		return max_cdclk_freq*95/100;
> -	else if (DISPLAY_VER(dev_priv) < 4)
> +	else if (DISPLAY_VER(display) < 4)
>  		return 2*max_cdclk_freq*90/100;
>  	else
>  		return max_cdclk_freq*90/100;
> @@ -3396,34 +3428,36 @@ static int intel_compute_max_dotclk(struct drm_i915_private *dev_priv)
>  
>  /**
>   * intel_update_max_cdclk - Determine the maximum support CDCLK frequency
> - * @dev_priv: i915 device
> + * @display: display instance
>   *
>   * Determine the maximum CDCLK frequency the platform supports, and also
>   * derive the maximum dot clock frequency the maximum CDCLK frequency
>   * allows.
>   */
> -void intel_update_max_cdclk(struct drm_i915_private *dev_priv)
> +void intel_update_max_cdclk(struct intel_display *display)
>  {
> +	struct drm_i915_private *dev_priv = to_i915(display->drm);
> +
>  	if (IS_JASPERLAKE(dev_priv) || IS_ELKHARTLAKE(dev_priv)) {
> -		if (dev_priv->display.cdclk.hw.ref == 24000)
> -			dev_priv->display.cdclk.max_cdclk_freq = 552000;
> +		if (display->cdclk.hw.ref == 24000)
> +			display->cdclk.max_cdclk_freq = 552000;
>  		else
> -			dev_priv->display.cdclk.max_cdclk_freq = 556800;
> -	} else if (DISPLAY_VER(dev_priv) >= 11) {
> -		if (dev_priv->display.cdclk.hw.ref == 24000)
> -			dev_priv->display.cdclk.max_cdclk_freq = 648000;
> +			display->cdclk.max_cdclk_freq = 556800;
> +	} else if (DISPLAY_VER(display) >= 11) {
> +		if (display->cdclk.hw.ref == 24000)
> +			display->cdclk.max_cdclk_freq = 648000;
>  		else
> -			dev_priv->display.cdclk.max_cdclk_freq = 652800;
> +			display->cdclk.max_cdclk_freq = 652800;
>  	} else if (IS_GEMINILAKE(dev_priv)) {
> -		dev_priv->display.cdclk.max_cdclk_freq = 316800;
> +		display->cdclk.max_cdclk_freq = 316800;
>  	} else if (IS_BROXTON(dev_priv)) {
> -		dev_priv->display.cdclk.max_cdclk_freq = 624000;
> -	} else if (DISPLAY_VER(dev_priv) == 9) {
> -		u32 limit = intel_de_read(dev_priv, SKL_DFSM) & SKL_DFSM_CDCLK_LIMIT_MASK;
> +		display->cdclk.max_cdclk_freq = 624000;
> +	} else if (DISPLAY_VER(display) == 9) {
> +		u32 limit = intel_de_read(display, SKL_DFSM) & SKL_DFSM_CDCLK_LIMIT_MASK;
>  		int max_cdclk, vco;
>  
> -		vco = dev_priv->display.cdclk.skl_preferred_vco_freq;
> -		drm_WARN_ON(&dev_priv->drm, vco != 8100000 && vco != 8640000);
> +		vco = display->cdclk.skl_preferred_vco_freq;
> +		drm_WARN_ON(display->drm, vco != 8100000 && vco != 8640000);
>  
>  		/*
>  		 * Use the lower (vco 8640) cdclk values as a
> @@ -3439,7 +3473,7 @@ void intel_update_max_cdclk(struct drm_i915_private *dev_priv)
>  		else
>  			max_cdclk = 308571;
>  
> -		dev_priv->display.cdclk.max_cdclk_freq = skl_calc_cdclk(max_cdclk, vco);
> +		display->cdclk.max_cdclk_freq = skl_calc_cdclk(max_cdclk, vco);
>  	} else if (IS_BROADWELL(dev_priv))  {
>  		/*
>  		 * FIXME with extra cooling we can allow
> @@ -3447,41 +3481,43 @@ void intel_update_max_cdclk(struct drm_i915_private *dev_priv)
>  		 * How can we know if extra cooling is
>  		 * available? PCI ID, VTB, something else?
>  		 */
> -		if (intel_de_read(dev_priv, FUSE_STRAP) & HSW_CDCLK_LIMIT)
> -			dev_priv->display.cdclk.max_cdclk_freq = 450000;
> +		if (intel_de_read(display, FUSE_STRAP) & HSW_CDCLK_LIMIT)
> +			display->cdclk.max_cdclk_freq = 450000;
>  		else if (IS_BROADWELL_ULX(dev_priv))
> -			dev_priv->display.cdclk.max_cdclk_freq = 450000;
> +			display->cdclk.max_cdclk_freq = 450000;
>  		else if (IS_BROADWELL_ULT(dev_priv))
> -			dev_priv->display.cdclk.max_cdclk_freq = 540000;
> +			display->cdclk.max_cdclk_freq = 540000;
>  		else
> -			dev_priv->display.cdclk.max_cdclk_freq = 675000;
> +			display->cdclk.max_cdclk_freq = 675000;
>  	} else if (IS_CHERRYVIEW(dev_priv)) {
> -		dev_priv->display.cdclk.max_cdclk_freq = 320000;
> +		display->cdclk.max_cdclk_freq = 320000;
>  	} else if (IS_VALLEYVIEW(dev_priv)) {
> -		dev_priv->display.cdclk.max_cdclk_freq = 400000;
> +		display->cdclk.max_cdclk_freq = 400000;
>  	} else {
>  		/* otherwise assume cdclk is fixed */
> -		dev_priv->display.cdclk.max_cdclk_freq = dev_priv->display.cdclk.hw.cdclk;
> +		display->cdclk.max_cdclk_freq = display->cdclk.hw.cdclk;
>  	}
>  
> -	dev_priv->display.cdclk.max_dotclk_freq = intel_compute_max_dotclk(dev_priv);
> +	display->cdclk.max_dotclk_freq = intel_compute_max_dotclk(display);
>  
> -	drm_dbg(&dev_priv->drm, "Max CD clock rate: %d kHz\n",
> -		dev_priv->display.cdclk.max_cdclk_freq);
> +	drm_dbg(display->drm, "Max CD clock rate: %d kHz\n",
> +		display->cdclk.max_cdclk_freq);
>  
> -	drm_dbg(&dev_priv->drm, "Max dotclock rate: %d kHz\n",
> -		dev_priv->display.cdclk.max_dotclk_freq);
> +	drm_dbg(display->drm, "Max dotclock rate: %d kHz\n",
> +		display->cdclk.max_dotclk_freq);
>  }
>  
>  /**
>   * intel_update_cdclk - Determine the current CDCLK frequency
> - * @dev_priv: i915 device
> + * @display: display instance
>   *
>   * Determine the current CDCLK frequency.
>   */
> -void intel_update_cdclk(struct drm_i915_private *dev_priv)
> +void intel_update_cdclk(struct intel_display *display)
>  {
> -	intel_cdclk_get_cdclk(dev_priv, &dev_priv->display.cdclk.hw);
> +	struct drm_i915_private *dev_priv = to_i915(display->drm);
> +
> +	intel_cdclk_get_cdclk(display, &display->cdclk.hw);
>  
>  	/*
>  	 * 9:0 CMBUS [sic] CDCLK frequency (cdfreq):
> @@ -3490,28 +3526,29 @@ void intel_update_cdclk(struct drm_i915_private *dev_priv)
>  	 * generate GMBus clock. This will vary with the cdclk freq.
>  	 */
>  	if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
> -		intel_de_write(dev_priv, GMBUSFREQ_VLV,
> -			       DIV_ROUND_UP(dev_priv->display.cdclk.hw.cdclk, 1000));
> +		intel_de_write(display, GMBUSFREQ_VLV,
> +			       DIV_ROUND_UP(display->cdclk.hw.cdclk, 1000));
>  }
>  
> -static int dg1_rawclk(struct drm_i915_private *dev_priv)
> +static int dg1_rawclk(struct intel_display *display)
>  {
>  	/*
>  	 * DG1 always uses a 38.4 MHz rawclk.  The bspec tells us
>  	 * "Program Numerator=2, Denominator=4, Divider=37 decimal."
>  	 */
> -	intel_de_write(dev_priv, PCH_RAWCLK_FREQ,
> +	intel_de_write(display, PCH_RAWCLK_FREQ,
>  		       CNP_RAWCLK_DEN(4) | CNP_RAWCLK_DIV(37) | ICP_RAWCLK_NUM(2));
>  
>  	return 38400;
>  }
>  
> -static int cnp_rawclk(struct drm_i915_private *dev_priv)
> +static int cnp_rawclk(struct intel_display *display)
>  {
> -	u32 rawclk;
> +	struct drm_i915_private *dev_priv = to_i915(display->drm);
>  	int divider, fraction;
> +	u32 rawclk;
>  
> -	if (intel_de_read(dev_priv, SFUSE_STRAP) & SFUSE_STRAP_RAW_FREQUENCY) {
> +	if (intel_de_read(display, SFUSE_STRAP) & SFUSE_STRAP_RAW_FREQUENCY) {
>  		/* 24 MHz */
>  		divider = 24000;
>  		fraction = 0;
> @@ -3531,37 +3568,42 @@ static int cnp_rawclk(struct drm_i915_private *dev_priv)
>  			rawclk |= ICP_RAWCLK_NUM(numerator);
>  	}
>  
> -	intel_de_write(dev_priv, PCH_RAWCLK_FREQ, rawclk);
> +	intel_de_write(display, PCH_RAWCLK_FREQ, rawclk);
>  	return divider + fraction;
>  }
>  
> -static int pch_rawclk(struct drm_i915_private *dev_priv)
> +static int pch_rawclk(struct intel_display *display)
>  {
> -	return (intel_de_read(dev_priv, PCH_RAWCLK_FREQ) & RAWCLK_FREQ_MASK) * 1000;
> +	return (intel_de_read(display, PCH_RAWCLK_FREQ) & RAWCLK_FREQ_MASK) * 1000;
>  }
>  
> -static int vlv_hrawclk(struct drm_i915_private *dev_priv)
> +static int vlv_hrawclk(struct intel_display *display)
>  {
> +	struct drm_i915_private *dev_priv = to_i915(display->drm);
> +
>  	/* RAWCLK_FREQ_VLV register updated from power well code */
>  	return vlv_get_cck_clock_hpll(dev_priv, "hrawclk",
>  				      CCK_DISPLAY_REF_CLOCK_CONTROL);
>  }
>  
> -static int i9xx_hrawclk(struct drm_i915_private *i915)
> +static int i9xx_hrawclk(struct intel_display *display)
>  {
> +	struct drm_i915_private *i915 = to_i915(display->drm);
> +
>  	/* hrawclock is 1/4 the FSB frequency */
>  	return DIV_ROUND_CLOSEST(i9xx_fsb_freq(i915), 4);
>  }
>  
>  /**
>   * intel_read_rawclk - Determine the current RAWCLK frequency
> - * @dev_priv: i915 device
> + * @display: display instance
>   *
>   * Determine the current RAWCLK frequency. RAWCLK is a fixed
>   * frequency clock so this needs to done only once.
>   */
> -u32 intel_read_rawclk(struct drm_i915_private *dev_priv)
> +u32 intel_read_rawclk(struct intel_display *display)
>  {
> +	struct drm_i915_private *dev_priv = to_i915(display->drm);
>  	u32 freq;
>  
>  	if (INTEL_PCH_TYPE(dev_priv) >= PCH_MTL)
> @@ -3572,15 +3614,15 @@ u32 intel_read_rawclk(struct drm_i915_private *dev_priv)
>  		 */
>  		freq = 38400;
>  	else if (INTEL_PCH_TYPE(dev_priv) >= PCH_DG1)
> -		freq = dg1_rawclk(dev_priv);
> +		freq = dg1_rawclk(display);
>  	else if (INTEL_PCH_TYPE(dev_priv) >= PCH_CNP)
> -		freq = cnp_rawclk(dev_priv);
> +		freq = cnp_rawclk(display);
>  	else if (HAS_PCH_SPLIT(dev_priv))
> -		freq = pch_rawclk(dev_priv);
> +		freq = pch_rawclk(display);
>  	else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
> -		freq = vlv_hrawclk(dev_priv);
> -	else if (DISPLAY_VER(dev_priv) >= 3)
> -		freq = i9xx_hrawclk(dev_priv);
> +		freq = vlv_hrawclk(display);
> +	else if (DISPLAY_VER(display) >= 3)
> +		freq = i9xx_hrawclk(display);
>  	else
>  		/* no rawclk on other platforms, or no need to know it */
>  		return 0;
> @@ -3590,23 +3632,23 @@ u32 intel_read_rawclk(struct drm_i915_private *dev_priv)
>  
>  static int i915_cdclk_info_show(struct seq_file *m, void *unused)
>  {
> -	struct drm_i915_private *i915 = m->private;
> +	struct intel_display *display = m->private;
>  
> -	seq_printf(m, "Current CD clock frequency: %d kHz\n", i915->display.cdclk.hw.cdclk);
> -	seq_printf(m, "Max CD clock frequency: %d kHz\n", i915->display.cdclk.max_cdclk_freq);
> -	seq_printf(m, "Max pixel clock frequency: %d kHz\n", i915->display.cdclk.max_dotclk_freq);
> +	seq_printf(m, "Current CD clock frequency: %d kHz\n", display->cdclk.hw.cdclk);
> +	seq_printf(m, "Max CD clock frequency: %d kHz\n", display->cdclk.max_cdclk_freq);
> +	seq_printf(m, "Max pixel clock frequency: %d kHz\n", display->cdclk.max_dotclk_freq);
>  
>  	return 0;
>  }
>  
>  DEFINE_SHOW_ATTRIBUTE(i915_cdclk_info);
>  
> -void intel_cdclk_debugfs_register(struct drm_i915_private *i915)
> +void intel_cdclk_debugfs_register(struct intel_display *display)
>  {
> -	struct drm_minor *minor = i915->drm.primary;
> +	struct drm_minor *minor = display->drm->primary;
>  
>  	debugfs_create_file("i915_cdclk_info", 0444, minor->debugfs_root,
> -			    i915, &i915_cdclk_info_fops);
> +			    display, &i915_cdclk_info_fops);
>  }
>  
>  static const struct intel_cdclk_funcs rplu_cdclk_funcs = {
> @@ -3747,97 +3789,99 @@ static const struct intel_cdclk_funcs i830_cdclk_funcs = {
>  
>  /**
>   * intel_init_cdclk_hooks - Initialize CDCLK related modesetting hooks
> - * @dev_priv: i915 device
> + * @display: display instance
>   */
> -void intel_init_cdclk_hooks(struct drm_i915_private *dev_priv)
> +void intel_init_cdclk_hooks(struct intel_display *display)
>  {
> -	if (DISPLAY_VER(dev_priv) >= 20) {
> -		dev_priv->display.funcs.cdclk = &rplu_cdclk_funcs;
> -		dev_priv->display.cdclk.table = xe2lpd_cdclk_table;
> -	} else if (DISPLAY_VER_FULL(dev_priv) >= IP_VER(14, 1)) {
> -		dev_priv->display.funcs.cdclk = &rplu_cdclk_funcs;
> -		dev_priv->display.cdclk.table = xe2hpd_cdclk_table;
> -	} else if (DISPLAY_VER(dev_priv) >= 14) {
> -		dev_priv->display.funcs.cdclk = &rplu_cdclk_funcs;
> -		dev_priv->display.cdclk.table = mtl_cdclk_table;
> +	struct drm_i915_private *dev_priv = to_i915(display->drm);
> +
> +	if (DISPLAY_VER(display) >= 20) {
> +		display->funcs.cdclk = &rplu_cdclk_funcs;
> +		display->cdclk.table = xe2lpd_cdclk_table;
> +	} else if (DISPLAY_VER_FULL(display) >= IP_VER(14, 1)) {
> +		display->funcs.cdclk = &rplu_cdclk_funcs;
> +		display->cdclk.table = xe2hpd_cdclk_table;
> +	} else if (DISPLAY_VER(display) >= 14) {
> +		display->funcs.cdclk = &rplu_cdclk_funcs;
> +		display->cdclk.table = mtl_cdclk_table;
>  	} else if (IS_DG2(dev_priv)) {
> -		dev_priv->display.funcs.cdclk = &tgl_cdclk_funcs;
> -		dev_priv->display.cdclk.table = dg2_cdclk_table;
> +		display->funcs.cdclk = &tgl_cdclk_funcs;
> +		display->cdclk.table = dg2_cdclk_table;
>  	} else if (IS_ALDERLAKE_P(dev_priv)) {
>  		/* Wa_22011320316:adl-p[a0] */
>  		if (IS_ALDERLAKE_P(dev_priv) && IS_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0)) {
> -			dev_priv->display.cdclk.table = adlp_a_step_cdclk_table;
> -			dev_priv->display.funcs.cdclk = &tgl_cdclk_funcs;
> +			display->cdclk.table = adlp_a_step_cdclk_table;
> +			display->funcs.cdclk = &tgl_cdclk_funcs;
>  		} else if (IS_RAPTORLAKE_U(dev_priv)) {
> -			dev_priv->display.cdclk.table = rplu_cdclk_table;
> -			dev_priv->display.funcs.cdclk = &rplu_cdclk_funcs;
> +			display->cdclk.table = rplu_cdclk_table;
> +			display->funcs.cdclk = &rplu_cdclk_funcs;
>  		} else {
> -			dev_priv->display.cdclk.table = adlp_cdclk_table;
> -			dev_priv->display.funcs.cdclk = &tgl_cdclk_funcs;
> +			display->cdclk.table = adlp_cdclk_table;
> +			display->funcs.cdclk = &tgl_cdclk_funcs;
>  		}
>  	} else if (IS_ROCKETLAKE(dev_priv)) {
> -		dev_priv->display.funcs.cdclk = &tgl_cdclk_funcs;
> -		dev_priv->display.cdclk.table = rkl_cdclk_table;
> -	} else if (DISPLAY_VER(dev_priv) >= 12) {
> -		dev_priv->display.funcs.cdclk = &tgl_cdclk_funcs;
> -		dev_priv->display.cdclk.table = icl_cdclk_table;
> +		display->funcs.cdclk = &tgl_cdclk_funcs;
> +		display->cdclk.table = rkl_cdclk_table;
> +	} else if (DISPLAY_VER(display) >= 12) {
> +		display->funcs.cdclk = &tgl_cdclk_funcs;
> +		display->cdclk.table = icl_cdclk_table;
>  	} else if (IS_JASPERLAKE(dev_priv) || IS_ELKHARTLAKE(dev_priv)) {
> -		dev_priv->display.funcs.cdclk = &ehl_cdclk_funcs;
> -		dev_priv->display.cdclk.table = icl_cdclk_table;
> -	} else if (DISPLAY_VER(dev_priv) >= 11) {
> -		dev_priv->display.funcs.cdclk = &icl_cdclk_funcs;
> -		dev_priv->display.cdclk.table = icl_cdclk_table;
> +		display->funcs.cdclk = &ehl_cdclk_funcs;
> +		display->cdclk.table = icl_cdclk_table;
> +	} else if (DISPLAY_VER(display) >= 11) {
> +		display->funcs.cdclk = &icl_cdclk_funcs;
> +		display->cdclk.table = icl_cdclk_table;
>  	} else if (IS_GEMINILAKE(dev_priv) || IS_BROXTON(dev_priv)) {
> -		dev_priv->display.funcs.cdclk = &bxt_cdclk_funcs;
> +		display->funcs.cdclk = &bxt_cdclk_funcs;
>  		if (IS_GEMINILAKE(dev_priv))
> -			dev_priv->display.cdclk.table = glk_cdclk_table;
> +			display->cdclk.table = glk_cdclk_table;
>  		else
> -			dev_priv->display.cdclk.table = bxt_cdclk_table;
> -	} else if (DISPLAY_VER(dev_priv) == 9) {
> -		dev_priv->display.funcs.cdclk = &skl_cdclk_funcs;
> +			display->cdclk.table = bxt_cdclk_table;
> +	} else if (DISPLAY_VER(display) == 9) {
> +		display->funcs.cdclk = &skl_cdclk_funcs;
>  	} else if (IS_BROADWELL(dev_priv)) {
> -		dev_priv->display.funcs.cdclk = &bdw_cdclk_funcs;
> +		display->funcs.cdclk = &bdw_cdclk_funcs;
>  	} else if (IS_HASWELL(dev_priv)) {
> -		dev_priv->display.funcs.cdclk = &hsw_cdclk_funcs;
> +		display->funcs.cdclk = &hsw_cdclk_funcs;
>  	} else if (IS_CHERRYVIEW(dev_priv)) {
> -		dev_priv->display.funcs.cdclk = &chv_cdclk_funcs;
> +		display->funcs.cdclk = &chv_cdclk_funcs;
>  	} else if (IS_VALLEYVIEW(dev_priv)) {
> -		dev_priv->display.funcs.cdclk = &vlv_cdclk_funcs;
> +		display->funcs.cdclk = &vlv_cdclk_funcs;
>  	} else if (IS_SANDYBRIDGE(dev_priv) || IS_IVYBRIDGE(dev_priv)) {
> -		dev_priv->display.funcs.cdclk = &fixed_400mhz_cdclk_funcs;
> +		display->funcs.cdclk = &fixed_400mhz_cdclk_funcs;
>  	} else if (IS_IRONLAKE(dev_priv)) {
> -		dev_priv->display.funcs.cdclk = &ilk_cdclk_funcs;
> +		display->funcs.cdclk = &ilk_cdclk_funcs;
>  	} else if (IS_GM45(dev_priv)) {
> -		dev_priv->display.funcs.cdclk = &gm45_cdclk_funcs;
> +		display->funcs.cdclk = &gm45_cdclk_funcs;
>  	} else if (IS_G45(dev_priv)) {
> -		dev_priv->display.funcs.cdclk = &g33_cdclk_funcs;
> +		display->funcs.cdclk = &g33_cdclk_funcs;
>  	} else if (IS_I965GM(dev_priv)) {
> -		dev_priv->display.funcs.cdclk = &i965gm_cdclk_funcs;
> +		display->funcs.cdclk = &i965gm_cdclk_funcs;
>  	} else if (IS_I965G(dev_priv)) {
> -		dev_priv->display.funcs.cdclk = &fixed_400mhz_cdclk_funcs;
> +		display->funcs.cdclk = &fixed_400mhz_cdclk_funcs;
>  	} else if (IS_PINEVIEW(dev_priv)) {
> -		dev_priv->display.funcs.cdclk = &pnv_cdclk_funcs;
> +		display->funcs.cdclk = &pnv_cdclk_funcs;
>  	} else if (IS_G33(dev_priv)) {
> -		dev_priv->display.funcs.cdclk = &g33_cdclk_funcs;
> +		display->funcs.cdclk = &g33_cdclk_funcs;
>  	} else if (IS_I945GM(dev_priv)) {
> -		dev_priv->display.funcs.cdclk = &i945gm_cdclk_funcs;
> +		display->funcs.cdclk = &i945gm_cdclk_funcs;
>  	} else if (IS_I945G(dev_priv)) {
> -		dev_priv->display.funcs.cdclk = &fixed_400mhz_cdclk_funcs;
> +		display->funcs.cdclk = &fixed_400mhz_cdclk_funcs;
>  	} else if (IS_I915GM(dev_priv)) {
> -		dev_priv->display.funcs.cdclk = &i915gm_cdclk_funcs;
> +		display->funcs.cdclk = &i915gm_cdclk_funcs;
>  	} else if (IS_I915G(dev_priv)) {
> -		dev_priv->display.funcs.cdclk = &i915g_cdclk_funcs;
> +		display->funcs.cdclk = &i915g_cdclk_funcs;
>  	} else if (IS_I865G(dev_priv)) {
> -		dev_priv->display.funcs.cdclk = &i865g_cdclk_funcs;
> +		display->funcs.cdclk = &i865g_cdclk_funcs;
>  	} else if (IS_I85X(dev_priv)) {
> -		dev_priv->display.funcs.cdclk = &i85x_cdclk_funcs;
> +		display->funcs.cdclk = &i85x_cdclk_funcs;
>  	} else if (IS_I845G(dev_priv)) {
> -		dev_priv->display.funcs.cdclk = &i845g_cdclk_funcs;
> +		display->funcs.cdclk = &i845g_cdclk_funcs;
>  	} else if (IS_I830(dev_priv)) {
> -		dev_priv->display.funcs.cdclk = &i830_cdclk_funcs;
> +		display->funcs.cdclk = &i830_cdclk_funcs;
>  	}
>  
> -	if (drm_WARN(&dev_priv->drm, !dev_priv->display.funcs.cdclk,
> +	if (drm_WARN(display->drm, !display->funcs.cdclk,
>  		     "Unknown platform. Assuming i830\n"))
> -		dev_priv->display.funcs.cdclk = &i830_cdclk_funcs;
> +		display->funcs.cdclk = &i830_cdclk_funcs;
>  }
> diff --git a/drivers/gpu/drm/i915/display/intel_cdclk.h b/drivers/gpu/drm/i915/display/intel_cdclk.h
> index 1fe445a3a30b..6b0e7a41eba3 100644
> --- a/drivers/gpu/drm/i915/display/intel_cdclk.h
> +++ b/drivers/gpu/drm/i915/display/intel_cdclk.h
> @@ -11,9 +11,9 @@
>  #include "intel_display_limits.h"
>  #include "intel_global_state.h"
>  
> -struct drm_i915_private;
>  struct intel_atomic_state;
>  struct intel_crtc_state;
> +struct intel_display;
>  
>  struct intel_cdclk_config {
>  	unsigned int cdclk, vco, ref, bypass;
> @@ -59,24 +59,24 @@ struct intel_cdclk_state {
>  };
>  
>  int intel_crtc_compute_min_cdclk(const struct intel_crtc_state *crtc_state);
> -void intel_cdclk_init_hw(struct drm_i915_private *i915);
> -void intel_cdclk_uninit_hw(struct drm_i915_private *i915);
> -void intel_init_cdclk_hooks(struct drm_i915_private *dev_priv);
> -void intel_update_max_cdclk(struct drm_i915_private *dev_priv);
> -void intel_update_cdclk(struct drm_i915_private *dev_priv);
> -u32 intel_read_rawclk(struct drm_i915_private *dev_priv);
> +void intel_cdclk_init_hw(struct intel_display *display);
> +void intel_cdclk_uninit_hw(struct intel_display *display);
> +void intel_init_cdclk_hooks(struct intel_display *display);
> +void intel_update_max_cdclk(struct intel_display *display);
> +void intel_update_cdclk(struct intel_display *display);
> +u32 intel_read_rawclk(struct intel_display *display);
>  bool intel_cdclk_clock_changed(const struct intel_cdclk_config *a,
>  			       const struct intel_cdclk_config *b);
> -int intel_mdclk_cdclk_ratio(struct drm_i915_private *i915,
> +int intel_mdclk_cdclk_ratio(struct intel_display *display,
>  			    const struct intel_cdclk_config *cdclk_config);
>  bool intel_cdclk_is_decreasing_later(struct intel_atomic_state *state);
>  void intel_set_cdclk_pre_plane_update(struct intel_atomic_state *state);
>  void intel_set_cdclk_post_plane_update(struct intel_atomic_state *state);
> -void intel_cdclk_dump_config(struct drm_i915_private *i915,
> +void intel_cdclk_dump_config(struct intel_display *display,
>  			     const struct intel_cdclk_config *cdclk_config,
>  			     const char *context);
>  int intel_modeset_calc_cdclk(struct intel_atomic_state *state);
> -void intel_cdclk_get_cdclk(struct drm_i915_private *dev_priv,
> +void intel_cdclk_get_cdclk(struct intel_display *display,
>  			   struct intel_cdclk_config *cdclk_config);
>  int intel_cdclk_atomic_check(struct intel_atomic_state *state,
>  			     bool *need_cdclk_calc);
> @@ -92,7 +92,7 @@ intel_atomic_get_cdclk_state(struct intel_atomic_state *state);
>  #define intel_atomic_get_new_cdclk_state(state) \
>  	to_intel_cdclk_state(intel_atomic_get_new_global_obj_state(state, &to_intel_display(state)->cdclk.obj))
>  
> -int intel_cdclk_init(struct drm_i915_private *dev_priv);
> -void intel_cdclk_debugfs_register(struct drm_i915_private *i915);
> +int intel_cdclk_init(struct intel_display *display);
> +void intel_cdclk_debugfs_register(struct intel_display *display);
>  
>  #endif /* __INTEL_CDCLK_H__ */
> diff --git a/drivers/gpu/drm/i915/display/intel_display_debugfs.c b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
> index 830b9eb60976..c1bef34d1ffd 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_debugfs.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
> @@ -1068,7 +1068,7 @@ void intel_display_debugfs_register(struct drm_i915_private *i915)
>  				 minor->debugfs_root, minor);
>  
>  	intel_bios_debugfs_register(display);
> -	intel_cdclk_debugfs_register(i915);
> +	intel_cdclk_debugfs_register(display);
>  	intel_dmc_debugfs_register(i915);
>  	intel_fbc_debugfs_register(display);
>  	intel_hpd_debugfs_register(i915);
> diff --git a/drivers/gpu/drm/i915/display/intel_display_device.c b/drivers/gpu/drm/i915/display/intel_display_device.c
> index 408c76852495..9ff08dbefc76 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_device.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_device.c
> @@ -1678,7 +1678,7 @@ static void __intel_display_device_info_runtime_init(struct drm_i915_private *i9
>  		}
>  	}
>  
> -	display_runtime->rawclk_freq = intel_read_rawclk(i915);
> +	display_runtime->rawclk_freq = intel_read_rawclk(&i915->display);
>  	drm_dbg_kms(&i915->drm, "rawclk rate: %d kHz\n", display_runtime->rawclk_freq);
>  
>  	return;
> diff --git a/drivers/gpu/drm/i915/display/intel_display_driver.c b/drivers/gpu/drm/i915/display/intel_display_driver.c
> index e7670774ecd0..434e52f450ff 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_driver.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_driver.c
> @@ -82,16 +82,17 @@ bool intel_display_driver_probe_defer(struct pci_dev *pdev)
>  
>  void intel_display_driver_init_hw(struct drm_i915_private *i915)
>  {
> +	struct intel_display *display = &i915->display;
>  	struct intel_cdclk_state *cdclk_state;
>  
>  	if (!HAS_DISPLAY(i915))
>  		return;
>  
> -	cdclk_state = to_intel_cdclk_state(i915->display.cdclk.obj.state);
> +	cdclk_state = to_intel_cdclk_state(display->cdclk.obj.state);
>  
> -	intel_update_cdclk(i915);
> -	intel_cdclk_dump_config(i915, &i915->display.cdclk.hw, "Current CDCLK");
> -	cdclk_state->logical = cdclk_state->actual = i915->display.cdclk.hw;
> +	intel_update_cdclk(display);
> +	intel_cdclk_dump_config(display, &display->cdclk.hw, "Current CDCLK");
> +	cdclk_state->logical = cdclk_state->actual = display->cdclk.hw;
>  
>  	intel_display_wa_apply(i915);
>  }
> @@ -194,7 +195,7 @@ void intel_display_driver_early_probe(struct drm_i915_private *i915)
>  	intel_display_irq_init(i915);
>  	intel_dkl_phy_init(i915);
>  	intel_color_init_hooks(i915);
> -	intel_init_cdclk_hooks(i915);
> +	intel_init_cdclk_hooks(&i915->display);
>  	intel_audio_hooks_init(i915);
>  	intel_dpll_init_clock_hook(i915);
>  	intel_init_display_hooks(i915);
> @@ -244,7 +245,7 @@ int intel_display_driver_probe_noirq(struct drm_i915_private *i915)
>  
>  	intel_mode_config_init(i915);
>  
> -	ret = intel_cdclk_init(i915);
> +	ret = intel_cdclk_init(display);
>  	if (ret)
>  		goto cleanup_vga_client_pw_domain_dmc;
>  
> @@ -451,8 +452,8 @@ int intel_display_driver_probe_nogem(struct drm_i915_private *i915)
>  	intel_display_driver_init_hw(i915);
>  	intel_dpll_update_ref_clks(i915);
>  
> -	if (i915->display.cdclk.max_cdclk_freq == 0)
> -		intel_update_max_cdclk(i915);
> +	if (display->cdclk.max_cdclk_freq == 0)
> +		intel_update_max_cdclk(display);
>  
>  	intel_hti_init(display);
>  
> diff --git a/drivers/gpu/drm/i915/display/intel_display_power.c b/drivers/gpu/drm/i915/display/intel_display_power.c
> index ef2fdbf97346..eb3e2a56af1d 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_power.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_power.c
> @@ -1300,6 +1300,7 @@ static void hsw_disable_lcpll(struct drm_i915_private *dev_priv,
>   */
>  static void hsw_restore_lcpll(struct drm_i915_private *dev_priv)
>  {
> +	struct intel_display *display = &dev_priv->display;
>  	u32 val;
>  
>  	val = intel_de_read(dev_priv, LCPLL_CTL);
> @@ -1343,8 +1344,8 @@ static void hsw_restore_lcpll(struct drm_i915_private *dev_priv)
>  
>  	intel_uncore_forcewake_put(&dev_priv->uncore, FORCEWAKE_ALL);
>  
> -	intel_update_cdclk(dev_priv);
> -	intel_cdclk_dump_config(dev_priv, &dev_priv->display.cdclk.hw, "Current CDCLK");
> +	intel_update_cdclk(display);
> +	intel_cdclk_dump_config(display, &display->cdclk.hw, "Current CDCLK");
>  }
>  
>  /*
> @@ -1416,7 +1417,8 @@ static void intel_pch_reset_handshake(struct drm_i915_private *dev_priv,
>  static void skl_display_core_init(struct drm_i915_private *dev_priv,
>  				  bool resume)
>  {
> -	struct i915_power_domains *power_domains = &dev_priv->display.power.domains;
> +	struct intel_display *display = &dev_priv->display;
> +	struct i915_power_domains *power_domains = &display->power.domains;
>  	struct i915_power_well *well;
>  
>  	gen9_set_dc_state(dev_priv, DC_STATE_DISABLE);
> @@ -1438,7 +1440,7 @@ static void skl_display_core_init(struct drm_i915_private *dev_priv,
>  
>  	mutex_unlock(&power_domains->lock);
>  
> -	intel_cdclk_init_hw(dev_priv);
> +	intel_cdclk_init_hw(display);
>  
>  	gen9_dbuf_enable(dev_priv);
>  
> @@ -1448,7 +1450,8 @@ static void skl_display_core_init(struct drm_i915_private *dev_priv,
>  
>  static void skl_display_core_uninit(struct drm_i915_private *dev_priv)
>  {
> -	struct i915_power_domains *power_domains = &dev_priv->display.power.domains;
> +	struct intel_display *display = &dev_priv->display;
> +	struct i915_power_domains *power_domains = &display->power.domains;
>  	struct i915_power_well *well;
>  
>  	if (!HAS_DISPLAY(dev_priv))
> @@ -1459,7 +1462,7 @@ static void skl_display_core_uninit(struct drm_i915_private *dev_priv)
>  
>  	gen9_dbuf_disable(dev_priv);
>  
> -	intel_cdclk_uninit_hw(dev_priv);
> +	intel_cdclk_uninit_hw(display);
>  
>  	/* The spec doesn't call for removing the reset handshake flag */
>  	/* disable PG1 and Misc I/O */
> @@ -1482,7 +1485,8 @@ static void skl_display_core_uninit(struct drm_i915_private *dev_priv)
>  
>  static void bxt_display_core_init(struct drm_i915_private *dev_priv, bool resume)
>  {
> -	struct i915_power_domains *power_domains = &dev_priv->display.power.domains;
> +	struct intel_display *display = &dev_priv->display;
> +	struct i915_power_domains *power_domains = &display->power.domains;
>  	struct i915_power_well *well;
>  
>  	gen9_set_dc_state(dev_priv, DC_STATE_DISABLE);
> @@ -1506,7 +1510,7 @@ static void bxt_display_core_init(struct drm_i915_private *dev_priv, bool resume
>  
>  	mutex_unlock(&power_domains->lock);
>  
> -	intel_cdclk_init_hw(dev_priv);
> +	intel_cdclk_init_hw(display);
>  
>  	gen9_dbuf_enable(dev_priv);
>  
> @@ -1516,7 +1520,8 @@ static void bxt_display_core_init(struct drm_i915_private *dev_priv, bool resume
>  
>  static void bxt_display_core_uninit(struct drm_i915_private *dev_priv)
>  {
> -	struct i915_power_domains *power_domains = &dev_priv->display.power.domains;
> +	struct intel_display *display = &dev_priv->display;
> +	struct i915_power_domains *power_domains = &display->power.domains;
>  	struct i915_power_well *well;
>  
>  	if (!HAS_DISPLAY(dev_priv))
> @@ -1527,7 +1532,7 @@ static void bxt_display_core_uninit(struct drm_i915_private *dev_priv)
>  
>  	gen9_dbuf_disable(dev_priv);
>  
> -	intel_cdclk_uninit_hw(dev_priv);
> +	intel_cdclk_uninit_hw(display);
>  
>  	/* The spec doesn't call for removing the reset handshake flag */
>  
> @@ -1623,7 +1628,8 @@ static void tgl_bw_buddy_init(struct drm_i915_private *dev_priv)
>  static void icl_display_core_init(struct drm_i915_private *dev_priv,
>  				  bool resume)
>  {
> -	struct i915_power_domains *power_domains = &dev_priv->display.power.domains;
> +	struct intel_display *display = &dev_priv->display;
> +	struct i915_power_domains *power_domains = &display->power.domains;
>  	struct i915_power_well *well;
>  
>  	gen9_set_dc_state(dev_priv, DC_STATE_DISABLE);
> @@ -1657,7 +1663,7 @@ static void icl_display_core_init(struct drm_i915_private *dev_priv,
>  			     HOLD_PHY_PG1_LATCH | HOLD_PHY_CLKREQ_PG1_LATCH, 0);
>  
>  	/* 4. Enable CDCLK. */
> -	intel_cdclk_init_hw(dev_priv);
> +	intel_cdclk_init_hw(display);
>  
>  	if (DISPLAY_VER(dev_priv) >= 12)
>  		gen12_dbuf_slices_config(dev_priv);
> @@ -1704,7 +1710,8 @@ static void icl_display_core_init(struct drm_i915_private *dev_priv,
>  
>  static void icl_display_core_uninit(struct drm_i915_private *dev_priv)
>  {
> -	struct i915_power_domains *power_domains = &dev_priv->display.power.domains;
> +	struct intel_display *display = &dev_priv->display;
> +	struct i915_power_domains *power_domains = &display->power.domains;
>  	struct i915_power_well *well;
>  
>  	if (!HAS_DISPLAY(dev_priv))
> @@ -1719,7 +1726,7 @@ static void icl_display_core_uninit(struct drm_i915_private *dev_priv)
>  	gen9_dbuf_disable(dev_priv);
>  
>  	/* 3. Disable CD clock */
> -	intel_cdclk_uninit_hw(dev_priv);
> +	intel_cdclk_uninit_hw(display);
>  
>  	if (DISPLAY_VER(dev_priv) == 14)
>  		intel_de_rmw(dev_priv, DC_STATE_EN, 0,
> diff --git a/drivers/gpu/drm/i915/display/intel_display_power_well.c b/drivers/gpu/drm/i915/display/intel_display_power_well.c
> index 46e9eff12c23..7b40a5b88214 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_power_well.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_power_well.c
> @@ -967,7 +967,8 @@ static void gen9_assert_dbuf_enabled(struct drm_i915_private *dev_priv)
>  
>  void gen9_disable_dc_states(struct drm_i915_private *dev_priv)
>  {
> -	struct i915_power_domains *power_domains = &dev_priv->display.power.domains;
> +	struct intel_display *display = &dev_priv->display;
> +	struct i915_power_domains *power_domains = &display->power.domains;
>  	struct intel_cdclk_config cdclk_config = {};
>  
>  	if (power_domains->target_dc_state == DC_STATE_EN_DC3CO) {
> @@ -982,10 +983,10 @@ void gen9_disable_dc_states(struct drm_i915_private *dev_priv)
>  
>  	intel_dmc_wl_disable(&dev_priv->display);
>  
> -	intel_cdclk_get_cdclk(dev_priv, &cdclk_config);
> +	intel_cdclk_get_cdclk(display, &cdclk_config);
>  	/* Can't read out voltage_level so can't use intel_cdclk_changed() */
> -	drm_WARN_ON(&dev_priv->drm,
> -		    intel_cdclk_clock_changed(&dev_priv->display.cdclk.hw,
> +	drm_WARN_ON(display->drm,
> +		    intel_cdclk_clock_changed(&display->cdclk.hw,
>  					      &cdclk_config));
>  
>  	gen9_assert_dbuf_enabled(dev_priv);
> diff --git a/drivers/gpu/drm/i915/display/skl_watermark.c b/drivers/gpu/drm/i915/display/skl_watermark.c
> index 29835b638495..6e1f04d5ef47 100644
> --- a/drivers/gpu/drm/i915/display/skl_watermark.c
> +++ b/drivers/gpu/drm/i915/display/skl_watermark.c
> @@ -2973,6 +2973,7 @@ static void skl_pipe_wm_get_hw_state(struct intel_crtc *crtc,
>  
>  static void skl_wm_get_hw_state(struct drm_i915_private *i915)
>  {
> +	struct intel_display *display = &i915->display;
>  	struct intel_dbuf_state *dbuf_state =
>  		to_intel_dbuf_state(i915->display.dbuf.obj.state);
>  	struct intel_crtc *crtc;
> @@ -2980,7 +2981,7 @@ static void skl_wm_get_hw_state(struct drm_i915_private *i915)
>  	if (HAS_MBUS_JOINING(i915))
>  		dbuf_state->joined_mbus = intel_de_read(i915, MBUS_CTL) & MBUS_JOIN;
>  
> -	dbuf_state->mdclk_cdclk_ratio = intel_mdclk_cdclk_ratio(i915, &i915->display.cdclk.hw);
> +	dbuf_state->mdclk_cdclk_ratio = intel_mdclk_cdclk_ratio(display, &display->cdclk.hw);
>  
>  	for_each_intel_crtc(&i915->drm, crtc) {
>  		struct intel_crtc_state *crtc_state =
> -- 
> 2.44.2
> 


More information about the Intel-gfx mailing list