[PATCH 4/4] drm/i915/bios: convert to struct intel_display

Imre Deak imre.deak at intel.com
Tue Aug 6 15:23:59 UTC 2024


On Wed, Jul 31, 2024 at 07:44:36PM +0300, Jani Nikula wrote:
> [...]
> diff --git a/drivers/gpu/drm/i915/display/g4x_dp.c b/drivers/gpu/drm/i915/display/g4x_dp.c
> index a8e746a0f670..c2128b46bdbd 100644
> --- a/drivers/gpu/drm/i915/display/g4x_dp.c
> +++ b/drivers/gpu/drm/i915/display/g4x_dp.c
> @@ -1279,6 +1279,7 @@ static const struct drm_encoder_funcs intel_dp_enc_funcs = {
> [...]
>  
>  static void
> -parse_general_features(struct drm_i915_private *i915)
> +parse_general_features(struct intel_display *display)
>  {
> +	struct drm_i915_private *i915 = to_i915(display->drm);
>  	const struct bdb_general_features *general;
>  
> -	general = bdb_find_section(i915, BDB_GENERAL_FEATURES);
> +	general = bdb_find_section(display, BDB_GENERAL_FEATURES);
>  	if (!general)
>  		return;
>  
> -	i915->display.vbt.int_tv_support = general->int_tv_support;
> +	display->vbt.int_tv_support = general->int_tv_support;
>  	/* int_crt_support can't be trusted on earlier platforms */
> -	if (i915->display.vbt.version >= 155 &&
> -	    (HAS_DDI(i915) || IS_VALLEYVIEW(i915)))
> -		i915->display.vbt.int_crt_support = general->int_crt_support;
> -	i915->display.vbt.lvds_use_ssc = general->enable_ssc;
> -	i915->display.vbt.lvds_ssc_freq =
> -		intel_bios_ssc_frequency(i915, general->ssc_freq);
> -	i915->display.vbt.display_clock_mode = general->display_clock_mode;
> -	i915->display.vbt.fdi_rx_polarity_inverted = general->fdi_rx_polarity_inverted;
> -	if (i915->display.vbt.version >= 181) {
> -		i915->display.vbt.orientation = general->rotate_180 ?
> +	if (display->vbt.version >= 155 &&
> +	    (HAS_DDI(display) || IS_VALLEYVIEW(i915)))
> +		display->vbt.int_crt_support = general->int_crt_support;
> +	display->vbt.lvds_use_ssc = general->enable_ssc;
> +	display->vbt.lvds_ssc_freq =
> +		intel_bios_ssc_frequency(display, general->ssc_freq);
> +	display->vbt.display_clock_mode = general->display_clock_mode;
> +	display->vbt.fdi_rx_polarity_inverted = general->fdi_rx_polarity_inverted;
> +	if (display->vbt.version >= 181) {
> +		display->vbt.orientation = general->rotate_180 ?
>  			DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP :
>  			DRM_MODE_PANEL_ORIENTATION_NORMAL;
>  	} else {
> -		i915->display.vbt.orientation = DRM_MODE_PANEL_ORIENTATION_UNKNOWN;
> +		display->vbt.orientation = DRM_MODE_PANEL_ORIENTATION_UNKNOWN;
>  	}
>  
> -	if (i915->display.vbt.version >= 249 && general->afc_startup_config) {
> -		i915->display.vbt.override_afc_startup = true;
> -		i915->display.vbt.override_afc_startup_val = general->afc_startup_config == 0x1 ? 0x0 : 0x7;
> +	if (display->vbt.version >= 249 && general->afc_startup_config) {
> +		display->vbt.override_afc_startup = true;
> +		display->vbt.override_afc_startup_val = general->afc_startup_config == 1 ? 0 : 7;

The hex->dec change doesn't make a difference, but I suppose still good
to know if it's a silent cocci script change. Patch looks ok:

Reviewed-by: Imre Deak <imre.deak at intel.com>

>  	}
>  
> -	drm_dbg_kms(&i915->drm,
> +	drm_dbg_kms(display->drm,
>  		    "BDB_GENERAL_FEATURES int_tv_support %d int_crt_support %d lvds_use_ssc %d lvds_ssc_freq %d display_clock_mode %d fdi_rx_polarity_inverted %d\n",
> -		    i915->display.vbt.int_tv_support,
> -		    i915->display.vbt.int_crt_support,
> -		    i915->display.vbt.lvds_use_ssc,
> -		    i915->display.vbt.lvds_ssc_freq,
> -		    i915->display.vbt.display_clock_mode,
> -		    i915->display.vbt.fdi_rx_polarity_inverted);
> +		    display->vbt.int_tv_support,
> +		    display->vbt.int_crt_support,
> +		    display->vbt.lvds_use_ssc,
> +		    display->vbt.lvds_ssc_freq,
> +		    display->vbt.display_clock_mode,
> +		    display->vbt.fdi_rx_polarity_inverted);
>  }
>  
>  static const struct child_device_config *
> @@ -1211,7 +1214,7 @@ child_device_ptr(const struct bdb_general_definitions *defs, int i)
>  }
>  
>  static void
> -parse_sdvo_device_mapping(struct drm_i915_private *i915)
> +parse_sdvo_device_mapping(struct intel_display *display)
>  {
>  	const struct intel_bios_encoder_data *devdata;
>  	int count = 0;
> @@ -1220,12 +1223,12 @@ parse_sdvo_device_mapping(struct drm_i915_private *i915)
>  	 * Only parse SDVO mappings on gens that could have SDVO. This isn't
>  	 * accurate and doesn't have to be, as long as it's not too strict.
>  	 */
> -	if (!IS_DISPLAY_VER(i915, 3, 7)) {
> -		drm_dbg_kms(&i915->drm, "Skipping SDVO device mapping\n");
> +	if (!IS_DISPLAY_VER(display, 3, 7)) {
> +		drm_dbg_kms(display->drm, "Skipping SDVO device mapping\n");
>  		return;
>  	}
>  
> -	list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) {
> +	list_for_each_entry(devdata, &display->vbt.display_devices, node) {
>  		const struct child_device_config *child = &devdata->child;
>  		struct sdvo_device_mapping *mapping;
>  
> @@ -1240,17 +1243,17 @@ parse_sdvo_device_mapping(struct drm_i915_private *i915)
>  		if (child->dvo_port != DEVICE_PORT_DVOB &&
>  		    child->dvo_port != DEVICE_PORT_DVOC) {
>  			/* skip the incorrect SDVO port */
> -			drm_dbg_kms(&i915->drm,
> +			drm_dbg_kms(display->drm,
>  				    "Incorrect SDVO port. Skip it\n");
>  			continue;
>  		}
> -		drm_dbg_kms(&i915->drm,
> +		drm_dbg_kms(display->drm,
>  			    "the SDVO device with target addr %2x is found on"
>  			    " %s port\n",
>  			    child->target_addr,
>  			    (child->dvo_port == DEVICE_PORT_DVOB) ?
>  			    "SDVOB" : "SDVOC");
> -		mapping = &i915->display.vbt.sdvo_mappings[child->dvo_port - 1];
> +		mapping = &display->vbt.sdvo_mappings[child->dvo_port - 1];
>  		if (!mapping->initialized) {
>  			mapping->dvo_port = child->dvo_port;
>  			mapping->target_addr = child->target_addr;
> @@ -1258,20 +1261,20 @@ parse_sdvo_device_mapping(struct drm_i915_private *i915)
>  			mapping->ddc_pin = child->ddc_pin;
>  			mapping->i2c_pin = child->i2c_pin;
>  			mapping->initialized = 1;
> -			drm_dbg_kms(&i915->drm,
> +			drm_dbg_kms(display->drm,
>  				    "SDVO device: dvo=%x, addr=%x, wiring=%d, ddc_pin=%d, i2c_pin=%d\n",
>  				    mapping->dvo_port, mapping->target_addr,
>  				    mapping->dvo_wiring, mapping->ddc_pin,
>  				    mapping->i2c_pin);
>  		} else {
> -			drm_dbg_kms(&i915->drm,
> +			drm_dbg_kms(display->drm,
>  				    "Maybe one SDVO port is shared by "
>  				    "two SDVO device.\n");
>  		}
>  		if (child->target2_addr) {
>  			/* Maybe this is a SDVO device with multiple inputs */
>  			/* And the mapping info is not added */
> -			drm_dbg_kms(&i915->drm,
> +			drm_dbg_kms(display->drm,
>  				    "there exists the target2_addr. Maybe this"
>  				    " is a SDVO device with multiple inputs.\n");
>  		}
> @@ -1280,28 +1283,28 @@ parse_sdvo_device_mapping(struct drm_i915_private *i915)
>  
>  	if (!count) {
>  		/* No SDVO device info is found */
> -		drm_dbg_kms(&i915->drm,
> +		drm_dbg_kms(display->drm,
>  			    "No SDVO device info is found in VBT\n");
>  	}
>  }
>  
>  static void
> -parse_driver_features(struct drm_i915_private *i915)
> +parse_driver_features(struct intel_display *display)
>  {
>  	const struct bdb_driver_features *driver;
>  
> -	driver = bdb_find_section(i915, BDB_DRIVER_FEATURES);
> +	driver = bdb_find_section(display, BDB_DRIVER_FEATURES);
>  	if (!driver)
>  		return;
>  
> -	if (DISPLAY_VER(i915) >= 5) {
> +	if (DISPLAY_VER(display) >= 5) {
>  		/*
>  		 * Note that we consider BDB_DRIVER_FEATURE_INT_SDVO_LVDS
>  		 * to mean "eDP". The VBT spec doesn't agree with that
>  		 * interpretation, but real world VBTs seem to.
>  		 */
>  		if (driver->lvds_config != BDB_DRIVER_FEATURE_INT_LVDS)
> -			i915->display.vbt.int_lvds_support = 0;
> +			display->vbt.int_lvds_support = 0;
>  	} else {
>  		/*
>  		 * FIXME it's not clear which BDB version has the LVDS config
> @@ -1314,25 +1317,25 @@ parse_driver_features(struct drm_i915_private *i915)
>  		 * in the wild with the bits correctly populated. Version
>  		 * 108 (on i85x) does not have the bits correctly populated.
>  		 */
> -		if (i915->display.vbt.version >= 134 &&
> +		if (display->vbt.version >= 134 &&
>  		    driver->lvds_config != BDB_DRIVER_FEATURE_INT_LVDS &&
>  		    driver->lvds_config != BDB_DRIVER_FEATURE_INT_SDVO_LVDS)
> -			i915->display.vbt.int_lvds_support = 0;
> +			display->vbt.int_lvds_support = 0;
>  	}
>  }
>  
>  static void
> -parse_panel_driver_features(struct drm_i915_private *i915,
> +parse_panel_driver_features(struct intel_display *display,
>  			    struct intel_panel *panel)
>  {
>  	const struct bdb_driver_features *driver;
>  
> -	driver = bdb_find_section(i915, BDB_DRIVER_FEATURES);
> +	driver = bdb_find_section(display, BDB_DRIVER_FEATURES);
>  	if (!driver)
>  		return;
>  
> -	if (i915->display.vbt.version < 228) {
> -		drm_dbg_kms(&i915->drm, "DRRS State Enabled:%d\n",
> +	if (display->vbt.version < 228) {
> +		drm_dbg_kms(display->drm, "DRRS State Enabled:%d\n",
>  			    driver->drrs_enabled);
>  		/*
>  		 * If DRRS is not supported, drrs_type has to be set to 0.
> @@ -1356,7 +1359,7 @@ parse_panel_driver_features(struct drm_i915_private *i915,
>  }
>  
>  static void
> -parse_power_conservation_features(struct drm_i915_private *i915,
> +parse_power_conservation_features(struct intel_display *display,
>  				  struct intel_panel *panel)
>  {
>  	const struct bdb_lfp_power *power;
> @@ -1364,10 +1367,10 @@ parse_power_conservation_features(struct drm_i915_private *i915,
>  
>  	panel->vbt.vrr = true; /* matches Windows behaviour */
>  
> -	if (i915->display.vbt.version < 228)
> +	if (display->vbt.version < 228)
>  		return;
>  
> -	power = bdb_find_section(i915, BDB_LFP_POWER);
> +	power = bdb_find_section(display, BDB_LFP_POWER);
>  	if (!power)
>  		return;
>  
> @@ -1390,16 +1393,16 @@ parse_power_conservation_features(struct drm_i915_private *i915,
>  			panel->vbt.drrs_type = DRRS_TYPE_NONE;
>  	}
>  
> -	if (i915->display.vbt.version >= 232)
> +	if (display->vbt.version >= 232)
>  		panel->vbt.edp.hobl = panel_bool(power->hobl, panel_type);
>  
> -	if (i915->display.vbt.version >= 233)
> +	if (display->vbt.version >= 233)
>  		panel->vbt.vrr = panel_bool(power->vrr_feature_enabled,
>  					    panel_type);
>  }
>  
>  static void
> -parse_edp(struct drm_i915_private *i915,
> +parse_edp(struct intel_display *display,
>  	  struct intel_panel *panel)
>  {
>  	const struct bdb_edp *edp;
> @@ -1407,7 +1410,7 @@ parse_edp(struct drm_i915_private *i915,
>  	const struct edp_fast_link_params *edp_link_params;
>  	int panel_type = panel->vbt.panel_type;
>  
> -	edp = bdb_find_section(i915, BDB_EDP);
> +	edp = bdb_find_section(display, BDB_EDP);
>  	if (!edp)
>  		return;
>  
> @@ -1429,7 +1432,7 @@ parse_edp(struct drm_i915_private *i915,
>  
>  	panel->vbt.edp.pps = *edp_pps;
>  
> -	if (i915->display.vbt.version >= 224) {
> +	if (display->vbt.version >= 224) {
>  		panel->vbt.edp.rate =
>  			edp->edp_fast_link_training_rate[panel_type] * 20;
>  	} else {
> @@ -1444,7 +1447,7 @@ parse_edp(struct drm_i915_private *i915,
>  			panel->vbt.edp.rate = 540000;
>  			break;
>  		default:
> -			drm_dbg_kms(&i915->drm,
> +			drm_dbg_kms(display->drm,
>  				    "VBT has unknown eDP link rate value %u\n",
>  				    edp_link_params->rate);
>  			break;
> @@ -1462,7 +1465,7 @@ parse_edp(struct drm_i915_private *i915,
>  		panel->vbt.edp.lanes = 4;
>  		break;
>  	default:
> -		drm_dbg_kms(&i915->drm,
> +		drm_dbg_kms(display->drm,
>  			    "VBT has unknown eDP lane count value %u\n",
>  			    edp_link_params->lanes);
>  		break;
> @@ -1482,7 +1485,7 @@ parse_edp(struct drm_i915_private *i915,
>  		panel->vbt.edp.preemphasis = DP_TRAIN_PRE_EMPH_LEVEL_3;
>  		break;
>  	default:
> -		drm_dbg_kms(&i915->drm,
> +		drm_dbg_kms(display->drm,
>  			    "VBT has unknown eDP pre-emphasis value %u\n",
>  			    edp_link_params->preemphasis);
>  		break;
> @@ -1502,19 +1505,19 @@ parse_edp(struct drm_i915_private *i915,
>  		panel->vbt.edp.vswing = DP_TRAIN_VOLTAGE_SWING_LEVEL_3;
>  		break;
>  	default:
> -		drm_dbg_kms(&i915->drm,
> +		drm_dbg_kms(display->drm,
>  			    "VBT has unknown eDP voltage swing value %u\n",
>  			    edp_link_params->vswing);
>  		break;
>  	}
>  
> -	if (i915->display.vbt.version >= 173) {
> +	if (display->vbt.version >= 173) {
>  		u8 vswing;
>  
>  		/* Don't read from VBT if module parameter has valid value*/
> -		if (i915->display.params.edp_vswing) {
> +		if (display->params.edp_vswing) {
>  			panel->vbt.edp.low_vswing =
> -				i915->display.params.edp_vswing == 1;
> +				display->params.edp_vswing == 1;
>  		} else {
>  			vswing = (edp->edp_vswing_preemph >> (panel_type * 4)) & 0xF;
>  			panel->vbt.edp.low_vswing = vswing == 0;
> @@ -1524,26 +1527,27 @@ parse_edp(struct drm_i915_private *i915,
>  	panel->vbt.edp.drrs_msa_timing_delay =
>  		panel_bits(edp->sdrrs_msa_timing_delay, panel_type, 2);
>  
> -	if (i915->display.vbt.version >= 244)
> +	if (display->vbt.version >= 244)
>  		panel->vbt.edp.max_link_rate =
>  			edp->edp_max_port_link_rate[panel_type] * 20;
>  
> -	if (i915->display.vbt.version >= 251)
> +	if (display->vbt.version >= 251)
>  		panel->vbt.edp.dsc_disable =
>  			panel_bool(edp->edp_dsc_disable, panel_type);
>  }
>  
>  static void
> -parse_psr(struct drm_i915_private *i915,
> +parse_psr(struct intel_display *display,
>  	  struct intel_panel *panel)
>  {
> +	struct drm_i915_private *i915 = to_i915(display->drm);
>  	const struct bdb_psr *psr;
>  	const struct psr_table *psr_table;
>  	int panel_type = panel->vbt.panel_type;
>  
> -	psr = bdb_find_section(i915, BDB_PSR);
> +	psr = bdb_find_section(display, BDB_PSR);
>  	if (!psr) {
> -		drm_dbg_kms(&i915->drm, "No PSR BDB found.\n");
> +		drm_dbg_kms(display->drm, "No PSR BDB found.\n");
>  		return;
>  	}
>  
> @@ -1560,8 +1564,8 @@ parse_psr(struct drm_i915_private *i915,
>  	 * New psr options 0=500us, 1=100us, 2=2500us, 3=0us
>  	 * Old decimal value is wake up time in multiples of 100 us.
>  	 */
> -	if (i915->display.vbt.version >= 205 &&
> -	    (DISPLAY_VER(i915) >= 9 && !IS_BROXTON(i915))) {
> +	if (display->vbt.version >= 205 &&
> +	    (DISPLAY_VER(display) >= 9 && !IS_BROXTON(i915))) {
>  		switch (psr_table->tp1_wakeup_time) {
>  		case 0:
>  			panel->vbt.psr.tp1_wakeup_time_us = 500;
> @@ -1573,7 +1577,7 @@ parse_psr(struct drm_i915_private *i915,
>  			panel->vbt.psr.tp1_wakeup_time_us = 0;
>  			break;
>  		default:
> -			drm_dbg_kms(&i915->drm,
> +			drm_dbg_kms(display->drm,
>  				    "VBT tp1 wakeup time value %d is outside range[0-3], defaulting to max value 2500us\n",
>  				    psr_table->tp1_wakeup_time);
>  			fallthrough;
> @@ -1593,7 +1597,7 @@ parse_psr(struct drm_i915_private *i915,
>  			panel->vbt.psr.tp2_tp3_wakeup_time_us = 0;
>  			break;
>  		default:
> -			drm_dbg_kms(&i915->drm,
> +			drm_dbg_kms(display->drm,
>  				    "VBT tp2_tp3 wakeup time value %d is outside range[0-3], defaulting to max value 2500us\n",
>  				    psr_table->tp2_tp3_wakeup_time);
>  			fallthrough;
> @@ -1606,7 +1610,7 @@ parse_psr(struct drm_i915_private *i915,
>  		panel->vbt.psr.tp2_tp3_wakeup_time_us = psr_table->tp2_tp3_wakeup_time * 100;
>  	}
>  
> -	if (i915->display.vbt.version >= 226) {
> +	if (display->vbt.version >= 226) {
>  		u32 wakeup_time = psr->psr2_tp2_tp3_wakeup_time;
>  
>  		wakeup_time = panel_bits(wakeup_time, panel_type, 2);
> @@ -1632,13 +1636,13 @@ parse_psr(struct drm_i915_private *i915,
>  	}
>  }
>  
> -static void parse_dsi_backlight_ports(struct drm_i915_private *i915,
> +static void parse_dsi_backlight_ports(struct intel_display *display,
>  				      struct intel_panel *panel,
>  				      enum port port)
>  {
> -	enum port port_bc = DISPLAY_VER(i915) >= 11 ? PORT_B : PORT_C;
> +	enum port port_bc = DISPLAY_VER(display) >= 11 ? PORT_B : PORT_C;
>  
> -	if (!panel->vbt.dsi.config->dual_link || i915->display.vbt.version < 197) {
> +	if (!panel->vbt.dsi.config->dual_link || display->vbt.version < 197) {
>  		panel->vbt.dsi.bl_ports = BIT(port);
>  		if (panel->vbt.dsi.config->cabc_supported)
>  			panel->vbt.dsi.cabc_ports = BIT(port);
> @@ -1678,7 +1682,7 @@ static void parse_dsi_backlight_ports(struct drm_i915_private *i915,
>  }
>  
>  static void
> -parse_mipi_config(struct drm_i915_private *i915,
> +parse_mipi_config(struct intel_display *display,
>  		  struct intel_panel *panel)
>  {
>  	const struct bdb_mipi_config *start;
> @@ -1688,19 +1692,19 @@ parse_mipi_config(struct drm_i915_private *i915,
>  	enum port port;
>  
>  	/* parse MIPI blocks only if LFP type is MIPI */
> -	if (!intel_bios_is_dsi_present(i915, &port))
> +	if (!intel_bios_is_dsi_present(display, &port))
>  		return;
>  
>  	/* Initialize this to undefined indicating no generic MIPI support */
>  	panel->vbt.dsi.panel_id = MIPI_DSI_UNDEFINED_PANEL_ID;
>  
> -	start = bdb_find_section(i915, BDB_MIPI_CONFIG);
> +	start = bdb_find_section(display, BDB_MIPI_CONFIG);
>  	if (!start) {
> -		drm_dbg_kms(&i915->drm, "No MIPI config BDB found");
> +		drm_dbg_kms(display->drm, "No MIPI config BDB found");
>  		return;
>  	}
>  
> -	drm_dbg(&i915->drm, "Found MIPI Config block, panel index = %d\n",
> +	drm_dbg(display->drm, "Found MIPI Config block, panel index = %d\n",
>  		panel_type);
>  
>  	/*
> @@ -1721,7 +1725,7 @@ parse_mipi_config(struct drm_i915_private *i915,
>  		return;
>  	}
>  
> -	parse_dsi_backlight_ports(i915, panel, port);
> +	parse_dsi_backlight_ports(display, panel, port);
>  
>  	/* FIXME is the 90 vs. 270 correct? */
>  	switch (config->rotation) {
> @@ -1753,7 +1757,7 @@ parse_mipi_config(struct drm_i915_private *i915,
>  
>  /* Find the sequence block and size for the given panel. */
>  static const u8 *
> -find_panel_sequence_block(struct drm_i915_private *i915,
> +find_panel_sequence_block(struct intel_display *display,
>  			  const struct bdb_mipi_sequence *sequence,
>  			  u16 panel_id, u32 *seq_size)
>  {
> @@ -1771,7 +1775,8 @@ find_panel_sequence_block(struct drm_i915_private *i915,
>  
>  	for (i = 0; i < MAX_MIPI_CONFIGURATIONS && index < total; i++) {
>  		if (index + header_size > total) {
> -			drm_err(&i915->drm, "Invalid sequence block (header)\n");
> +			drm_err(display->drm,
> +				"Invalid sequence block (header)\n");
>  			return NULL;
>  		}
>  
> @@ -1784,7 +1789,7 @@ find_panel_sequence_block(struct drm_i915_private *i915,
>  		index += header_size;
>  
>  		if (index + current_size > total) {
> -			drm_err(&i915->drm, "Invalid sequence block\n");
> +			drm_err(display->drm, "Invalid sequence block\n");
>  			return NULL;
>  		}
>  
> @@ -1796,12 +1801,13 @@ find_panel_sequence_block(struct drm_i915_private *i915,
>  		index += current_size;
>  	}
>  
> -	drm_err(&i915->drm, "Sequence block detected but no valid configuration\n");
> +	drm_err(display->drm,
> +		"Sequence block detected but no valid configuration\n");
>  
>  	return NULL;
>  }
>  
> -static int goto_next_sequence(struct drm_i915_private *i915,
> +static int goto_next_sequence(struct intel_display *display,
>  			      const u8 *data, int index, int total)
>  {
>  	u16 len;
> @@ -1832,7 +1838,7 @@ static int goto_next_sequence(struct drm_i915_private *i915,
>  			len = *(data + index + 6) + 7;
>  			break;
>  		default:
> -			drm_err(&i915->drm, "Unknown operation byte\n");
> +			drm_err(display->drm, "Unknown operation byte\n");
>  			return 0;
>  		}
>  	}
> @@ -1840,7 +1846,7 @@ static int goto_next_sequence(struct drm_i915_private *i915,
>  	return 0;
>  }
>  
> -static int goto_next_sequence_v3(struct drm_i915_private *i915,
> +static int goto_next_sequence_v3(struct intel_display *display,
>  				 const u8 *data, int index, int total)
>  {
>  	int seq_end;
> @@ -1852,7 +1858,7 @@ static int goto_next_sequence_v3(struct drm_i915_private *i915,
>  	 * checking on the structure.
>  	 */
>  	if (total < 5) {
> -		drm_err(&i915->drm, "Too small sequence size\n");
> +		drm_err(display->drm, "Too small sequence size\n");
>  		return 0;
>  	}
>  
> @@ -1869,7 +1875,7 @@ static int goto_next_sequence_v3(struct drm_i915_private *i915,
>  
>  	seq_end = index + size_of_sequence;
>  	if (seq_end > total) {
> -		drm_err(&i915->drm, "Invalid sequence size\n");
> +		drm_err(display->drm, "Invalid sequence size\n");
>  		return 0;
>  	}
>  
> @@ -1879,7 +1885,8 @@ static int goto_next_sequence_v3(struct drm_i915_private *i915,
>  
>  		if (operation_byte == MIPI_SEQ_ELEM_END) {
>  			if (index != seq_end) {
> -				drm_err(&i915->drm, "Invalid element structure\n");
> +				drm_err(display->drm,
> +					"Invalid element structure\n");
>  				return 0;
>  			}
>  			return index;
> @@ -1901,7 +1908,7 @@ static int goto_next_sequence_v3(struct drm_i915_private *i915,
>  		case MIPI_SEQ_ELEM_PMIC:
>  			break;
>  		default:
> -			drm_err(&i915->drm, "Unknown operation byte %u\n",
> +			drm_err(display->drm, "Unknown operation byte %u\n",
>  				operation_byte);
>  			break;
>  		}
> @@ -1914,13 +1921,13 @@ static int goto_next_sequence_v3(struct drm_i915_private *i915,
>   * Get len of pre-fixed deassert fragment from a v1 init OTP sequence,
>   * skip all delay + gpio operands and stop at the first DSI packet op.
>   */
> -static int get_init_otp_deassert_fragment_len(struct drm_i915_private *i915,
> +static int get_init_otp_deassert_fragment_len(struct intel_display *display,
>  					      struct intel_panel *panel)
>  {
>  	const u8 *data = panel->vbt.dsi.sequence[MIPI_SEQ_INIT_OTP];
>  	int index, len;
>  
> -	if (drm_WARN_ON(&i915->drm,
> +	if (drm_WARN_ON(display->drm,
>  			!data || panel->vbt.dsi.seq_version != 1))
>  		return 0;
>  
> @@ -1949,7 +1956,7 @@ static int get_init_otp_deassert_fragment_len(struct drm_i915_private *i915,
>   * these devices we split the init OTP sequence into a deassert sequence and
>   * the actual init OTP part.
>   */
> -static void vlv_fixup_mipi_sequences(struct drm_i915_private *i915,
> +static void vlv_fixup_mipi_sequences(struct intel_display *display,
>  				     struct intel_panel *panel)
>  {
>  	u8 *init_otp;
> @@ -1967,11 +1974,11 @@ static void vlv_fixup_mipi_sequences(struct drm_i915_private *i915,
>  		return;
>  
>  	/* The deassert-sequence ends at the first DSI packet */
> -	len = get_init_otp_deassert_fragment_len(i915, panel);
> +	len = get_init_otp_deassert_fragment_len(display, panel);
>  	if (!len)
>  		return;
>  
> -	drm_dbg_kms(&i915->drm,
> +	drm_dbg_kms(display->drm,
>  		    "Using init OTP fragment to deassert reset\n");
>  
>  	/* Copy the fragment, update seq byte and terminate it */
> @@ -2004,29 +2011,32 @@ static void vlv_fixup_mipi_sequences(struct drm_i915_private *i915,
>   *       or examine the contents of the sequences to
>   *       avoid false positives?
>   */
> -static void icl_fixup_mipi_sequences(struct drm_i915_private *i915,
> +static void icl_fixup_mipi_sequences(struct intel_display *display,
>  				     struct intel_panel *panel)
>  {
>  	if (!panel->vbt.dsi.sequence[MIPI_SEQ_INIT_OTP] &&
>  	    panel->vbt.dsi.sequence[MIPI_SEQ_DISPLAY_ON]) {
> -		drm_dbg_kms(&i915->drm, "Broken VBT: Swapping INIT_OTP and DISPLAY_ON sequences\n");
> +		drm_dbg_kms(display->drm,
> +			    "Broken VBT: Swapping INIT_OTP and DISPLAY_ON sequences\n");
>  
>  		swap(panel->vbt.dsi.sequence[MIPI_SEQ_INIT_OTP],
>  		     panel->vbt.dsi.sequence[MIPI_SEQ_DISPLAY_ON]);
>  	}
>  }
>  
> -static void fixup_mipi_sequences(struct drm_i915_private *i915,
> +static void fixup_mipi_sequences(struct intel_display *display,
>  				 struct intel_panel *panel)
>  {
> -	if (DISPLAY_VER(i915) >= 11)
> -		icl_fixup_mipi_sequences(i915, panel);
> +	struct drm_i915_private *i915 = to_i915(display->drm);
> +
> +	if (DISPLAY_VER(display) >= 11)
> +		icl_fixup_mipi_sequences(display, panel);
>  	else if (IS_VALLEYVIEW(i915))
> -		vlv_fixup_mipi_sequences(i915, panel);
> +		vlv_fixup_mipi_sequences(display, panel);
>  }
>  
>  static void
> -parse_mipi_sequence(struct drm_i915_private *i915,
> +parse_mipi_sequence(struct intel_display *display,
>  		    struct intel_panel *panel)
>  {
>  	int panel_type = panel->vbt.panel_type;
> @@ -2040,25 +2050,25 @@ parse_mipi_sequence(struct drm_i915_private *i915,
>  	if (panel->vbt.dsi.panel_id != MIPI_DSI_GENERIC_PANEL_ID)
>  		return;
>  
> -	sequence = bdb_find_section(i915, BDB_MIPI_SEQUENCE);
> +	sequence = bdb_find_section(display, BDB_MIPI_SEQUENCE);
>  	if (!sequence) {
> -		drm_dbg_kms(&i915->drm,
> +		drm_dbg_kms(display->drm,
>  			    "No MIPI Sequence found, parsing complete\n");
>  		return;
>  	}
>  
>  	/* Fail gracefully for forward incompatible sequence block. */
>  	if (sequence->version >= 4) {
> -		drm_err(&i915->drm,
> +		drm_err(display->drm,
>  			"Unable to parse MIPI Sequence Block v%u\n",
>  			sequence->version);
>  		return;
>  	}
>  
> -	drm_dbg(&i915->drm, "Found MIPI sequence block v%u\n",
> +	drm_dbg(display->drm, "Found MIPI sequence block v%u\n",
>  		sequence->version);
>  
> -	seq_data = find_panel_sequence_block(i915, sequence, panel_type, &seq_size);
> +	seq_data = find_panel_sequence_block(display, sequence, panel_type, &seq_size);
>  	if (!seq_data)
>  		return;
>  
> @@ -2073,24 +2083,24 @@ parse_mipi_sequence(struct drm_i915_private *i915,
>  			break;
>  
>  		if (seq_id >= MIPI_SEQ_MAX) {
> -			drm_err(&i915->drm, "Unknown sequence %u\n",
> +			drm_err(display->drm, "Unknown sequence %u\n",
>  				seq_id);
>  			goto err;
>  		}
>  
>  		/* Log about presence of sequences we won't run. */
>  		if (seq_id == MIPI_SEQ_TEAR_ON || seq_id == MIPI_SEQ_TEAR_OFF)
> -			drm_dbg_kms(&i915->drm,
> +			drm_dbg_kms(display->drm,
>  				    "Unsupported sequence %u\n", seq_id);
>  
>  		panel->vbt.dsi.sequence[seq_id] = data + index;
>  
>  		if (sequence->version >= 3)
> -			index = goto_next_sequence_v3(i915, data, index, seq_size);
> +			index = goto_next_sequence_v3(display, data, index, seq_size);
>  		else
> -			index = goto_next_sequence(i915, data, index, seq_size);
> +			index = goto_next_sequence(display, data, index, seq_size);
>  		if (!index) {
> -			drm_err(&i915->drm, "Invalid sequence %u\n",
> +			drm_err(display->drm, "Invalid sequence %u\n",
>  				seq_id);
>  			goto err;
>  		}
> @@ -2100,9 +2110,9 @@ parse_mipi_sequence(struct drm_i915_private *i915,
>  	panel->vbt.dsi.size = seq_size;
>  	panel->vbt.dsi.seq_version = sequence->version;
>  
> -	fixup_mipi_sequences(i915, panel);
> +	fixup_mipi_sequences(display, panel);
>  
> -	drm_dbg(&i915->drm, "MIPI related VBT parsing complete\n");
> +	drm_dbg(display->drm, "MIPI related VBT parsing complete\n");
>  	return;
>  
>  err:
> @@ -2111,47 +2121,47 @@ parse_mipi_sequence(struct drm_i915_private *i915,
>  }
>  
>  static void
> -parse_compression_parameters(struct drm_i915_private *i915)
> +parse_compression_parameters(struct intel_display *display)
>  {
>  	const struct bdb_compression_parameters *params;
>  	struct intel_bios_encoder_data *devdata;
>  	u16 block_size;
>  	int index;
>  
> -	if (i915->display.vbt.version < 198)
> +	if (display->vbt.version < 198)
>  		return;
>  
> -	params = bdb_find_section(i915, BDB_COMPRESSION_PARAMETERS);
> +	params = bdb_find_section(display, BDB_COMPRESSION_PARAMETERS);
>  	if (params) {
>  		/* Sanity checks */
>  		if (params->entry_size != sizeof(params->data[0])) {
> -			drm_dbg_kms(&i915->drm,
> +			drm_dbg_kms(display->drm,
>  				    "VBT: unsupported compression param entry size\n");
>  			return;
>  		}
>  
>  		block_size = get_blocksize(params);
>  		if (block_size < sizeof(*params)) {
> -			drm_dbg_kms(&i915->drm,
> +			drm_dbg_kms(display->drm,
>  				    "VBT: expected 16 compression param entries\n");
>  			return;
>  		}
>  	}
>  
> -	list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) {
> +	list_for_each_entry(devdata, &display->vbt.display_devices, node) {
>  		const struct child_device_config *child = &devdata->child;
>  
>  		if (!child->compression_enable)
>  			continue;
>  
>  		if (!params) {
> -			drm_dbg_kms(&i915->drm,
> +			drm_dbg_kms(display->drm,
>  				    "VBT: compression params not available\n");
>  			continue;
>  		}
>  
>  		if (child->compression_method_cps) {
> -			drm_dbg_kms(&i915->drm,
> +			drm_dbg_kms(display->drm,
>  				    "VBT: CPS compression not supported\n");
>  			continue;
>  		}
> @@ -2163,12 +2173,12 @@ parse_compression_parameters(struct drm_i915_private *i915)
>  	}
>  }
>  
> -static u8 translate_iboost(struct drm_i915_private *i915, u8 val)
> +static u8 translate_iboost(struct intel_display *display, u8 val)
>  {
>  	static const u8 mapping[] = { 1, 3, 7 }; /* See VBT spec */
>  
>  	if (val >= ARRAY_SIZE(mapping)) {
> -		drm_dbg_kms(&i915->drm,
> +		drm_dbg_kms(display->drm,
>  			    "Unsupported I_boost value found in VBT (%d), display may not work properly\n", val);
>  		return 0;
>  	}
> @@ -2225,8 +2235,9 @@ static const u8 adlp_ddc_pin_map[] = {
>  	[GMBUS_PIN_12_TC4_ICP] = ADLP_DDC_BUS_PORT_TC4,
>  };
>  
> -static u8 map_ddc_pin(struct drm_i915_private *i915, u8 vbt_pin)
> +static u8 map_ddc_pin(struct intel_display *display, u8 vbt_pin)
>  {
> +	struct drm_i915_private *i915 = to_i915(display->drm);
>  	const u8 *ddc_pin_map;
>  	int i, n_entries;
>  
> @@ -2241,7 +2252,7 @@ static u8 map_ddc_pin(struct drm_i915_private *i915, u8 vbt_pin)
>  	} else if (IS_ROCKETLAKE(i915) && INTEL_PCH_TYPE(i915) == PCH_TGP) {
>  		ddc_pin_map = rkl_pch_tgp_ddc_pin_map;
>  		n_entries = ARRAY_SIZE(rkl_pch_tgp_ddc_pin_map);
> -	} else if (HAS_PCH_TGP(i915) && DISPLAY_VER(i915) == 9) {
> +	} else if (HAS_PCH_TGP(i915) && DISPLAY_VER(display) == 9) {
>  		ddc_pin_map = gen9bc_tgp_ddc_pin_map;
>  		n_entries = ARRAY_SIZE(gen9bc_tgp_ddc_pin_map);
>  	} else if (INTEL_PCH_TYPE(i915) >= PCH_ICP) {
> @@ -2260,7 +2271,7 @@ static u8 map_ddc_pin(struct drm_i915_private *i915, u8 vbt_pin)
>  			return i;
>  	}
>  
> -	drm_dbg_kms(&i915->drm,
> +	drm_dbg_kms(display->drm,
>  		    "Ignoring alternate pin: VBT claims DDC pin %d, which is not valid for this platform\n",
>  		    vbt_pin);
>  	return 0;
> @@ -2318,9 +2329,10 @@ static enum port __dvo_port_to_port(int n_ports, int n_dvo,
>  	return PORT_NONE;
>  }
>  
> -static enum port dvo_port_to_port(struct drm_i915_private *i915,
> +static enum port dvo_port_to_port(struct intel_display *display,
>  				  u8 dvo_port)
>  {
> +	struct drm_i915_private *i915 = to_i915(display->drm);
>  	/*
>  	 * Each DDI port can have more than one value on the "DVO Port" field,
>  	 * so look for all the possible values for each port.
> @@ -2372,7 +2384,7 @@ static enum port dvo_port_to_port(struct drm_i915_private *i915,
>  		[PORT_TC4] = { DVO_PORT_HDMII, DVO_PORT_DPI, -1 },
>  	};
>  
> -	if (DISPLAY_VER(i915) >= 13)
> +	if (DISPLAY_VER(display) >= 13)
>  		return __dvo_port_to_port(ARRAY_SIZE(xelpd_port_mapping),
>  					  ARRAY_SIZE(xelpd_port_mapping[0]),
>  					  xelpd_port_mapping,
> @@ -2395,13 +2407,13 @@ static enum port dvo_port_to_port(struct drm_i915_private *i915,
>  }
>  
>  static enum port
> -dsi_dvo_port_to_port(struct drm_i915_private *i915, u8 dvo_port)
> +dsi_dvo_port_to_port(struct intel_display *display, u8 dvo_port)
>  {
>  	switch (dvo_port) {
>  	case DVO_PORT_MIPIA:
>  		return PORT_A;
>  	case DVO_PORT_MIPIC:
> -		if (DISPLAY_VER(i915) >= 11)
> +		if (DISPLAY_VER(display) >= 11)
>  			return PORT_B;
>  		else
>  			return PORT_C;
> @@ -2412,13 +2424,13 @@ dsi_dvo_port_to_port(struct drm_i915_private *i915, u8 dvo_port)
>  
>  enum port intel_bios_encoder_port(const struct intel_bios_encoder_data *devdata)
>  {
> -	struct drm_i915_private *i915 = devdata->i915;
> +	struct intel_display *display = devdata->display;
>  	const struct child_device_config *child = &devdata->child;
>  	enum port port;
>  
> -	port = dvo_port_to_port(i915, child->dvo_port);
> -	if (port == PORT_NONE && DISPLAY_VER(i915) >= 11)
> -		port = dsi_dvo_port_to_port(i915, child->dvo_port);
> +	port = dvo_port_to_port(display, child->dvo_port);
> +	if (port == PORT_NONE && DISPLAY_VER(display) >= 11)
> +		port = dsi_dvo_port_to_port(display, child->dvo_port);
>  
>  	return port;
>  }
> @@ -2463,10 +2475,10 @@ static int parse_bdb_216_dp_max_link_rate(const int vbt_max_link_rate)
>  
>  int intel_bios_dp_max_link_rate(const struct intel_bios_encoder_data *devdata)
>  {
> -	if (!devdata || devdata->i915->display.vbt.version < 216)
> +	if (!devdata || devdata->display->vbt.version < 216)
>  		return 0;
>  
> -	if (devdata->i915->display.vbt.version >= 230)
> +	if (devdata->display->vbt.version >= 230)
>  		return parse_bdb_230_dp_max_link_rate(devdata->child.dp_max_link_rate);
>  	else
>  		return parse_bdb_216_dp_max_link_rate(devdata->child.dp_max_link_rate);
> @@ -2474,7 +2486,7 @@ int intel_bios_dp_max_link_rate(const struct intel_bios_encoder_data *devdata)
>  
>  int intel_bios_dp_max_lane_count(const struct intel_bios_encoder_data *devdata)
>  {
> -	if (!devdata || devdata->i915->display.vbt.version < 244)
> +	if (!devdata || devdata->display->vbt.version < 244)
>  		return 0;
>  
>  	return devdata->child.dp_max_lane_count + 1;
> @@ -2483,10 +2495,10 @@ int intel_bios_dp_max_lane_count(const struct intel_bios_encoder_data *devdata)
>  static void sanitize_device_type(struct intel_bios_encoder_data *devdata,
>  				 enum port port)
>  {
> -	struct drm_i915_private *i915 = devdata->i915;
> +	struct intel_display *display = devdata->display;
>  	bool is_hdmi;
>  
> -	if (port != PORT_A || DISPLAY_VER(i915) >= 12)
> +	if (port != PORT_A || DISPLAY_VER(display) >= 12)
>  		return;
>  
>  	if (!intel_bios_encoder_supports_dvi(devdata))
> @@ -2494,7 +2506,7 @@ static void sanitize_device_type(struct intel_bios_encoder_data *devdata,
>  
>  	is_hdmi = intel_bios_encoder_supports_hdmi(devdata);
>  
> -	drm_dbg_kms(&i915->drm, "VBT claims port A supports DVI%s, ignoring\n",
> +	drm_dbg_kms(display->drm, "VBT claims port A supports DVI%s, ignoring\n",
>  		    is_hdmi ? "/HDMI" : "");
>  
>  	devdata->child.device_type &= ~DEVICE_TYPE_TMDS_DVI_SIGNALING;
> @@ -2504,7 +2516,8 @@ static void sanitize_device_type(struct intel_bios_encoder_data *devdata,
>  static void sanitize_hdmi_level_shift(struct intel_bios_encoder_data *devdata,
>  				      enum port port)
>  {
> -	struct drm_i915_private *i915 = devdata->i915;
> +	struct intel_display *display = devdata->display;
> +	struct drm_i915_private *i915 = to_i915(display->drm);
>  
>  	if (!intel_bios_encoder_supports_dvi(devdata))
>  		return;
> @@ -2515,7 +2528,8 @@ static void sanitize_hdmi_level_shift(struct intel_bios_encoder_data *devdata,
>  	 * up to 11, whereas the BDW max is 9.
>  	 */
>  	if (IS_BROADWELL(i915) && devdata->child.hdmi_level_shifter_value > 9) {
> -		drm_dbg_kms(&i915->drm, "Bogus port %c VBT HDMI level shift %d, adjusting to %d\n",
> +		drm_dbg_kms(display->drm,
> +			    "Bogus port %c VBT HDMI level shift %d, adjusting to %d\n",
>  			    port_name(port), devdata->child.hdmi_level_shifter_value, 9);
>  
>  		devdata->child.hdmi_level_shifter_value = 9;
> @@ -2563,14 +2577,14 @@ intel_bios_encoder_supports_dsi(const struct intel_bios_encoder_data *devdata)
>  bool
>  intel_bios_encoder_is_lspcon(const struct intel_bios_encoder_data *devdata)
>  {
> -	return devdata && HAS_LSPCON(devdata->i915) && devdata->child.lspcon;
> +	return devdata && HAS_LSPCON(devdata->display) && devdata->child.lspcon;
>  }
>  
>  /* This is an index in the HDMI/DVI DDI buffer translation table, or -1 */
>  int intel_bios_hdmi_level_shift(const struct intel_bios_encoder_data *devdata)
>  {
> -	if (!devdata || devdata->i915->display.vbt.version < 158 ||
> -	    DISPLAY_VER(devdata->i915) >= 14)
> +	if (!devdata || devdata->display->vbt.version < 158 ||
> +	    DISPLAY_VER(devdata->display) >= 14)
>  		return -1;
>  
>  	return devdata->child.hdmi_level_shifter_value;
> @@ -2578,7 +2592,7 @@ int intel_bios_hdmi_level_shift(const struct intel_bios_encoder_data *devdata)
>  
>  int intel_bios_hdmi_max_tmds_clock(const struct intel_bios_encoder_data *devdata)
>  {
> -	if (!devdata || devdata->i915->display.vbt.version < 204)
> +	if (!devdata || devdata->display->vbt.version < 204)
>  		return 0;
>  
>  	switch (devdata->child.hdmi_max_data_rate) {
> @@ -2600,8 +2614,9 @@ int intel_bios_hdmi_max_tmds_clock(const struct intel_bios_encoder_data *devdata
>  	}
>  }
>  
> -static bool is_port_valid(struct drm_i915_private *i915, enum port port)
> +static bool is_port_valid(struct intel_display *display, enum port port)
>  {
> +	struct drm_i915_private *i915 = to_i915(display->drm);
>  	/*
>  	 * On some ICL SKUs port F is not present, but broken VBTs mark
>  	 * the port as present. Only try to initialize port F for the
> @@ -2615,7 +2630,7 @@ static bool is_port_valid(struct drm_i915_private *i915, enum port port)
>  
>  static void print_ddi_port(const struct intel_bios_encoder_data *devdata)
>  {
> -	struct drm_i915_private *i915 = devdata->i915;
> +	struct intel_display *display = devdata->display;
>  	const struct child_device_config *child = &devdata->child;
>  	bool is_dvi, is_hdmi, is_dp, is_edp, is_dsi, is_crt, supports_typec_usb, supports_tbt;
>  	int dp_boost_level, dp_max_link_rate, hdmi_boost_level, hdmi_level_shift, max_tmds_clock;
> @@ -2635,7 +2650,7 @@ static void print_ddi_port(const struct intel_bios_encoder_data *devdata)
>  	supports_typec_usb = intel_bios_encoder_supports_typec_usb(devdata);
>  	supports_tbt = intel_bios_encoder_supports_tbt(devdata);
>  
> -	drm_dbg_kms(&i915->drm,
> +	drm_dbg_kms(display->drm,
>  		    "Port %c VBT info: CRT:%d DVI:%d HDMI:%d DP:%d eDP:%d DSI:%d DP++:%d LSPCON:%d USB-Type-C:%d TBT:%d DSC:%d\n",
>  		    port_name(port), is_crt, is_dvi, is_hdmi, is_dp, is_edp, is_dsi,
>  		    intel_bios_encoder_supports_dp_dual_mode(devdata),
> @@ -2645,33 +2660,33 @@ static void print_ddi_port(const struct intel_bios_encoder_data *devdata)
>  
>  	hdmi_level_shift = intel_bios_hdmi_level_shift(devdata);
>  	if (hdmi_level_shift >= 0) {
> -		drm_dbg_kms(&i915->drm,
> +		drm_dbg_kms(display->drm,
>  			    "Port %c VBT HDMI level shift: %d\n",
>  			    port_name(port), hdmi_level_shift);
>  	}
>  
>  	max_tmds_clock = intel_bios_hdmi_max_tmds_clock(devdata);
>  	if (max_tmds_clock)
> -		drm_dbg_kms(&i915->drm,
> +		drm_dbg_kms(display->drm,
>  			    "Port %c VBT HDMI max TMDS clock: %d kHz\n",
>  			    port_name(port), max_tmds_clock);
>  
>  	/* I_boost config for SKL and above */
>  	dp_boost_level = intel_bios_dp_boost_level(devdata);
>  	if (dp_boost_level)
> -		drm_dbg_kms(&i915->drm,
> +		drm_dbg_kms(display->drm,
>  			    "Port %c VBT (e)DP boost level: %d\n",
>  			    port_name(port), dp_boost_level);
>  
>  	hdmi_boost_level = intel_bios_hdmi_boost_level(devdata);
>  	if (hdmi_boost_level)
> -		drm_dbg_kms(&i915->drm,
> +		drm_dbg_kms(display->drm,
>  			    "Port %c VBT HDMI boost level: %d\n",
>  			    port_name(port), hdmi_boost_level);
>  
>  	dp_max_link_rate = intel_bios_dp_max_link_rate(devdata);
>  	if (dp_max_link_rate)
> -		drm_dbg_kms(&i915->drm,
> +		drm_dbg_kms(display->drm,
>  			    "Port %c VBT DP max link rate: %d\n",
>  			    port_name(port), dp_max_link_rate);
>  
> @@ -2679,22 +2694,22 @@ static void print_ddi_port(const struct intel_bios_encoder_data *devdata)
>  	 * FIXME need to implement support for VBT
>  	 * vswing/preemph tables should this ever trigger.
>  	 */
> -	drm_WARN(&i915->drm, child->use_vbt_vswing,
> +	drm_WARN(display->drm, child->use_vbt_vswing,
>  		 "Port %c asks to use VBT vswing/preemph tables\n",
>  		 port_name(port));
>  }
>  
>  static void parse_ddi_port(struct intel_bios_encoder_data *devdata)
>  {
> -	struct drm_i915_private *i915 = devdata->i915;
> +	struct intel_display *display = devdata->display;
>  	enum port port;
>  
>  	port = intel_bios_encoder_port(devdata);
>  	if (port == PORT_NONE)
>  		return;
>  
> -	if (!is_port_valid(i915, port)) {
> -		drm_dbg_kms(&i915->drm,
> +	if (!is_port_valid(display, port)) {
> +		drm_dbg_kms(display->drm,
>  			    "VBT reports port %c as supported, but that can't be true: skipping\n",
>  			    port_name(port));
>  		return;
> @@ -2704,22 +2719,24 @@ static void parse_ddi_port(struct intel_bios_encoder_data *devdata)
>  	sanitize_hdmi_level_shift(devdata, port);
>  }
>  
> -static bool has_ddi_port_info(struct drm_i915_private *i915)
> +static bool has_ddi_port_info(struct intel_display *display)
>  {
> -	return DISPLAY_VER(i915) >= 5 || IS_G4X(i915);
> +	struct drm_i915_private *i915 = to_i915(display->drm);
> +
> +	return DISPLAY_VER(display) >= 5 || IS_G4X(i915);
>  }
>  
> -static void parse_ddi_ports(struct drm_i915_private *i915)
> +static void parse_ddi_ports(struct intel_display *display)
>  {
>  	struct intel_bios_encoder_data *devdata;
>  
> -	if (!has_ddi_port_info(i915))
> +	if (!has_ddi_port_info(display))
>  		return;
>  
> -	list_for_each_entry(devdata, &i915->display.vbt.display_devices, node)
> +	list_for_each_entry(devdata, &display->vbt.display_devices, node)
>  		parse_ddi_port(devdata);
>  
> -	list_for_each_entry(devdata, &i915->display.vbt.display_devices, node)
> +	list_for_each_entry(devdata, &display->vbt.display_devices, node)
>  		print_ddi_port(devdata);
>  }
>  
> @@ -2745,27 +2762,27 @@ static int child_device_expected_size(u16 version)
>  		return 22;
>  }
>  
> -static bool child_device_size_valid(struct drm_i915_private *i915, int size)
> +static bool child_device_size_valid(struct intel_display *display, int size)
>  {
>  	int expected_size;
>  
> -	expected_size = child_device_expected_size(i915->display.vbt.version);
> +	expected_size = child_device_expected_size(display->vbt.version);
>  	if (expected_size < 0) {
>  		expected_size = sizeof(struct child_device_config);
> -		drm_dbg(&i915->drm,
> +		drm_dbg(display->drm,
>  			"Expected child device config size for VBT version %u not known; assuming %d\n",
> -			i915->display.vbt.version, expected_size);
> +			display->vbt.version, expected_size);
>  	}
>  
>  	/* Flag an error for unexpected size, but continue anyway. */
>  	if (size != expected_size)
> -		drm_err(&i915->drm,
> +		drm_err(display->drm,
>  			"Unexpected child device config size %d (expected %d for VBT version %u)\n",
> -			size, expected_size, i915->display.vbt.version);
> +			size, expected_size, display->vbt.version);
>  
>  	/* The legacy sized child device config is the minimum we need. */
>  	if (size < LEGACY_CHILD_DEVICE_CONFIG_SIZE) {
> -		drm_dbg_kms(&i915->drm,
> +		drm_dbg_kms(display->drm,
>  			    "Child device config size %d is too small.\n",
>  			    size);
>  		return false;
> @@ -2775,8 +2792,9 @@ static bool child_device_size_valid(struct drm_i915_private *i915, int size)
>  }
>  
>  static void
> -parse_general_definitions(struct drm_i915_private *i915)
> +parse_general_definitions(struct intel_display *display)
>  {
> +	struct drm_i915_private *i915 = to_i915(display->drm);
>  	const struct bdb_general_definitions *defs;
>  	struct intel_bios_encoder_data *devdata;
>  	const struct child_device_config *child;
> @@ -2784,27 +2802,27 @@ parse_general_definitions(struct drm_i915_private *i915)
>  	u16 block_size;
>  	int bus_pin;
>  
> -	defs = bdb_find_section(i915, BDB_GENERAL_DEFINITIONS);
> +	defs = bdb_find_section(display, BDB_GENERAL_DEFINITIONS);
>  	if (!defs) {
> -		drm_dbg_kms(&i915->drm,
> +		drm_dbg_kms(display->drm,
>  			    "No general definition block is found, no devices defined.\n");
>  		return;
>  	}
>  
>  	block_size = get_blocksize(defs);
>  	if (block_size < sizeof(*defs)) {
> -		drm_dbg_kms(&i915->drm,
> +		drm_dbg_kms(display->drm,
>  			    "General definitions block too small (%u)\n",
>  			    block_size);
>  		return;
>  	}
>  
>  	bus_pin = defs->crt_ddc_gmbus_pin;
> -	drm_dbg_kms(&i915->drm, "crt_ddc_bus_pin: %d\n", bus_pin);
> +	drm_dbg_kms(display->drm, "crt_ddc_bus_pin: %d\n", bus_pin);
>  	if (intel_gmbus_is_valid_pin(i915, bus_pin))
> -		i915->display.vbt.crt_ddc_pin = bus_pin;
> +		display->vbt.crt_ddc_pin = bus_pin;
>  
> -	if (!child_device_size_valid(i915, defs->child_dev_size))
> +	if (!child_device_size_valid(display, defs->child_dev_size))
>  		return;
>  
>  	/* get the number of child device */
> @@ -2815,7 +2833,7 @@ parse_general_definitions(struct drm_i915_private *i915)
>  		if (!child->device_type)
>  			continue;
>  
> -		drm_dbg_kms(&i915->drm,
> +		drm_dbg_kms(display->drm,
>  			    "Found VBT child device with type 0x%x\n",
>  			    child->device_type);
>  
> @@ -2823,7 +2841,7 @@ parse_general_definitions(struct drm_i915_private *i915)
>  		if (!devdata)
>  			break;
>  
> -		devdata->i915 = i915;
> +		devdata->display = display;
>  
>  		/*
>  		 * Copy as much as we know (sizeof) and is available
> @@ -2833,37 +2851,39 @@ parse_general_definitions(struct drm_i915_private *i915)
>  		memcpy(&devdata->child, child,
>  		       min_t(size_t, defs->child_dev_size, sizeof(*child)));
>  
> -		list_add_tail(&devdata->node, &i915->display.vbt.display_devices);
> +		list_add_tail(&devdata->node, &display->vbt.display_devices);
>  	}
>  
> -	if (list_empty(&i915->display.vbt.display_devices))
> -		drm_dbg_kms(&i915->drm,
> +	if (list_empty(&display->vbt.display_devices))
> +		drm_dbg_kms(display->drm,
>  			    "no child dev is parsed from VBT\n");
>  }
>  
>  /* Common defaults which may be overridden by VBT. */
>  static void
> -init_vbt_defaults(struct drm_i915_private *i915)
> +init_vbt_defaults(struct intel_display *display)
>  {
> -	i915->display.vbt.crt_ddc_pin = GMBUS_PIN_VGADDC;
> +	struct drm_i915_private *i915 = to_i915(display->drm);
> +
> +	display->vbt.crt_ddc_pin = GMBUS_PIN_VGADDC;
>  
>  	/* general features */
> -	i915->display.vbt.int_tv_support = 1;
> -	i915->display.vbt.int_crt_support = 1;
> +	display->vbt.int_tv_support = 1;
> +	display->vbt.int_crt_support = 1;
>  
>  	/* driver features */
> -	i915->display.vbt.int_lvds_support = 1;
> +	display->vbt.int_lvds_support = 1;
>  
>  	/* Default to using SSC */
> -	i915->display.vbt.lvds_use_ssc = 1;
> +	display->vbt.lvds_use_ssc = 1;
>  	/*
>  	 * Core/SandyBridge/IvyBridge use alternative (120MHz) reference
>  	 * clock for LVDS.
>  	 */
> -	i915->display.vbt.lvds_ssc_freq = intel_bios_ssc_frequency(i915,
> -								   !HAS_PCH_SPLIT(i915));
> -	drm_dbg_kms(&i915->drm, "Set default to SSC at %d kHz\n",
> -		    i915->display.vbt.lvds_ssc_freq);
> +	display->vbt.lvds_ssc_freq = intel_bios_ssc_frequency(display,
> +							      !HAS_PCH_SPLIT(i915));
> +	drm_dbg_kms(display->drm, "Set default to SSC at %d kHz\n",
> +		    display->vbt.lvds_ssc_freq);
>  }
>  
>  /* Common defaults which may be overridden by VBT. */
> @@ -2879,12 +2899,13 @@ init_vbt_panel_defaults(struct intel_panel *panel)
>  
>  /* Defaults to initialize only if there is no VBT. */
>  static void
> -init_vbt_missing_defaults(struct drm_i915_private *i915)
> +init_vbt_missing_defaults(struct intel_display *display)
>  {
> -	unsigned int ports = DISPLAY_RUNTIME_INFO(i915)->port_mask;
> +	struct drm_i915_private *i915 = to_i915(display->drm);
> +	unsigned int ports = DISPLAY_RUNTIME_INFO(display)->port_mask;
>  	enum port port;
>  
> -	if (!HAS_DDI(i915) && !IS_CHERRYVIEW(i915))
> +	if (!HAS_DDI(display) && !IS_CHERRYVIEW(i915))
>  		return;
>  
>  	for_each_port_masked(port, ports) {
> @@ -2904,7 +2925,7 @@ init_vbt_missing_defaults(struct drm_i915_private *i915)
>  		if (!devdata)
>  			break;
>  
> -		devdata->i915 = i915;
> +		devdata->display = display;
>  		child = &devdata->child;
>  
>  		if (port == PORT_F)
> @@ -2923,15 +2944,15 @@ init_vbt_missing_defaults(struct drm_i915_private *i915)
>  		if (port == PORT_A)
>  			child->device_type |= DEVICE_TYPE_INTERNAL_CONNECTOR;
>  
> -		list_add_tail(&devdata->node, &i915->display.vbt.display_devices);
> +		list_add_tail(&devdata->node, &display->vbt.display_devices);
>  
> -		drm_dbg_kms(&i915->drm,
> +		drm_dbg_kms(display->drm,
>  			    "Generating default VBT child device with type 0x04%x on port %c\n",
>  			    child->device_type, port_name(port));
>  	}
>  
>  	/* Bypass some minimum baseline VBT version checks */
> -	i915->display.vbt.version = 155;
> +	display->vbt.version = 155;
>  }
>  
>  static const struct bdb_header *get_bdb_header(const struct vbt_header *vbt)
> @@ -2943,13 +2964,13 @@ static const struct bdb_header *get_bdb_header(const struct vbt_header *vbt)
>  
>  /**
>   * intel_bios_is_valid_vbt - does the given buffer contain a valid VBT
> - * @i915:	the device
> + * @display:	display device
>   * @buf:	pointer to a buffer to validate
>   * @size:	size of the buffer
>   *
>   * Returns true on valid VBT.
>   */
> -bool intel_bios_is_valid_vbt(struct drm_i915_private *i915,
> +bool intel_bios_is_valid_vbt(struct intel_display *display,
>  			     const void *buf, size_t size)
>  {
>  	const struct vbt_header *vbt = buf;
> @@ -2959,17 +2980,18 @@ bool intel_bios_is_valid_vbt(struct drm_i915_private *i915,
>  		return false;
>  
>  	if (sizeof(struct vbt_header) > size) {
> -		drm_dbg_kms(&i915->drm, "VBT header incomplete\n");
> +		drm_dbg_kms(display->drm, "VBT header incomplete\n");
>  		return false;
>  	}
>  
>  	if (memcmp(vbt->signature, "$VBT", 4)) {
> -		drm_dbg_kms(&i915->drm, "VBT invalid signature\n");
> +		drm_dbg_kms(display->drm, "VBT invalid signature\n");
>  		return false;
>  	}
>  
>  	if (vbt->vbt_size > size) {
> -		drm_dbg_kms(&i915->drm, "VBT incomplete (vbt_size overflows)\n");
> +		drm_dbg_kms(display->drm,
> +			    "VBT incomplete (vbt_size overflows)\n");
>  		return false;
>  	}
>  
> @@ -2979,48 +3001,48 @@ bool intel_bios_is_valid_vbt(struct drm_i915_private *i915,
>  			      vbt->bdb_offset,
>  			      sizeof(struct bdb_header),
>  			      size)) {
> -		drm_dbg_kms(&i915->drm, "BDB header incomplete\n");
> +		drm_dbg_kms(display->drm, "BDB header incomplete\n");
>  		return false;
>  	}
>  
>  	bdb = get_bdb_header(vbt);
>  	if (range_overflows_t(size_t, vbt->bdb_offset, bdb->bdb_size, size)) {
> -		drm_dbg_kms(&i915->drm, "BDB incomplete\n");
> +		drm_dbg_kms(display->drm, "BDB incomplete\n");
>  		return false;
>  	}
>  
>  	return vbt;
>  }
>  
> -static struct vbt_header *firmware_get_vbt(struct drm_i915_private *i915,
> +static struct vbt_header *firmware_get_vbt(struct intel_display *display,
>  					   size_t *size)
>  {
>  	struct vbt_header *vbt = NULL;
>  	const struct firmware *fw = NULL;
> -	const char *name = i915->display.params.vbt_firmware;
> +	const char *name = display->params.vbt_firmware;
>  	int ret;
>  
>  	if (!name || !*name)
>  		return NULL;
>  
> -	ret = request_firmware(&fw, name, i915->drm.dev);
> +	ret = request_firmware(&fw, name, display->drm->dev);
>  	if (ret) {
> -		drm_err(&i915->drm,
> +		drm_err(display->drm,
>  			"Requesting VBT firmware \"%s\" failed (%d)\n",
>  			name, ret);
>  		return NULL;
>  	}
>  
> -	if (intel_bios_is_valid_vbt(i915, fw->data, fw->size)) {
> +	if (intel_bios_is_valid_vbt(display, fw->data, fw->size)) {
>  		vbt = kmemdup(fw->data, fw->size, GFP_KERNEL);
>  		if (vbt) {
> -			drm_dbg_kms(&i915->drm,
> +			drm_dbg_kms(display->drm,
>  				    "Found valid VBT firmware \"%s\"\n", name);
>  			if (size)
>  				*size = fw->size;
>  		}
>  	} else {
> -		drm_dbg_kms(&i915->drm, "Invalid VBT firmware \"%s\"\n",
> +		drm_dbg_kms(display->drm, "Invalid VBT firmware \"%s\"\n",
>  			    name);
>  	}
>  
> @@ -3036,9 +3058,10 @@ static u32 intel_spi_read(struct intel_uncore *uncore, u32 offset)
>  	return intel_uncore_read(uncore, PRIMARY_SPI_TRIGGER);
>  }
>  
> -static struct vbt_header *spi_oprom_get_vbt(struct drm_i915_private *i915,
> +static struct vbt_header *spi_oprom_get_vbt(struct intel_display *display,
>  					    size_t *size)
>  {
> +	struct drm_i915_private *i915 = to_i915(display->drm);
>  	u32 count, data, found, store = 0;
>  	u32 static_region, oprom_offset;
>  	u32 oprom_size = 0x200000;
> @@ -3075,10 +3098,10 @@ static struct vbt_header *spi_oprom_get_vbt(struct drm_i915_private *i915,
>  	for (count = 0; count < vbt_size; count += 4)
>  		*(vbt + store++) = intel_spi_read(&i915->uncore, found + count);
>  
> -	if (!intel_bios_is_valid_vbt(i915, vbt, vbt_size))
> +	if (!intel_bios_is_valid_vbt(display, vbt, vbt_size))
>  		goto err_free_vbt;
>  
> -	drm_dbg_kms(&i915->drm, "Found valid VBT in SPI flash\n");
> +	drm_dbg_kms(display->drm, "Found valid VBT in SPI flash\n");
>  
>  	if (size)
>  		*size = vbt_size;
> @@ -3091,10 +3114,10 @@ static struct vbt_header *spi_oprom_get_vbt(struct drm_i915_private *i915,
>  	return NULL;
>  }
>  
> -static struct vbt_header *oprom_get_vbt(struct drm_i915_private *i915,
> +static struct vbt_header *oprom_get_vbt(struct intel_display *display,
>  					size_t *sizep)
>  {
> -	struct pci_dev *pdev = to_pci_dev(i915->drm.dev);
> +	struct pci_dev *pdev = to_pci_dev(display->drm->dev);
>  	void __iomem *p = NULL, *oprom;
>  	struct vbt_header *vbt;
>  	u16 vbt_size;
> @@ -3118,13 +3141,13 @@ static struct vbt_header *oprom_get_vbt(struct drm_i915_private *i915,
>  		goto err_unmap_oprom;
>  
>  	if (sizeof(struct vbt_header) > size) {
> -		drm_dbg(&i915->drm, "VBT header incomplete\n");
> +		drm_dbg(display->drm, "VBT header incomplete\n");
>  		goto err_unmap_oprom;
>  	}
>  
>  	vbt_size = ioread16(p + offsetof(struct vbt_header, vbt_size));
>  	if (vbt_size > size) {
> -		drm_dbg(&i915->drm,
> +		drm_dbg(display->drm,
>  			"VBT incomplete (vbt_size overflows)\n");
>  		goto err_unmap_oprom;
>  	}
> @@ -3136,7 +3159,7 @@ static struct vbt_header *oprom_get_vbt(struct drm_i915_private *i915,
>  
>  	memcpy_fromio(vbt, p, vbt_size);
>  
> -	if (!intel_bios_is_valid_vbt(i915, vbt, vbt_size))
> +	if (!intel_bios_is_valid_vbt(display, vbt, vbt_size))
>  		goto err_free_vbt;
>  
>  	pci_unmap_rom(pdev, oprom);
> @@ -3144,7 +3167,7 @@ static struct vbt_header *oprom_get_vbt(struct drm_i915_private *i915,
>  	if (sizep)
>  		*sizep = vbt_size;
>  
> -	drm_dbg_kms(&i915->drm, "Found valid VBT in PCI ROM\n");
> +	drm_dbg_kms(display->drm, "Found valid VBT in PCI ROM\n");
>  
>  	return vbt;
>  
> @@ -3156,14 +3179,14 @@ static struct vbt_header *oprom_get_vbt(struct drm_i915_private *i915,
>  	return NULL;
>  }
>  
> -static const struct vbt_header *intel_bios_get_vbt(struct drm_i915_private *i915,
> +static const struct vbt_header *intel_bios_get_vbt(struct intel_display *display,
>  						   size_t *sizep)
>  {
> -	struct intel_display *display = &i915->display;
> +	struct drm_i915_private *i915 = to_i915(display->drm);
>  	const struct vbt_header *vbt = NULL;
>  	intel_wakeref_t wakeref;
>  
> -	vbt = firmware_get_vbt(i915, sizep);
> +	vbt = firmware_get_vbt(display, sizep);
>  
>  	if (!vbt)
>  		vbt = intel_opregion_get_vbt(display, sizep);
> @@ -3174,76 +3197,77 @@ static const struct vbt_header *intel_bios_get_vbt(struct drm_i915_private *i915
>  	 */
>  	if (!vbt && IS_DGFX(i915))
>  		with_intel_runtime_pm(&i915->runtime_pm, wakeref)
> -			vbt = spi_oprom_get_vbt(i915, sizep);
> +			vbt = spi_oprom_get_vbt(display, sizep);
>  
>  	if (!vbt)
>  		with_intel_runtime_pm(&i915->runtime_pm, wakeref)
> -			vbt = oprom_get_vbt(i915, sizep);
> +			vbt = oprom_get_vbt(display, sizep);
>  
>  	return vbt;
>  }
>  
>  /**
>   * intel_bios_init - find VBT and initialize settings from the BIOS
> - * @i915: i915 device instance
> + * @display: display device instance
>   *
>   * Parse and initialize settings from the Video BIOS Tables (VBT). If the VBT
>   * was not found in ACPI OpRegion, try to find it in PCI ROM first. Also
>   * initialize some defaults if the VBT is not present at all.
>   */
> -void intel_bios_init(struct drm_i915_private *i915)
> +void intel_bios_init(struct intel_display *display)
>  {
>  	const struct vbt_header *vbt;
>  	const struct bdb_header *bdb;
>  
> -	INIT_LIST_HEAD(&i915->display.vbt.display_devices);
> -	INIT_LIST_HEAD(&i915->display.vbt.bdb_blocks);
> +	INIT_LIST_HEAD(&display->vbt.display_devices);
> +	INIT_LIST_HEAD(&display->vbt.bdb_blocks);
>  
> -	if (!HAS_DISPLAY(i915)) {
> -		drm_dbg_kms(&i915->drm,
> +	if (!HAS_DISPLAY(display)) {
> +		drm_dbg_kms(display->drm,
>  			    "Skipping VBT init due to disabled display.\n");
>  		return;
>  	}
>  
> -	init_vbt_defaults(i915);
> +	init_vbt_defaults(display);
>  
> -	vbt = intel_bios_get_vbt(i915, NULL);
> +	vbt = intel_bios_get_vbt(display, NULL);
>  
>  	if (!vbt)
>  		goto out;
>  
>  	bdb = get_bdb_header(vbt);
> -	i915->display.vbt.version = bdb->version;
> +	display->vbt.version = bdb->version;
>  
> -	drm_dbg_kms(&i915->drm,
> +	drm_dbg_kms(display->drm,
>  		    "VBT signature \"%.*s\", BDB version %d\n",
> -		    (int)sizeof(vbt->signature), vbt->signature, i915->display.vbt.version);
> +		    (int)sizeof(vbt->signature), vbt->signature,
> +		    display->vbt.version);
>  
> -	init_bdb_blocks(i915, bdb);
> +	init_bdb_blocks(display, bdb);
>  
>  	/* Grab useful general definitions */
> -	parse_general_features(i915);
> -	parse_general_definitions(i915);
> -	parse_driver_features(i915);
> +	parse_general_features(display);
> +	parse_general_definitions(display);
> +	parse_driver_features(display);
>  
>  	/* Depends on child device list */
> -	parse_compression_parameters(i915);
> +	parse_compression_parameters(display);
>  
>  out:
>  	if (!vbt) {
> -		drm_info(&i915->drm,
> +		drm_info(display->drm,
>  			 "Failed to find VBIOS tables (VBT)\n");
> -		init_vbt_missing_defaults(i915);
> +		init_vbt_missing_defaults(display);
>  	}
>  
>  	/* Further processing on pre-parsed or generated child device data */
> -	parse_sdvo_device_mapping(i915);
> -	parse_ddi_ports(i915);
> +	parse_sdvo_device_mapping(display);
> +	parse_ddi_ports(display);
>  
>  	kfree(vbt);
>  }
>  
> -static void intel_bios_init_panel(struct drm_i915_private *i915,
> +static void intel_bios_init_panel(struct intel_display *display,
>  				  struct intel_panel *panel,
>  				  const struct intel_bios_encoder_data *devdata,
>  				  const struct drm_edid *drm_edid,
> @@ -3251,63 +3275,64 @@ static void intel_bios_init_panel(struct drm_i915_private *i915,
>  {
>  	/* already have it? */
>  	if (panel->vbt.panel_type >= 0) {
> -		drm_WARN_ON(&i915->drm, !use_fallback);
> +		drm_WARN_ON(display->drm, !use_fallback);
>  		return;
>  	}
>  
> -	panel->vbt.panel_type = get_panel_type(i915, devdata,
> +	panel->vbt.panel_type = get_panel_type(display, devdata,
>  					       drm_edid, use_fallback);
>  	if (panel->vbt.panel_type < 0) {
> -		drm_WARN_ON(&i915->drm, use_fallback);
> +		drm_WARN_ON(display->drm, use_fallback);
>  		return;
>  	}
>  
>  	init_vbt_panel_defaults(panel);
>  
> -	parse_panel_options(i915, panel);
> -	parse_generic_dtd(i915, panel);
> -	parse_lfp_data(i915, panel);
> -	parse_lfp_backlight(i915, panel);
> -	parse_sdvo_lvds_data(i915, panel);
> -	parse_panel_driver_features(i915, panel);
> -	parse_power_conservation_features(i915, panel);
> -	parse_edp(i915, panel);
> -	parse_psr(i915, panel);
> -	parse_mipi_config(i915, panel);
> -	parse_mipi_sequence(i915, panel);
> +	parse_panel_options(display, panel);
> +	parse_generic_dtd(display, panel);
> +	parse_lfp_data(display, panel);
> +	parse_lfp_backlight(display, panel);
> +	parse_sdvo_lvds_data(display, panel);
> +	parse_panel_driver_features(display, panel);
> +	parse_power_conservation_features(display, panel);
> +	parse_edp(display, panel);
> +	parse_psr(display, panel);
> +	parse_mipi_config(display, panel);
> +	parse_mipi_sequence(display, panel);
>  }
>  
> -void intel_bios_init_panel_early(struct drm_i915_private *i915,
> +void intel_bios_init_panel_early(struct intel_display *display,
>  				 struct intel_panel *panel,
>  				 const struct intel_bios_encoder_data *devdata)
>  {
> -	intel_bios_init_panel(i915, panel, devdata, NULL, false);
> +	intel_bios_init_panel(display, panel, devdata, NULL, false);
>  }
>  
> -void intel_bios_init_panel_late(struct drm_i915_private *i915,
> +void intel_bios_init_panel_late(struct intel_display *display,
>  				struct intel_panel *panel,
>  				const struct intel_bios_encoder_data *devdata,
>  				const struct drm_edid *drm_edid)
>  {
> -	intel_bios_init_panel(i915, panel, devdata, drm_edid, true);
> +	intel_bios_init_panel(display, panel, devdata, drm_edid, true);
>  }
>  
>  /**
>   * intel_bios_driver_remove - Free any resources allocated by intel_bios_init()
> - * @i915: i915 device instance
> + * @display: display device instance
>   */
> -void intel_bios_driver_remove(struct drm_i915_private *i915)
> +void intel_bios_driver_remove(struct intel_display *display)
>  {
>  	struct intel_bios_encoder_data *devdata, *nd;
>  	struct bdb_block_entry *entry, *ne;
>  
> -	list_for_each_entry_safe(devdata, nd, &i915->display.vbt.display_devices, node) {
> +	list_for_each_entry_safe(devdata, nd, &display->vbt.display_devices,
> +				 node) {
>  		list_del(&devdata->node);
>  		kfree(devdata->dsc);
>  		kfree(devdata);
>  	}
>  
> -	list_for_each_entry_safe(entry, ne, &i915->display.vbt.bdb_blocks, node) {
> +	list_for_each_entry_safe(entry, ne, &display->vbt.bdb_blocks, node) {
>  		list_del(&entry->node);
>  		kfree(entry);
>  	}
> @@ -3331,22 +3356,22 @@ void intel_bios_fini_panel(struct intel_panel *panel)
>  
>  /**
>   * intel_bios_is_tv_present - is integrated TV present in VBT
> - * @i915: i915 device instance
> + * @display: display device instance
>   *
>   * Return true if TV is present. If no child devices were parsed from VBT,
>   * assume TV is present.
>   */
> -bool intel_bios_is_tv_present(struct drm_i915_private *i915)
> +bool intel_bios_is_tv_present(struct intel_display *display)
>  {
>  	const struct intel_bios_encoder_data *devdata;
>  
> -	if (!i915->display.vbt.int_tv_support)
> +	if (!display->vbt.int_tv_support)
>  		return false;
>  
> -	if (list_empty(&i915->display.vbt.display_devices))
> +	if (list_empty(&display->vbt.display_devices))
>  		return true;
>  
> -	list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) {
> +	list_for_each_entry(devdata, &display->vbt.display_devices, node) {
>  		const struct child_device_config *child = &devdata->child;
>  
>  		/*
> @@ -3372,21 +3397,21 @@ bool intel_bios_is_tv_present(struct drm_i915_private *i915)
>  
>  /**
>   * intel_bios_is_lvds_present - is LVDS present in VBT
> - * @i915:	i915 device instance
> + * @display: display device instance
>   * @i2c_pin:	i2c pin for LVDS if present
>   *
>   * Return true if LVDS is present. If no child devices were parsed from VBT,
>   * assume LVDS is present.
>   */
> -bool intel_bios_is_lvds_present(struct drm_i915_private *i915, u8 *i2c_pin)
> +bool intel_bios_is_lvds_present(struct intel_display *display, u8 *i2c_pin)
>  {
> -	struct intel_display *display = &i915->display;
> +	struct drm_i915_private *i915 = to_i915(display->drm);
>  	const struct intel_bios_encoder_data *devdata;
>  
> -	if (list_empty(&i915->display.vbt.display_devices))
> +	if (list_empty(&display->vbt.display_devices))
>  		return true;
>  
> -	list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) {
> +	list_for_each_entry(devdata, &display->vbt.display_devices, node) {
>  		const struct child_device_config *child = &devdata->child;
>  
>  		/* If the device type is not LFP, continue.
> @@ -3421,25 +3446,25 @@ bool intel_bios_is_lvds_present(struct drm_i915_private *i915, u8 *i2c_pin)
>  
>  /**
>   * intel_bios_is_port_present - is the specified digital port present
> - * @i915:	i915 device instance
> + * @display: display device instance
>   * @port:	port to check
>   *
>   * Return true if the device in %port is present.
>   */
> -bool intel_bios_is_port_present(struct drm_i915_private *i915, enum port port)
> +bool intel_bios_is_port_present(struct intel_display *display, enum port port)
>  {
>  	const struct intel_bios_encoder_data *devdata;
>  
> -	if (WARN_ON(!has_ddi_port_info(i915)))
> +	if (WARN_ON(!has_ddi_port_info(display)))
>  		return true;
>  
> -	if (!is_port_valid(i915, port))
> +	if (!is_port_valid(display, port))
>  		return false;
>  
> -	list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) {
> +	list_for_each_entry(devdata, &display->vbt.display_devices, node) {
>  		const struct child_device_config *child = &devdata->child;
>  
> -		if (dvo_port_to_port(i915, child->dvo_port) == port)
> +		if (dvo_port_to_port(display, child->dvo_port) == port)
>  			return true;
>  	}
>  
> @@ -3470,32 +3495,32 @@ bool intel_bios_encoder_supports_dp_dual_mode(const struct intel_bios_encoder_da
>  
>  /**
>   * intel_bios_is_dsi_present - is DSI present in VBT
> - * @i915:	i915 device instance
> + * @display: display device instance
>   * @port:	port for DSI if present
>   *
>   * Return true if DSI is present, and return the port in %port.
>   */
> -bool intel_bios_is_dsi_present(struct drm_i915_private *i915,
> +bool intel_bios_is_dsi_present(struct intel_display *display,
>  			       enum port *port)
>  {
>  	const struct intel_bios_encoder_data *devdata;
>  
> -	list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) {
> +	list_for_each_entry(devdata, &display->vbt.display_devices, node) {
>  		const struct child_device_config *child = &devdata->child;
>  		u8 dvo_port = child->dvo_port;
>  
>  		if (!(child->device_type & DEVICE_TYPE_MIPI_OUTPUT))
>  			continue;
>  
> -		if (dsi_dvo_port_to_port(i915, dvo_port) == PORT_NONE) {
> -			drm_dbg_kms(&i915->drm,
> +		if (dsi_dvo_port_to_port(display, dvo_port) == PORT_NONE) {
> +			drm_dbg_kms(display->drm,
>  				    "VBT has unsupported DSI port %c\n",
>  				    port_name(dvo_port - DVO_PORT_MIPIA));
>  			continue;
>  		}
>  
>  		if (port)
> -			*port = dsi_dvo_port_to_port(i915, dvo_port);
> +			*port = dsi_dvo_port_to_port(display, dvo_port);
>  		return true;
>  	}
>  
> @@ -3506,7 +3531,7 @@ static void fill_dsc(struct intel_crtc_state *crtc_state,
>  		     struct dsc_compression_parameters_entry *dsc,
>  		     int dsc_max_bpc)
>  {
> -	struct drm_i915_private *i915 = to_i915(crtc_state->uapi.crtc->dev);
> +	struct intel_display *display = to_intel_display(crtc_state);
>  	struct drm_dsc_config *vdsc_cfg = &crtc_state->dsc.config;
>  	int bpc = 8;
>  
> @@ -3520,7 +3545,7 @@ static void fill_dsc(struct intel_crtc_state *crtc_state,
>  	else if (dsc->support_8bpc && dsc_max_bpc >= 8)
>  		bpc = 8;
>  	else
> -		drm_dbg_kms(&i915->drm, "VBT: Unsupported BPC %d for DCS\n",
> +		drm_dbg_kms(display->drm, "VBT: Unsupported BPC %d for DCS\n",
>  			    dsc_max_bpc);
>  
>  	crtc_state->pipe_bpp = bpc * 3;
> @@ -3541,14 +3566,16 @@ static void fill_dsc(struct intel_crtc_state *crtc_state,
>  	} else {
>  		/* FIXME */
>  		if (!(dsc->slices_per_line & BIT(0)))
> -			drm_dbg_kms(&i915->drm, "VBT: Unsupported DSC slice count for DSI\n");
> +			drm_dbg_kms(display->drm,
> +				    "VBT: Unsupported DSC slice count for DSI\n");
>  
>  		crtc_state->dsc.slice_count = 1;
>  	}
>  
>  	if (crtc_state->hw.adjusted_mode.crtc_hdisplay %
>  	    crtc_state->dsc.slice_count != 0)
> -		drm_dbg_kms(&i915->drm, "VBT: DSC hdisplay %d not divisible by slice count %d\n",
> +		drm_dbg_kms(display->drm,
> +			    "VBT: DSC hdisplay %d not divisible by slice count %d\n",
>  			    crtc_state->hw.adjusted_mode.crtc_hdisplay,
>  			    crtc_state->dsc.slice_count);
>  
> @@ -3572,16 +3599,16 @@ bool intel_bios_get_dsc_params(struct intel_encoder *encoder,
>  			       struct intel_crtc_state *crtc_state,
>  			       int dsc_max_bpc)
>  {
> -	struct drm_i915_private *i915 = to_i915(encoder->base.dev);
> +	struct intel_display *display = to_intel_display(encoder);
>  	const struct intel_bios_encoder_data *devdata;
>  
> -	list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) {
> +	list_for_each_entry(devdata, &display->vbt.display_devices, node) {
>  		const struct child_device_config *child = &devdata->child;
>  
>  		if (!(child->device_type & DEVICE_TYPE_MIPI_OUTPUT))
>  			continue;
>  
> -		if (dsi_dvo_port_to_port(i915, child->dvo_port) == encoder->port) {
> +		if (dsi_dvo_port_to_port(display, child->dvo_port) == encoder->port) {
>  			if (!devdata->dsc)
>  				return false;
>  
> @@ -3641,12 +3668,13 @@ static const u8 direct_aux_ch_map[] = {
>  	[AUX_CH_I] = DP_AUX_I, /* aka AUX_CH_USBC6 */
>  };
>  
> -static enum aux_ch map_aux_ch(struct drm_i915_private *i915, u8 aux_channel)
> +static enum aux_ch map_aux_ch(struct intel_display *display, u8 aux_channel)
>  {
> +	struct drm_i915_private *i915 = to_i915(display->drm);
>  	const u8 *aux_ch_map;
>  	int i, n_entries;
>  
> -	if (DISPLAY_VER(i915) >= 13) {
> +	if (DISPLAY_VER(display) >= 13) {
>  		aux_ch_map = adlp_aux_ch_map;
>  		n_entries = ARRAY_SIZE(adlp_aux_ch_map);
>  	} else if (IS_ALDERLAKE_S(i915)) {
> @@ -3665,7 +3693,7 @@ static enum aux_ch map_aux_ch(struct drm_i915_private *i915, u8 aux_channel)
>  			return i;
>  	}
>  
> -	drm_dbg_kms(&i915->drm,
> +	drm_dbg_kms(display->drm,
>  		    "Ignoring alternate AUX CH: VBT claims AUX 0x%x, which is not valid for this platform\n",
>  		    aux_channel);
>  
> @@ -3677,22 +3705,22 @@ enum aux_ch intel_bios_dp_aux_ch(const struct intel_bios_encoder_data *devdata)
>  	if (!devdata || !devdata->child.aux_channel)
>  		return AUX_CH_NONE;
>  
> -	return map_aux_ch(devdata->i915, devdata->child.aux_channel);
> +	return map_aux_ch(devdata->display, devdata->child.aux_channel);
>  }
>  
>  bool intel_bios_dp_has_shared_aux_ch(const struct intel_bios_encoder_data *devdata)
>  {
> -	struct drm_i915_private *i915;
> +	struct intel_display *display;
>  	u8 aux_channel;
>  	int count = 0;
>  
>  	if (!devdata || !devdata->child.aux_channel)
>  		return false;
>  
> -	i915 = devdata->i915;
> +	display = devdata->display;
>  	aux_channel = devdata->child.aux_channel;
>  
> -	list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) {
> +	list_for_each_entry(devdata, &display->vbt.display_devices, node) {
>  		if (intel_bios_encoder_supports_dp(devdata) &&
>  		    aux_channel == devdata->child.aux_channel)
>  			count++;
> @@ -3703,18 +3731,18 @@ bool intel_bios_dp_has_shared_aux_ch(const struct intel_bios_encoder_data *devda
>  
>  int intel_bios_dp_boost_level(const struct intel_bios_encoder_data *devdata)
>  {
> -	if (!devdata || devdata->i915->display.vbt.version < 196 || !devdata->child.iboost)
> +	if (!devdata || devdata->display->vbt.version < 196 || !devdata->child.iboost)
>  		return 0;
>  
> -	return translate_iboost(devdata->i915, devdata->child.dp_iboost_level);
> +	return translate_iboost(devdata->display, devdata->child.dp_iboost_level);
>  }
>  
>  int intel_bios_hdmi_boost_level(const struct intel_bios_encoder_data *devdata)
>  {
> -	if (!devdata || devdata->i915->display.vbt.version < 196 || !devdata->child.iboost)
> +	if (!devdata || devdata->display->vbt.version < 196 || !devdata->child.iboost)
>  		return 0;
>  
> -	return translate_iboost(devdata->i915, devdata->child.hdmi_iboost_level);
> +	return translate_iboost(devdata->display, devdata->child.hdmi_iboost_level);
>  }
>  
>  int intel_bios_hdmi_ddc_pin(const struct intel_bios_encoder_data *devdata)
> @@ -3722,17 +3750,17 @@ int intel_bios_hdmi_ddc_pin(const struct intel_bios_encoder_data *devdata)
>  	if (!devdata || !devdata->child.ddc_pin)
>  		return 0;
>  
> -	return map_ddc_pin(devdata->i915, devdata->child.ddc_pin);
> +	return map_ddc_pin(devdata->display, devdata->child.ddc_pin);
>  }
>  
>  bool intel_bios_encoder_supports_typec_usb(const struct intel_bios_encoder_data *devdata)
>  {
> -	return devdata->i915->display.vbt.version >= 195 && devdata->child.dp_usb_type_c;
> +	return devdata->display->vbt.version >= 195 && devdata->child.dp_usb_type_c;
>  }
>  
>  bool intel_bios_encoder_supports_tbt(const struct intel_bios_encoder_data *devdata)
>  {
> -	return devdata->i915->display.vbt.version >= 209 && devdata->child.tbt;
> +	return devdata->display->vbt.version >= 209 && devdata->child.tbt;
>  }
>  
>  bool intel_bios_encoder_lane_reversal(const struct intel_bios_encoder_data *devdata)
> @@ -3746,11 +3774,11 @@ bool intel_bios_encoder_hpd_invert(const struct intel_bios_encoder_data *devdata
>  }
>  
>  const struct intel_bios_encoder_data *
> -intel_bios_encoder_data_lookup(struct drm_i915_private *i915, enum port port)
> +intel_bios_encoder_data_lookup(struct intel_display *display, enum port port)
>  {
>  	struct intel_bios_encoder_data *devdata;
>  
> -	list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) {
> +	list_for_each_entry(devdata, &display->vbt.display_devices, node) {
>  		if (intel_bios_encoder_port(devdata) == port)
>  			return devdata;
>  	}
> @@ -3758,23 +3786,23 @@ intel_bios_encoder_data_lookup(struct drm_i915_private *i915, enum port port)
>  	return NULL;
>  }
>  
> -void intel_bios_for_each_encoder(struct drm_i915_private *i915,
> -				 void (*func)(struct drm_i915_private *i915,
> +void intel_bios_for_each_encoder(struct intel_display *display,
> +				 void (*func)(struct intel_display *display,
>  					      const struct intel_bios_encoder_data *devdata))
>  {
>  	struct intel_bios_encoder_data *devdata;
>  
> -	list_for_each_entry(devdata, &i915->display.vbt.display_devices, node)
> -		func(i915, devdata);
> +	list_for_each_entry(devdata, &display->vbt.display_devices, node)
> +		func(display, devdata);
>  }
>  
>  static int intel_bios_vbt_show(struct seq_file *m, void *unused)
>  {
> -	struct drm_i915_private *i915 = m->private;
> +	struct intel_display *display = m->private;
>  	const void *vbt;
>  	size_t vbt_size;
>  
> -	vbt = intel_bios_get_vbt(i915, &vbt_size);
> +	vbt = intel_bios_get_vbt(display, &vbt_size);
>  
>  	if (vbt) {
>  		seq_write(m, vbt, vbt_size);
> @@ -3786,10 +3814,10 @@ static int intel_bios_vbt_show(struct seq_file *m, void *unused)
>  
>  DEFINE_SHOW_ATTRIBUTE(intel_bios_vbt);
>  
> -void intel_bios_debugfs_register(struct drm_i915_private *i915)
> +void intel_bios_debugfs_register(struct intel_display *display)
>  {
> -	struct drm_minor *minor = i915->drm.primary;
> +	struct drm_minor *minor = display->drm->primary;
>  
>  	debugfs_create_file("i915_vbt", 0444, minor->debugfs_root,
> -			    i915, &intel_bios_vbt_fops);
> +			    display, &intel_bios_vbt_fops);
>  }
> diff --git a/drivers/gpu/drm/i915/display/intel_bios.h b/drivers/gpu/drm/i915/display/intel_bios.h
> index 06a51be4afd8..8b703f6cfe17 100644
> --- a/drivers/gpu/drm/i915/display/intel_bios.h
> +++ b/drivers/gpu/drm/i915/display/intel_bios.h
> @@ -33,9 +33,9 @@
>  #include <linux/types.h>
>  
>  struct drm_edid;
> -struct drm_i915_private;
>  struct intel_bios_encoder_data;
>  struct intel_crtc_state;
> +struct intel_display;
>  struct intel_encoder;
>  struct intel_panel;
>  enum aux_ch;
> @@ -232,28 +232,28 @@ struct mipi_pps_data {
>  	u16 panel_power_cycle_delay;
>  } __packed;
>  
> -void intel_bios_init(struct drm_i915_private *dev_priv);
> -void intel_bios_init_panel_early(struct drm_i915_private *dev_priv,
> +void intel_bios_init(struct intel_display *display);
> +void intel_bios_init_panel_early(struct intel_display *display,
>  				 struct intel_panel *panel,
>  				 const struct intel_bios_encoder_data *devdata);
> -void intel_bios_init_panel_late(struct drm_i915_private *dev_priv,
> +void intel_bios_init_panel_late(struct intel_display *display,
>  				struct intel_panel *panel,
>  				const struct intel_bios_encoder_data *devdata,
>  				const struct drm_edid *drm_edid);
>  void intel_bios_fini_panel(struct intel_panel *panel);
> -void intel_bios_driver_remove(struct drm_i915_private *dev_priv);
> -bool intel_bios_is_valid_vbt(struct drm_i915_private *i915,
> +void intel_bios_driver_remove(struct intel_display *display);
> +bool intel_bios_is_valid_vbt(struct intel_display *display,
>  			     const void *buf, size_t size);
> -bool intel_bios_is_tv_present(struct drm_i915_private *dev_priv);
> -bool intel_bios_is_lvds_present(struct drm_i915_private *dev_priv, u8 *i2c_pin);
> -bool intel_bios_is_port_present(struct drm_i915_private *dev_priv, enum port port);
> -bool intel_bios_is_dsi_present(struct drm_i915_private *dev_priv, enum port *port);
> +bool intel_bios_is_tv_present(struct intel_display *display);
> +bool intel_bios_is_lvds_present(struct intel_display *display, u8 *i2c_pin);
> +bool intel_bios_is_port_present(struct intel_display *display, enum port port);
> +bool intel_bios_is_dsi_present(struct intel_display *display, enum port *port);
>  bool intel_bios_get_dsc_params(struct intel_encoder *encoder,
>  			       struct intel_crtc_state *crtc_state,
>  			       int dsc_max_bpc);
>  
>  const struct intel_bios_encoder_data *
> -intel_bios_encoder_data_lookup(struct drm_i915_private *i915, enum port port);
> +intel_bios_encoder_data_lookup(struct intel_display *display, enum port port);
>  
>  bool intel_bios_encoder_supports_dvi(const struct intel_bios_encoder_data *devdata);
>  bool intel_bios_encoder_supports_hdmi(const struct intel_bios_encoder_data *devdata);
> @@ -277,10 +277,10 @@ int intel_bios_hdmi_ddc_pin(const struct intel_bios_encoder_data *devdata);
>  int intel_bios_hdmi_level_shift(const struct intel_bios_encoder_data *devdata);
>  int intel_bios_hdmi_max_tmds_clock(const struct intel_bios_encoder_data *devdata);
>  
> -void intel_bios_for_each_encoder(struct drm_i915_private *i915,
> -				 void (*func)(struct drm_i915_private *i915,
> +void intel_bios_for_each_encoder(struct intel_display *display,
> +				 void (*func)(struct intel_display *display,
>  					      const struct intel_bios_encoder_data *devdata));
>  
> -void intel_bios_debugfs_register(struct drm_i915_private *i915);
> +void intel_bios_debugfs_register(struct intel_display *display);
>  
>  #endif /* _INTEL_BIOS_H_ */
> diff --git a/drivers/gpu/drm/i915/display/intel_combo_phy.c b/drivers/gpu/drm/i915/display/intel_combo_phy.c
> index 143d66951631..3252dab56430 100644
> --- a/drivers/gpu/drm/i915/display/intel_combo_phy.c
> +++ b/drivers/gpu/drm/i915/display/intel_combo_phy.c
> @@ -159,9 +159,11 @@ static bool icl_combo_phy_enabled(struct drm_i915_private *dev_priv,
>  
>  static bool ehl_vbt_ddi_d_present(struct drm_i915_private *i915)
>  {
> -	bool ddi_a_present = intel_bios_is_port_present(i915, PORT_A);
> -	bool ddi_d_present = intel_bios_is_port_present(i915, PORT_D);
> -	bool dsi_present = intel_bios_is_dsi_present(i915, NULL);
> +	struct intel_display *display = &i915->display;
> +
> +	bool ddi_a_present = intel_bios_is_port_present(display, PORT_A);
> +	bool ddi_d_present = intel_bios_is_port_present(display, PORT_D);
> +	bool dsi_present = intel_bios_is_dsi_present(display, NULL);
>  
>  	/*
>  	 * VBT's 'dvo port' field for child devices references the DDI, not
> diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
> index a07aca96e551..7414d767b8dc 100644
> --- a/drivers/gpu/drm/i915/display/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/display/intel_ddi.c
> @@ -4853,9 +4853,10 @@ static bool port_in_use(struct drm_i915_private *i915, enum port port)
>  	return false;
>  }
>  
> -void intel_ddi_init(struct drm_i915_private *dev_priv,
> +void intel_ddi_init(struct intel_display *display,
>  		    const struct intel_bios_encoder_data *devdata)
>  {
> +	struct drm_i915_private *dev_priv = to_i915(display->drm);
>  	struct intel_digital_port *dig_port;
>  	struct intel_encoder *encoder;
>  	bool init_hdmi, init_dp;
> diff --git a/drivers/gpu/drm/i915/display/intel_ddi.h b/drivers/gpu/drm/i915/display/intel_ddi.h
> index 434de7196875..6d85422bdefe 100644
> --- a/drivers/gpu/drm/i915/display/intel_ddi.h
> +++ b/drivers/gpu/drm/i915/display/intel_ddi.h
> @@ -15,6 +15,7 @@ struct intel_bios_encoder_data;
>  struct intel_connector;
>  struct intel_crtc;
>  struct intel_crtc_state;
> +struct intel_display;
>  struct intel_dp;
>  struct intel_dpll_hw_state;
>  struct intel_encoder;
> @@ -53,7 +54,7 @@ void hsw_prepare_dp_ddi_buffers(struct intel_encoder *encoder,
>  				const struct intel_crtc_state *crtc_state);
>  void intel_wait_ddi_buf_idle(struct drm_i915_private *dev_priv,
>  			     enum port port);
> -void intel_ddi_init(struct drm_i915_private *dev_priv,
> +void intel_ddi_init(struct intel_display *display,
>  		    const struct intel_bios_encoder_data *devdata);
>  bool intel_ddi_get_hw_state(struct intel_encoder *encoder, enum pipe *pipe);
>  void intel_ddi_enable_transcoder_func(struct intel_encoder *encoder,
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> index 01a5faa3fea5..48241075eeba 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -7785,6 +7785,7 @@ bool assert_port_valid(struct drm_i915_private *i915, enum port port)
>  
>  void intel_setup_outputs(struct drm_i915_private *dev_priv)
>  {
> +	struct intel_display *display = &dev_priv->display;
>  	struct intel_encoder *encoder;
>  	bool dpd_is_edp = false;
>  
> @@ -7797,7 +7798,7 @@ void intel_setup_outputs(struct drm_i915_private *dev_priv)
>  		if (intel_ddi_crt_present(dev_priv))
>  			intel_crt_init(dev_priv);
>  
> -		intel_bios_for_each_encoder(dev_priv, intel_ddi_init);
> +		intel_bios_for_each_encoder(display, intel_ddi_init);
>  
>  		if (IS_GEMINILAKE(dev_priv) || IS_BROXTON(dev_priv))
>  			vlv_dsi_init(dev_priv);
> @@ -7859,14 +7860,14 @@ void intel_setup_outputs(struct drm_i915_private *dev_priv)
>  		 * HDMI ports that the VBT claim are DP or eDP.
>  		 */
>  		has_edp = intel_dp_is_port_edp(dev_priv, PORT_B);
> -		has_port = intel_bios_is_port_present(dev_priv, PORT_B);
> +		has_port = intel_bios_is_port_present(display, PORT_B);
>  		if (intel_de_read(dev_priv, VLV_DP_B) & DP_DETECTED || has_port)
>  			has_edp &= g4x_dp_init(dev_priv, VLV_DP_B, PORT_B);
>  		if ((intel_de_read(dev_priv, VLV_HDMIB) & SDVO_DETECTED || has_port) && !has_edp)
>  			g4x_hdmi_init(dev_priv, VLV_HDMIB, PORT_B);
>  
>  		has_edp = intel_dp_is_port_edp(dev_priv, PORT_C);
> -		has_port = intel_bios_is_port_present(dev_priv, PORT_C);
> +		has_port = intel_bios_is_port_present(display, PORT_C);
>  		if (intel_de_read(dev_priv, VLV_DP_C) & DP_DETECTED || has_port)
>  			has_edp &= g4x_dp_init(dev_priv, VLV_DP_C, PORT_C);
>  		if ((intel_de_read(dev_priv, VLV_HDMIC) & SDVO_DETECTED || has_port) && !has_edp)
> @@ -7877,7 +7878,7 @@ void intel_setup_outputs(struct drm_i915_private *dev_priv)
>  			 * eDP not supported on port D,
>  			 * so no need to worry about it
>  			 */
> -			has_port = intel_bios_is_port_present(dev_priv, PORT_D);
> +			has_port = intel_bios_is_port_present(display, PORT_D);
>  			if (intel_de_read(dev_priv, CHV_DP_D) & DP_DETECTED || has_port)
>  				g4x_dp_init(dev_priv, CHV_DP_D, PORT_D);
>  			if (intel_de_read(dev_priv, CHV_HDMID) & SDVO_DETECTED || has_port)
> diff --git a/drivers/gpu/drm/i915/display/intel_display_debugfs.c b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
> index ac8ad4a40b96..a55c9fac1ca4 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_debugfs.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
> @@ -1061,7 +1061,7 @@ void intel_display_debugfs_register(struct drm_i915_private *i915)
>  				 ARRAY_SIZE(intel_display_debugfs_list),
>  				 minor->debugfs_root, minor);
>  
> -	intel_bios_debugfs_register(i915);
> +	intel_bios_debugfs_register(display);
>  	intel_cdclk_debugfs_register(i915);
>  	intel_dmc_debugfs_register(i915);
>  	intel_fbc_debugfs_register(display);
> diff --git a/drivers/gpu/drm/i915/display/intel_display_driver.c b/drivers/gpu/drm/i915/display/intel_display_driver.c
> index a2666b69834e..328d8b5a6b66 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_driver.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_driver.c
> @@ -217,7 +217,7 @@ int intel_display_driver_probe_noirq(struct drm_i915_private *i915)
>  			return ret;
>  	}
>  
> -	intel_bios_init(i915);
> +	intel_bios_init(display);
>  
>  	ret = intel_vga_register(i915);
>  	if (ret)
> @@ -275,7 +275,7 @@ int intel_display_driver_probe_noirq(struct drm_i915_private *i915)
>  cleanup_vga:
>  	intel_vga_unregister(i915);
>  cleanup_bios:
> -	intel_bios_driver_remove(i915);
> +	intel_bios_driver_remove(display);
>  
>  	return ret;
>  }
> @@ -615,13 +615,15 @@ void intel_display_driver_remove_noirq(struct drm_i915_private *i915)
>  /* part #3: call after gem init */
>  void intel_display_driver_remove_nogem(struct drm_i915_private *i915)
>  {
> +	struct intel_display *display = &i915->display;
> +
>  	intel_dmc_fini(i915);
>  
>  	intel_power_domains_driver_remove(i915);
>  
>  	intel_vga_unregister(i915);
>  
> -	intel_bios_driver_remove(i915);
> +	intel_bios_driver_remove(display);
>  }
>  
>  void intel_display_driver_unregister(struct drm_i915_private *i915)
> diff --git a/drivers/gpu/drm/i915/display/intel_display_irq.c b/drivers/gpu/drm/i915/display/intel_display_irq.c
> index 6cc1cc5e94d5..3f53db68c44c 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_irq.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_irq.c
> @@ -1690,6 +1690,7 @@ static void icp_irq_postinstall(struct drm_i915_private *i915);
>  
>  void gen8_de_irq_postinstall(struct drm_i915_private *dev_priv)
>  {
> +	struct intel_display *display = &dev_priv->display;
>  	struct intel_uncore *uncore = &dev_priv->uncore;
>  
>  	u32 de_pipe_masked = gen8_de_pipe_fault_mask(dev_priv) |
> @@ -1724,7 +1725,7 @@ void gen8_de_irq_postinstall(struct drm_i915_private *dev_priv)
>  	} else if (DISPLAY_VER(dev_priv) >= 11) {
>  		enum port port;
>  
> -		if (intel_bios_is_dsi_present(dev_priv, &port))
> +		if (intel_bios_is_dsi_present(display, &port))
>  			de_port_masked |= DSI0_TE | DSI1_TE;
>  	}
>  
> diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
> index 86412ae7b48f..2e5a4e2218c2 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -6385,8 +6385,9 @@ static bool _intel_dp_is_port_edp(struct drm_i915_private *dev_priv,
>  
>  bool intel_dp_is_port_edp(struct drm_i915_private *i915, enum port port)
>  {
> +	struct intel_display *display = &i915->display;
>  	const struct intel_bios_encoder_data *devdata =
> -		intel_bios_encoder_data_lookup(i915, port);
> +		intel_bios_encoder_data_lookup(display, port);
>  
>  	return _intel_dp_is_port_edp(i915, devdata, port);
>  }
> @@ -6489,6 +6490,7 @@ static void intel_edp_backlight_setup(struct intel_dp *intel_dp,
>  static bool intel_edp_init_connector(struct intel_dp *intel_dp,
>  				     struct intel_connector *intel_connector)
>  {
> +	struct intel_display *display = to_intel_display(intel_dp);
>  	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
>  	struct drm_connector *connector = &intel_connector->base;
>  	struct drm_display_mode *fixed_mode;
> @@ -6514,7 +6516,7 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
>  		return false;
>  	}
>  
> -	intel_bios_init_panel_early(dev_priv, &intel_connector->panel,
> +	intel_bios_init_panel_early(display, &intel_connector->panel,
>  				    encoder->devdata);
>  
>  	if (!intel_pps_init(intel_dp)) {
> @@ -6611,7 +6613,7 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
>  		drm_edid = ERR_PTR(-ENOENT);
>  	}
>  
> -	intel_bios_init_panel_late(dev_priv, &intel_connector->panel, encoder->devdata,
> +	intel_bios_init_panel_late(display, &intel_connector->panel, encoder->devdata,
>  				   IS_ERR(drm_edid) ? NULL : drm_edid);
>  
>  	intel_panel_add_edid_fixed_modes(intel_connector, true);
> diff --git a/drivers/gpu/drm/i915/display/intel_lvds.c b/drivers/gpu/drm/i915/display/intel_lvds.c
> index 9f018503d4fd..fb4ed9f7855b 100644
> --- a/drivers/gpu/drm/i915/display/intel_lvds.c
> +++ b/drivers/gpu/drm/i915/display/intel_lvds.c
> @@ -838,6 +838,7 @@ static void intel_lvds_add_properties(struct drm_connector *connector)
>   */
>  void intel_lvds_init(struct drm_i915_private *i915)
>  {
> +	struct intel_display *display = &i915->display;
>  	struct intel_lvds_encoder *lvds_encoder;
>  	struct intel_connector *connector;
>  	const struct drm_edid *drm_edid;
> @@ -872,7 +873,7 @@ void intel_lvds_init(struct drm_i915_private *i915)
>  	}
>  
>  	ddc_pin = GMBUS_PIN_PANEL;
> -	if (!intel_bios_is_lvds_present(i915, &ddc_pin)) {
> +	if (!intel_bios_is_lvds_present(display, &ddc_pin)) {
>  		if ((lvds & LVDS_PORT_EN) == 0) {
>  			drm_dbg_kms(&i915->drm,
>  				    "LVDS is not present in VBT\n");
> @@ -966,7 +967,7 @@ void intel_lvds_init(struct drm_i915_private *i915)
>  	} else {
>  		drm_edid = ERR_PTR(-ENOENT);
>  	}
> -	intel_bios_init_panel_late(i915, &connector->panel, NULL,
> +	intel_bios_init_panel_late(display, &connector->panel, NULL,
>  				   IS_ERR(drm_edid) ? NULL : drm_edid);
>  
>  	/* Try EDID first */
> diff --git a/drivers/gpu/drm/i915/display/intel_opregion.c b/drivers/gpu/drm/i915/display/intel_opregion.c
> index 0cf6c0711dae..d3d0b4b2e088 100644
> --- a/drivers/gpu/drm/i915/display/intel_opregion.c
> +++ b/drivers/gpu/drm/i915/display/intel_opregion.c
> @@ -870,7 +870,6 @@ static const struct dmi_system_id intel_no_opregion_vbt[] = {
>  
>  int intel_opregion_setup(struct intel_display *display)
>  {
> -	struct drm_i915_private *i915 = to_i915(display->drm);
>  	struct intel_opregion *opregion;
>  	struct pci_dev *pdev = to_pci_dev(display->drm->dev);
>  	u32 asls, mboxes;
> @@ -991,7 +990,7 @@ int intel_opregion_setup(struct intel_display *display)
>  
>  		vbt = opregion->rvda;
>  		vbt_size = opregion->asle->rvds;
> -		if (intel_bios_is_valid_vbt(i915, vbt, vbt_size)) {
> +		if (intel_bios_is_valid_vbt(display, vbt, vbt_size)) {
>  			drm_dbg_kms(display->drm,
>  				    "Found valid VBT in ACPI OpRegion (RVDA)\n");
>  			opregion->vbt = vbt;
> @@ -1016,7 +1015,7 @@ int intel_opregion_setup(struct intel_display *display)
>  	vbt_size = (mboxes & MBOX_ASLE_EXT) ?
>  		OPREGION_ASLE_EXT_OFFSET : OPREGION_SIZE;
>  	vbt_size -= OPREGION_VBT_OFFSET;
> -	if (intel_bios_is_valid_vbt(i915, vbt, vbt_size)) {
> +	if (intel_bios_is_valid_vbt(display, vbt, vbt_size)) {
>  		drm_dbg_kms(display->drm,
>  			    "Found valid VBT in ACPI OpRegion (Mailbox #4)\n");
>  		opregion->vbt = vbt;
> diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c b/drivers/gpu/drm/i915/display/intel_sdvo.c
> index 4cfa27ca8c22..7cc519b402e9 100644
> --- a/drivers/gpu/drm/i915/display/intel_sdvo.c
> +++ b/drivers/gpu/drm/i915/display/intel_sdvo.c
> @@ -2919,6 +2919,7 @@ intel_sdvo_analog_init(struct intel_sdvo *intel_sdvo, u16 type)
>  static bool
>  intel_sdvo_lvds_init(struct intel_sdvo *intel_sdvo, u16 type)
>  {
> +	struct intel_display *display = to_intel_display(&intel_sdvo->base);
>  	struct drm_encoder *encoder = &intel_sdvo->base.base;
>  	struct drm_i915_private *i915 = to_i915(encoder->dev);
>  	struct drm_connector *connector;
> @@ -2946,7 +2947,7 @@ intel_sdvo_lvds_init(struct intel_sdvo *intel_sdvo, u16 type)
>  	if (!intel_sdvo_create_enhance_property(intel_sdvo, intel_sdvo_connector))
>  		goto err;
>  
> -	intel_bios_init_panel_late(i915, &intel_connector->panel, NULL, NULL);
> +	intel_bios_init_panel_late(display, &intel_connector->panel, NULL, NULL);
>  
>  	/*
>  	 * Fetch modes from VBT. For SDVO prefer the VBT mode since some
> diff --git a/drivers/gpu/drm/i915/display/intel_tv.c b/drivers/gpu/drm/i915/display/intel_tv.c
> index 9df0f1263913..bfc43bda8532 100644
> --- a/drivers/gpu/drm/i915/display/intel_tv.c
> +++ b/drivers/gpu/drm/i915/display/intel_tv.c
> @@ -1930,6 +1930,7 @@ static void intel_tv_add_properties(struct drm_connector *connector)
>  void
>  intel_tv_init(struct drm_i915_private *dev_priv)
>  {
> +	struct intel_display *display = &dev_priv->display;
>  	struct drm_connector *connector;
>  	struct intel_tv *intel_tv;
>  	struct intel_encoder *intel_encoder;
> @@ -1939,7 +1940,7 @@ intel_tv_init(struct drm_i915_private *dev_priv)
>  	if ((intel_de_read(dev_priv, TV_CTL) & TV_FUSE_STATE_MASK) == TV_FUSE_STATE_DISABLED)
>  		return;
>  
> -	if (!intel_bios_is_tv_present(dev_priv)) {
> +	if (!intel_bios_is_tv_present(display)) {
>  		drm_dbg_kms(&dev_priv->drm, "Integrated TV is not present.\n");
>  		return;
>  	}
> diff --git a/drivers/gpu/drm/i915/display/vlv_dsi.c b/drivers/gpu/drm/i915/display/vlv_dsi.c
> index eae5b5e09aa8..248bab691181 100644
> --- a/drivers/gpu/drm/i915/display/vlv_dsi.c
> +++ b/drivers/gpu/drm/i915/display/vlv_dsi.c
> @@ -1880,6 +1880,7 @@ static const struct dmi_system_id vlv_dsi_dmi_quirk_table[] = {
>  
>  void vlv_dsi_init(struct drm_i915_private *dev_priv)
>  {
> +	struct intel_display *display = &dev_priv->display;
>  	struct intel_dsi *intel_dsi;
>  	struct intel_encoder *encoder;
>  	struct intel_connector *connector;
> @@ -1891,7 +1892,7 @@ void vlv_dsi_init(struct drm_i915_private *dev_priv)
>  	drm_dbg_kms(&dev_priv->drm, "\n");
>  
>  	/* There is no detection method for MIPI so rely on VBT */
> -	if (!intel_bios_is_dsi_present(dev_priv, &port))
> +	if (!intel_bios_is_dsi_present(display, &port))
>  		return;
>  
>  	if (IS_GEMINILAKE(dev_priv) || IS_BROXTON(dev_priv))
> @@ -1946,7 +1947,7 @@ void vlv_dsi_init(struct drm_i915_private *dev_priv)
>  
>  	intel_dsi->panel_power_off_time = ktime_get_boottime();
>  
> -	intel_bios_init_panel_late(dev_priv, &connector->panel, NULL, NULL);
> +	intel_bios_init_panel_late(display, &connector->panel, NULL, NULL);
>  
>  	if (connector->panel.vbt.dsi.config->dual_link)
>  		intel_dsi->ports = BIT(PORT_A) | BIT(PORT_C);
> -- 
> 2.39.2
> 


More information about the Intel-xe mailing list