Commit 41aa3448 authored by Rodrigo Vivi's avatar Rodrigo Vivi Committed by Daniel Vetter

drm/i915: Organize VBT stuff inside drm_i915_private

drm_i915_private is getting bigger and bigger when adding new vbt stuff.
So, the better way of getting drm_i915_private organized is to create
a special structure for vbt stuff.

v2: Basically conflicts fixes
Reviewed-by: default avatarJani Nikula <jani.nikula@intel.com>
Signed-off-by: default avatarRodrigo Vivi <rodrigo.vivi@gmail.com>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent 09ede541
...@@ -1742,10 +1742,10 @@ int i915_driver_unload(struct drm_device *dev) ...@@ -1742,10 +1742,10 @@ int i915_driver_unload(struct drm_device *dev)
* free the memory space allocated for the child device * free the memory space allocated for the child device
* config parsed from VBT * config parsed from VBT
*/ */
if (dev_priv->child_dev && dev_priv->child_dev_num) { if (dev_priv->vbt.child_dev && dev_priv->vbt.child_dev_num) {
kfree(dev_priv->child_dev); kfree(dev_priv->vbt.child_dev);
dev_priv->child_dev = NULL; dev_priv->vbt.child_dev = NULL;
dev_priv->child_dev_num = 0; dev_priv->vbt.child_dev_num = 0;
} }
vga_switcheroo_unregister_client(dev->pdev); vga_switcheroo_unregister_client(dev->pdev);
......
...@@ -891,6 +891,37 @@ enum modeset_restore { ...@@ -891,6 +891,37 @@ enum modeset_restore {
MODESET_SUSPENDED, MODESET_SUSPENDED,
}; };
struct intel_vbt_data {
struct drm_display_mode *lfp_lvds_vbt_mode; /* if any */
struct drm_display_mode *sdvo_lvds_vbt_mode; /* if any */
/* Feature bits */
unsigned int int_tv_support:1;
unsigned int lvds_dither:1;
unsigned int lvds_vbt:1;
unsigned int int_crt_support:1;
unsigned int lvds_use_ssc:1;
unsigned int display_clock_mode:1;
unsigned int fdi_rx_polarity_inverted:1;
int lvds_ssc_freq;
unsigned int bios_lvds_val; /* initial [PCH_]LVDS reg val in VBIOS */
/* eDP */
int edp_rate;
int edp_lanes;
int edp_preemphasis;
int edp_vswing;
bool edp_initialized;
bool edp_support;
int edp_bpp;
struct edp_power_seq edp_pps;
int crt_ddc_pin;
int child_dev_num;
struct child_device_config *child_dev;
};
typedef struct drm_i915_private { typedef struct drm_i915_private {
struct drm_device *dev; struct drm_device *dev;
struct kmem_cache *slab; struct kmem_cache *slab;
...@@ -970,6 +1001,7 @@ typedef struct drm_i915_private { ...@@ -970,6 +1001,7 @@ typedef struct drm_i915_private {
struct intel_fbc_work *fbc_work; struct intel_fbc_work *fbc_work;
struct intel_opregion opregion; struct intel_opregion opregion;
struct intel_vbt_data vbt;
/* overlay */ /* overlay */
struct intel_overlay *overlay; struct intel_overlay *overlay;
...@@ -986,31 +1018,8 @@ typedef struct drm_i915_private { ...@@ -986,31 +1018,8 @@ typedef struct drm_i915_private {
/* LVDS info */ /* LVDS info */
struct drm_display_mode *lfp_lvds_vbt_mode; /* if any */ struct drm_display_mode *lfp_lvds_vbt_mode; /* if any */
struct drm_display_mode *sdvo_lvds_vbt_mode; /* if any */ struct drm_display_mode *sdvo_lvds_vbt_mode; /* if any */
/* Feature bits from the VBIOS */
unsigned int int_tv_support:1;
unsigned int lvds_dither:1;
unsigned int lvds_vbt:1;
unsigned int int_crt_support:1;
unsigned int lvds_use_ssc:1;
unsigned int display_clock_mode:1;
unsigned int fdi_rx_polarity_inverted:1;
int lvds_ssc_freq;
unsigned int bios_lvds_val; /* initial [PCH_]LVDS reg val in VBIOS */
struct {
int rate;
int lanes;
int preemphasis;
int vswing;
bool initialized;
bool support;
int bpp;
struct edp_power_seq pps;
} edp;
bool no_aux_handshake; bool no_aux_handshake;
int crt_ddc_pin;
struct drm_i915_fence_reg fence_regs[I915_MAX_NUM_FENCES]; /* assume 965 */ struct drm_i915_fence_reg fence_regs[I915_MAX_NUM_FENCES]; /* assume 965 */
int fence_reg_start; /* 4 if userland hasn't ioctl'd us yet */ int fence_reg_start; /* 4 if userland hasn't ioctl'd us yet */
int num_fence_regs; /* 8 on pre-965, 16 otherwise */ int num_fence_regs; /* 8 on pre-965, 16 otherwise */
...@@ -1052,8 +1061,6 @@ typedef struct drm_i915_private { ...@@ -1052,8 +1061,6 @@ typedef struct drm_i915_private {
/* indicates the reduced downclock for LVDS*/ /* indicates the reduced downclock for LVDS*/
int lvds_downclock; int lvds_downclock;
u16 orig_clock; u16 orig_clock;
int child_dev_num;
struct child_device_config *child_dev;
bool mchbar_need_disable; bool mchbar_need_disable;
......
...@@ -212,7 +212,7 @@ parse_lfp_panel_data(struct drm_i915_private *dev_priv, ...@@ -212,7 +212,7 @@ parse_lfp_panel_data(struct drm_i915_private *dev_priv,
if (!lvds_options) if (!lvds_options)
return; return;
dev_priv->lvds_dither = lvds_options->pixel_dither; dev_priv->vbt.lvds_dither = lvds_options->pixel_dither;
if (lvds_options->panel_type == 0xff) if (lvds_options->panel_type == 0xff)
return; return;
...@@ -226,7 +226,7 @@ parse_lfp_panel_data(struct drm_i915_private *dev_priv, ...@@ -226,7 +226,7 @@ parse_lfp_panel_data(struct drm_i915_private *dev_priv,
if (!lvds_lfp_data_ptrs) if (!lvds_lfp_data_ptrs)
return; return;
dev_priv->lvds_vbt = 1; dev_priv->vbt.lvds_vbt = 1;
panel_dvo_timing = get_lvds_dvo_timing(lvds_lfp_data, panel_dvo_timing = get_lvds_dvo_timing(lvds_lfp_data,
lvds_lfp_data_ptrs, lvds_lfp_data_ptrs,
...@@ -238,7 +238,7 @@ parse_lfp_panel_data(struct drm_i915_private *dev_priv, ...@@ -238,7 +238,7 @@ parse_lfp_panel_data(struct drm_i915_private *dev_priv,
fill_detail_timing_data(panel_fixed_mode, panel_dvo_timing); fill_detail_timing_data(panel_fixed_mode, panel_dvo_timing);
dev_priv->lfp_lvds_vbt_mode = panel_fixed_mode; dev_priv->vbt.lfp_lvds_vbt_mode = panel_fixed_mode;
DRM_DEBUG_KMS("Found panel mode in BIOS VBT tables:\n"); DRM_DEBUG_KMS("Found panel mode in BIOS VBT tables:\n");
drm_mode_debug_printmodeline(panel_fixed_mode); drm_mode_debug_printmodeline(panel_fixed_mode);
...@@ -274,9 +274,9 @@ parse_lfp_panel_data(struct drm_i915_private *dev_priv, ...@@ -274,9 +274,9 @@ parse_lfp_panel_data(struct drm_i915_private *dev_priv,
/* check the resolution, just to be sure */ /* check the resolution, just to be sure */
if (fp_timing->x_res == panel_fixed_mode->hdisplay && if (fp_timing->x_res == panel_fixed_mode->hdisplay &&
fp_timing->y_res == panel_fixed_mode->vdisplay) { fp_timing->y_res == panel_fixed_mode->vdisplay) {
dev_priv->bios_lvds_val = fp_timing->lvds_reg_val; dev_priv->vbt.bios_lvds_val = fp_timing->lvds_reg_val;
DRM_DEBUG_KMS("VBT initial LVDS value %x\n", DRM_DEBUG_KMS("VBT initial LVDS value %x\n",
dev_priv->bios_lvds_val); dev_priv->vbt.bios_lvds_val);
} }
} }
} }
...@@ -316,7 +316,7 @@ parse_sdvo_panel_data(struct drm_i915_private *dev_priv, ...@@ -316,7 +316,7 @@ parse_sdvo_panel_data(struct drm_i915_private *dev_priv,
fill_detail_timing_data(panel_fixed_mode, dvo_timing + index); fill_detail_timing_data(panel_fixed_mode, dvo_timing + index);
dev_priv->sdvo_lvds_vbt_mode = panel_fixed_mode; dev_priv->vbt.sdvo_lvds_vbt_mode = panel_fixed_mode;
DRM_DEBUG_KMS("Found SDVO panel mode in BIOS VBT tables:\n"); DRM_DEBUG_KMS("Found SDVO panel mode in BIOS VBT tables:\n");
drm_mode_debug_printmodeline(panel_fixed_mode); drm_mode_debug_printmodeline(panel_fixed_mode);
...@@ -345,20 +345,20 @@ parse_general_features(struct drm_i915_private *dev_priv, ...@@ -345,20 +345,20 @@ parse_general_features(struct drm_i915_private *dev_priv,
general = find_section(bdb, BDB_GENERAL_FEATURES); general = find_section(bdb, BDB_GENERAL_FEATURES);
if (general) { if (general) {
dev_priv->int_tv_support = general->int_tv_support; dev_priv->vbt.int_tv_support = general->int_tv_support;
dev_priv->int_crt_support = general->int_crt_support; dev_priv->vbt.int_crt_support = general->int_crt_support;
dev_priv->lvds_use_ssc = general->enable_ssc; dev_priv->vbt.lvds_use_ssc = general->enable_ssc;
dev_priv->lvds_ssc_freq = dev_priv->vbt.lvds_ssc_freq =
intel_bios_ssc_frequency(dev, general->ssc_freq); intel_bios_ssc_frequency(dev, general->ssc_freq);
dev_priv->display_clock_mode = general->display_clock_mode; dev_priv->vbt.display_clock_mode = general->display_clock_mode;
dev_priv->fdi_rx_polarity_inverted = general->fdi_rx_polarity_inverted; dev_priv->vbt.fdi_rx_polarity_inverted = general->fdi_rx_polarity_inverted;
DRM_DEBUG_KMS("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", DRM_DEBUG_KMS("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",
dev_priv->int_tv_support, dev_priv->vbt.int_tv_support,
dev_priv->int_crt_support, dev_priv->vbt.int_crt_support,
dev_priv->lvds_use_ssc, dev_priv->vbt.lvds_use_ssc,
dev_priv->lvds_ssc_freq, dev_priv->vbt.lvds_ssc_freq,
dev_priv->display_clock_mode, dev_priv->vbt.display_clock_mode,
dev_priv->fdi_rx_polarity_inverted); dev_priv->vbt.fdi_rx_polarity_inverted);
} }
} }
...@@ -375,7 +375,7 @@ parse_general_definitions(struct drm_i915_private *dev_priv, ...@@ -375,7 +375,7 @@ parse_general_definitions(struct drm_i915_private *dev_priv,
int bus_pin = general->crt_ddc_gmbus_pin; int bus_pin = general->crt_ddc_gmbus_pin;
DRM_DEBUG_KMS("crt_ddc_bus_pin: %d\n", bus_pin); DRM_DEBUG_KMS("crt_ddc_bus_pin: %d\n", bus_pin);
if (intel_gmbus_is_port_valid(bus_pin)) if (intel_gmbus_is_port_valid(bus_pin))
dev_priv->crt_ddc_pin = bus_pin; dev_priv->vbt.crt_ddc_pin = bus_pin;
} else { } else {
DRM_DEBUG_KMS("BDB_GD too small (%d). Invalid.\n", DRM_DEBUG_KMS("BDB_GD too small (%d). Invalid.\n",
block_size); block_size);
...@@ -486,7 +486,7 @@ parse_driver_features(struct drm_i915_private *dev_priv, ...@@ -486,7 +486,7 @@ parse_driver_features(struct drm_i915_private *dev_priv,
if (SUPPORTS_EDP(dev) && if (SUPPORTS_EDP(dev) &&
driver->lvds_config == BDB_DRIVER_FEATURE_EDP) driver->lvds_config == BDB_DRIVER_FEATURE_EDP)
dev_priv->edp.support = 1; dev_priv->vbt.edp_support = 1;
if (driver->dual_frequency) if (driver->dual_frequency)
dev_priv->render_reclock_avail = true; dev_priv->render_reclock_avail = true;
...@@ -501,20 +501,20 @@ parse_edp(struct drm_i915_private *dev_priv, struct bdb_header *bdb) ...@@ -501,20 +501,20 @@ parse_edp(struct drm_i915_private *dev_priv, struct bdb_header *bdb)
edp = find_section(bdb, BDB_EDP); edp = find_section(bdb, BDB_EDP);
if (!edp) { if (!edp) {
if (SUPPORTS_EDP(dev_priv->dev) && dev_priv->edp.support) if (SUPPORTS_EDP(dev_priv->dev) && dev_priv->vbt.edp_support)
DRM_DEBUG_KMS("No eDP BDB found but eDP panel supported.\n"); DRM_DEBUG_KMS("No eDP BDB found but eDP panel supported.\n");
return; return;
} }
switch ((edp->color_depth >> (panel_type * 2)) & 3) { switch ((edp->color_depth >> (panel_type * 2)) & 3) {
case EDP_18BPP: case EDP_18BPP:
dev_priv->edp.bpp = 18; dev_priv->vbt.edp_bpp = 18;
break; break;
case EDP_24BPP: case EDP_24BPP:
dev_priv->edp.bpp = 24; dev_priv->vbt.edp_bpp = 24;
break; break;
case EDP_30BPP: case EDP_30BPP:
dev_priv->edp.bpp = 30; dev_priv->vbt.edp_bpp = 30;
break; break;
} }
...@@ -522,48 +522,48 @@ parse_edp(struct drm_i915_private *dev_priv, struct bdb_header *bdb) ...@@ -522,48 +522,48 @@ parse_edp(struct drm_i915_private *dev_priv, struct bdb_header *bdb)
edp_pps = &edp->power_seqs[panel_type]; edp_pps = &edp->power_seqs[panel_type];
edp_link_params = &edp->link_params[panel_type]; edp_link_params = &edp->link_params[panel_type];
dev_priv->edp.pps = *edp_pps; dev_priv->vbt.edp_pps = *edp_pps;
dev_priv->edp.rate = edp_link_params->rate ? DP_LINK_BW_2_7 : dev_priv->vbt.edp_rate = edp_link_params->rate ? DP_LINK_BW_2_7 :
DP_LINK_BW_1_62; DP_LINK_BW_1_62;
switch (edp_link_params->lanes) { switch (edp_link_params->lanes) {
case 0: case 0:
dev_priv->edp.lanes = 1; dev_priv->vbt.edp_lanes = 1;
break; break;
case 1: case 1:
dev_priv->edp.lanes = 2; dev_priv->vbt.edp_lanes = 2;
break; break;
case 3: case 3:
default: default:
dev_priv->edp.lanes = 4; dev_priv->vbt.edp_lanes = 4;
break; break;
} }
switch (edp_link_params->preemphasis) { switch (edp_link_params->preemphasis) {
case 0: case 0:
dev_priv->edp.preemphasis = DP_TRAIN_PRE_EMPHASIS_0; dev_priv->vbt.edp_preemphasis = DP_TRAIN_PRE_EMPHASIS_0;
break; break;
case 1: case 1:
dev_priv->edp.preemphasis = DP_TRAIN_PRE_EMPHASIS_3_5; dev_priv->vbt.edp_preemphasis = DP_TRAIN_PRE_EMPHASIS_3_5;
break; break;
case 2: case 2:
dev_priv->edp.preemphasis = DP_TRAIN_PRE_EMPHASIS_6; dev_priv->vbt.edp_preemphasis = DP_TRAIN_PRE_EMPHASIS_6;
break; break;
case 3: case 3:
dev_priv->edp.preemphasis = DP_TRAIN_PRE_EMPHASIS_9_5; dev_priv->vbt.edp_preemphasis = DP_TRAIN_PRE_EMPHASIS_9_5;
break; break;
} }
switch (edp_link_params->vswing) { switch (edp_link_params->vswing) {
case 0: case 0:
dev_priv->edp.vswing = DP_TRAIN_VOLTAGE_SWING_400; dev_priv->vbt.edp_vswing = DP_TRAIN_VOLTAGE_SWING_400;
break; break;
case 1: case 1:
dev_priv->edp.vswing = DP_TRAIN_VOLTAGE_SWING_600; dev_priv->vbt.edp_vswing = DP_TRAIN_VOLTAGE_SWING_600;
break; break;
case 2: case 2:
dev_priv->edp.vswing = DP_TRAIN_VOLTAGE_SWING_800; dev_priv->vbt.edp_vswing = DP_TRAIN_VOLTAGE_SWING_800;
break; break;
case 3: case 3:
dev_priv->edp.vswing = DP_TRAIN_VOLTAGE_SWING_1200; dev_priv->vbt.edp_vswing = DP_TRAIN_VOLTAGE_SWING_1200;
break; break;
} }
} }
...@@ -611,13 +611,13 @@ parse_device_mapping(struct drm_i915_private *dev_priv, ...@@ -611,13 +611,13 @@ parse_device_mapping(struct drm_i915_private *dev_priv,
DRM_DEBUG_KMS("no child dev is parsed from VBT\n"); DRM_DEBUG_KMS("no child dev is parsed from VBT\n");
return; return;
} }
dev_priv->child_dev = kcalloc(count, sizeof(*p_child), GFP_KERNEL); dev_priv->vbt.child_dev = kcalloc(count, sizeof(*p_child), GFP_KERNEL);
if (!dev_priv->child_dev) { if (!dev_priv->vbt.child_dev) {
DRM_DEBUG_KMS("No memory space for child device\n"); DRM_DEBUG_KMS("No memory space for child device\n");
return; return;
} }
dev_priv->child_dev_num = count; dev_priv->vbt.child_dev_num = count;
count = 0; count = 0;
for (i = 0; i < child_device_num; i++) { for (i = 0; i < child_device_num; i++) {
p_child = &(p_defs->devices[i]); p_child = &(p_defs->devices[i]);
...@@ -625,7 +625,7 @@ parse_device_mapping(struct drm_i915_private *dev_priv, ...@@ -625,7 +625,7 @@ parse_device_mapping(struct drm_i915_private *dev_priv,
/* skip the device block if device type is invalid */ /* skip the device block if device type is invalid */
continue; continue;
} }
child_dev_ptr = dev_priv->child_dev + count; child_dev_ptr = dev_priv->vbt.child_dev + count;
count++; count++;
memcpy((void *)child_dev_ptr, (void *)p_child, memcpy((void *)child_dev_ptr, (void *)p_child,
sizeof(*p_child)); sizeof(*p_child));
...@@ -638,23 +638,23 @@ init_vbt_defaults(struct drm_i915_private *dev_priv) ...@@ -638,23 +638,23 @@ init_vbt_defaults(struct drm_i915_private *dev_priv)
{ {
struct drm_device *dev = dev_priv->dev; struct drm_device *dev = dev_priv->dev;
dev_priv->crt_ddc_pin = GMBUS_PORT_VGADDC; dev_priv->vbt.crt_ddc_pin = GMBUS_PORT_VGADDC;
/* LFP panel data */ /* LFP panel data */
dev_priv->lvds_dither = 1; dev_priv->vbt.lvds_dither = 1;
dev_priv->lvds_vbt = 0; dev_priv->vbt.lvds_vbt = 0;
/* SDVO panel data */ /* SDVO panel data */
dev_priv->sdvo_lvds_vbt_mode = NULL; dev_priv->vbt.sdvo_lvds_vbt_mode = NULL;
/* general features */ /* general features */
dev_priv->int_tv_support = 1; dev_priv->vbt.int_tv_support = 1;
dev_priv->int_crt_support = 1; dev_priv->vbt.int_crt_support = 1;
/* Default to using SSC */ /* Default to using SSC */
dev_priv->lvds_use_ssc = 1; dev_priv->vbt.lvds_use_ssc = 1;
dev_priv->lvds_ssc_freq = intel_bios_ssc_frequency(dev, 1); dev_priv->vbt.lvds_ssc_freq = intel_bios_ssc_frequency(dev, 1);
DRM_DEBUG_KMS("Set default to SSC at %dMHz\n", dev_priv->lvds_ssc_freq); DRM_DEBUG_KMS("Set default to SSC at %dMHz\n", dev_priv->vbt.lvds_ssc_freq);
} }
static int __init intel_no_opregion_vbt_callback(const struct dmi_system_id *id) static int __init intel_no_opregion_vbt_callback(const struct dmi_system_id *id)
......
...@@ -442,7 +442,7 @@ static bool intel_crt_detect_ddc(struct drm_connector *connector) ...@@ -442,7 +442,7 @@ static bool intel_crt_detect_ddc(struct drm_connector *connector)
BUG_ON(crt->base.type != INTEL_OUTPUT_ANALOG); BUG_ON(crt->base.type != INTEL_OUTPUT_ANALOG);
i2c = intel_gmbus_get_adapter(dev_priv, dev_priv->crt_ddc_pin); i2c = intel_gmbus_get_adapter(dev_priv, dev_priv->vbt.crt_ddc_pin);
edid = intel_crt_get_edid(connector, i2c); edid = intel_crt_get_edid(connector, i2c);
if (edid) { if (edid) {
...@@ -648,7 +648,7 @@ static int intel_crt_get_modes(struct drm_connector *connector) ...@@ -648,7 +648,7 @@ static int intel_crt_get_modes(struct drm_connector *connector)
int ret; int ret;
struct i2c_adapter *i2c; struct i2c_adapter *i2c;
i2c = intel_gmbus_get_adapter(dev_priv, dev_priv->crt_ddc_pin); i2c = intel_gmbus_get_adapter(dev_priv, dev_priv->vbt.crt_ddc_pin);
ret = intel_crt_ddc_get_modes(connector, i2c); ret = intel_crt_ddc_get_modes(connector, i2c);
if (ret || !IS_G4X(dev)) if (ret || !IS_G4X(dev))
return ret; return ret;
......
...@@ -4242,7 +4242,7 @@ static inline bool intel_panel_use_ssc(struct drm_i915_private *dev_priv) ...@@ -4242,7 +4242,7 @@ static inline bool intel_panel_use_ssc(struct drm_i915_private *dev_priv)
{ {
if (i915_panel_use_ssc >= 0) if (i915_panel_use_ssc >= 0)
return i915_panel_use_ssc != 0; return i915_panel_use_ssc != 0;
return dev_priv->lvds_use_ssc return dev_priv->vbt.lvds_use_ssc
&& !(dev_priv->quirks & QUIRK_LVDS_SSC_DISABLE); && !(dev_priv->quirks & QUIRK_LVDS_SSC_DISABLE);
} }
...@@ -4278,7 +4278,7 @@ static int i9xx_get_refclk(struct drm_crtc *crtc, int num_connectors) ...@@ -4278,7 +4278,7 @@ static int i9xx_get_refclk(struct drm_crtc *crtc, int num_connectors)
refclk = vlv_get_refclk(crtc); refclk = vlv_get_refclk(crtc);
} else if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS) && } else if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS) &&
intel_panel_use_ssc(dev_priv) && num_connectors < 2) { intel_panel_use_ssc(dev_priv) && num_connectors < 2) {
refclk = dev_priv->lvds_ssc_freq * 1000; refclk = dev_priv->vbt.lvds_ssc_freq * 1000;
DRM_DEBUG_KMS("using SSC reference clock of %d MHz\n", DRM_DEBUG_KMS("using SSC reference clock of %d MHz\n",
refclk / 1000); refclk / 1000);
} else if (!IS_GEN2(dev)) { } else if (!IS_GEN2(dev)) {
...@@ -5026,7 +5026,7 @@ static void ironlake_init_pch_refclk(struct drm_device *dev) ...@@ -5026,7 +5026,7 @@ static void ironlake_init_pch_refclk(struct drm_device *dev)
} }
if (HAS_PCH_IBX(dev)) { if (HAS_PCH_IBX(dev)) {
has_ck505 = dev_priv->display_clock_mode; has_ck505 = dev_priv->vbt.display_clock_mode;
can_ssc = has_ck505; can_ssc = has_ck505;
} else { } else {
has_ck505 = false; has_ck505 = false;
...@@ -5338,8 +5338,8 @@ static int ironlake_get_refclk(struct drm_crtc *crtc) ...@@ -5338,8 +5338,8 @@ static int ironlake_get_refclk(struct drm_crtc *crtc)
if (is_lvds && intel_panel_use_ssc(dev_priv) && num_connectors < 2) { if (is_lvds && intel_panel_use_ssc(dev_priv) && num_connectors < 2) {
DRM_DEBUG_KMS("using SSC reference clock of %d MHz\n", DRM_DEBUG_KMS("using SSC reference clock of %d MHz\n",
dev_priv->lvds_ssc_freq); dev_priv->vbt.lvds_ssc_freq);
return dev_priv->lvds_ssc_freq * 1000; return dev_priv->vbt.lvds_ssc_freq * 1000;
} }
return 120000; return 120000;
...@@ -5618,7 +5618,7 @@ static uint32_t ironlake_compute_dpll(struct intel_crtc *intel_crtc, ...@@ -5618,7 +5618,7 @@ static uint32_t ironlake_compute_dpll(struct intel_crtc *intel_crtc,
factor = 21; factor = 21;
if (is_lvds) { if (is_lvds) {
if ((intel_panel_use_ssc(dev_priv) && if ((intel_panel_use_ssc(dev_priv) &&
dev_priv->lvds_ssc_freq == 100) || dev_priv->vbt.lvds_ssc_freq == 100) ||
(HAS_PCH_IBX(dev) && intel_is_dual_link_lvds(dev))) (HAS_PCH_IBX(dev) && intel_is_dual_link_lvds(dev)))
factor = 25; factor = 25;
} else if (intel_crtc->config.sdvo_tv_clock) } else if (intel_crtc->config.sdvo_tv_clock)
......
...@@ -727,10 +727,10 @@ intel_dp_compute_config(struct intel_encoder *encoder, ...@@ -727,10 +727,10 @@ intel_dp_compute_config(struct intel_encoder *encoder,
* recomments. This means we'll up-dither 16bpp framebuffers on * recomments. This means we'll up-dither 16bpp framebuffers on
* high-depth panels. * high-depth panels.
*/ */
if (is_edp(intel_dp) && dev_priv->edp.bpp) { if (is_edp(intel_dp) && dev_priv->vbt.edp_bpp) {
DRM_DEBUG_KMS("forcing bpp for eDP panel to BIOS-provided %i\n", DRM_DEBUG_KMS("forcing bpp for eDP panel to BIOS-provided %i\n",
dev_priv->edp.bpp); dev_priv->vbt.edp_bpp);
bpp = dev_priv->edp.bpp; bpp = dev_priv->vbt.edp_bpp;
} }
for (; bpp >= 6*3; bpp -= 2*3) { for (; bpp >= 6*3; bpp -= 2*3) {
...@@ -2745,11 +2745,11 @@ bool intel_dpd_is_edp(struct drm_device *dev) ...@@ -2745,11 +2745,11 @@ bool intel_dpd_is_edp(struct drm_device *dev)
struct child_device_config *p_child; struct child_device_config *p_child;
int i; int i;
if (!dev_priv->child_dev_num) if (!dev_priv->vbt.child_dev_num)
return false; return false;
for (i = 0; i < dev_priv->child_dev_num; i++) { for (i = 0; i < dev_priv->vbt.child_dev_num; i++) {
p_child = dev_priv->child_dev + i; p_child = dev_priv->vbt.child_dev + i;
if (p_child->dvo_port == PORT_IDPD && if (p_child->dvo_port == PORT_IDPD &&
p_child->device_type == DEVICE_TYPE_eDP) p_child->device_type == DEVICE_TYPE_eDP)
...@@ -2827,7 +2827,7 @@ intel_dp_init_panel_power_sequencer(struct drm_device *dev, ...@@ -2827,7 +2827,7 @@ intel_dp_init_panel_power_sequencer(struct drm_device *dev,
DRM_DEBUG_KMS("cur t1_t3 %d t8 %d t9 %d t10 %d t11_t12 %d\n", DRM_DEBUG_KMS("cur t1_t3 %d t8 %d t9 %d t10 %d t11_t12 %d\n",
cur.t1_t3, cur.t8, cur.t9, cur.t10, cur.t11_t12); cur.t1_t3, cur.t8, cur.t9, cur.t10, cur.t11_t12);
vbt = dev_priv->edp.pps; vbt = dev_priv->vbt.edp_pps;
/* Upper limits from eDP 1.3 spec. Note that we use the clunky units of /* Upper limits from eDP 1.3 spec. Note that we use the clunky units of
* our hw here, which are all in 100usec. */ * our hw here, which are all in 100usec. */
...@@ -3097,8 +3097,8 @@ intel_dp_init_connector(struct intel_digital_port *intel_dig_port, ...@@ -3097,8 +3097,8 @@ intel_dp_init_connector(struct intel_digital_port *intel_dig_port,
} }
/* fallback to VBT if available for eDP */ /* fallback to VBT if available for eDP */
if (!fixed_mode && dev_priv->lfp_lvds_vbt_mode) { if (!fixed_mode && dev_priv->vbt.lfp_lvds_vbt_mode) {
fixed_mode = drm_mode_duplicate(dev, dev_priv->lfp_lvds_vbt_mode); fixed_mode = drm_mode_duplicate(dev, dev_priv->vbt.lfp_lvds_vbt_mode);
if (fixed_mode) if (fixed_mode)
fixed_mode->type |= DRM_MODE_TYPE_PREFERRED; fixed_mode->type |= DRM_MODE_TYPE_PREFERRED;
} }
......
...@@ -735,11 +735,11 @@ static bool lvds_is_present_in_vbt(struct drm_device *dev, ...@@ -735,11 +735,11 @@ static bool lvds_is_present_in_vbt(struct drm_device *dev,
struct drm_i915_private *dev_priv = dev->dev_private; struct drm_i915_private *dev_priv = dev->dev_private;
int i; int i;
if (!dev_priv->child_dev_num) if (!dev_priv->vbt.child_dev_num)
return true; return true;
for (i = 0; i < dev_priv->child_dev_num; i++) { for (i = 0; i < dev_priv->vbt.child_dev_num; i++) {
struct child_device_config *child = dev_priv->child_dev + i; struct child_device_config *child = dev_priv->vbt.child_dev + i;
/* If the device type is not LFP, continue. /* If the device type is not LFP, continue.
* We have to check both the new identifiers as well as the * We have to check both the new identifiers as well as the
...@@ -827,7 +827,7 @@ static bool compute_is_dual_link_lvds(struct intel_lvds_encoder *lvds_encoder) ...@@ -827,7 +827,7 @@ static bool compute_is_dual_link_lvds(struct intel_lvds_encoder *lvds_encoder)
*/ */
val = I915_READ(lvds_encoder->reg); val = I915_READ(lvds_encoder->reg);
if (!(val & ~(LVDS_PIPE_MASK | LVDS_DETECTED))) if (!(val & ~(LVDS_PIPE_MASK | LVDS_DETECTED)))
val = dev_priv->bios_lvds_val; val = dev_priv->vbt.bios_lvds_val;
return (val & LVDS_CLKB_POWER_MASK) == LVDS_CLKB_POWER_UP; return (val & LVDS_CLKB_POWER_MASK) == LVDS_CLKB_POWER_UP;
} }
...@@ -887,7 +887,7 @@ bool intel_lvds_init(struct drm_device *dev) ...@@ -887,7 +887,7 @@ bool intel_lvds_init(struct drm_device *dev)
if (HAS_PCH_SPLIT(dev)) { if (HAS_PCH_SPLIT(dev)) {
if ((I915_READ(PCH_LVDS) & LVDS_DETECTED) == 0) if ((I915_READ(PCH_LVDS) & LVDS_DETECTED) == 0)
return false; return false;
if (dev_priv->edp.support) { if (dev_priv->vbt.edp_support) {
DRM_DEBUG_KMS("disable LVDS for eDP support\n"); DRM_DEBUG_KMS("disable LVDS for eDP support\n");
return false; return false;
} }
...@@ -1005,11 +1005,11 @@ bool intel_lvds_init(struct drm_device *dev) ...@@ -1005,11 +1005,11 @@ bool intel_lvds_init(struct drm_device *dev)
} }
/* Failed to get EDID, what about VBT? */ /* Failed to get EDID, what about VBT? */
if (dev_priv->lfp_lvds_vbt_mode) { if (dev_priv->vbt.lfp_lvds_vbt_mode) {
DRM_DEBUG_KMS("using mode from VBT: "); DRM_DEBUG_KMS("using mode from VBT: ");
drm_mode_debug_printmodeline(dev_priv->lfp_lvds_vbt_mode); drm_mode_debug_printmodeline(dev_priv->vbt.lfp_lvds_vbt_mode);
fixed_mode = drm_mode_duplicate(dev, dev_priv->lfp_lvds_vbt_mode); fixed_mode = drm_mode_duplicate(dev, dev_priv->vbt.lfp_lvds_vbt_mode);
if (fixed_mode) { if (fixed_mode) {
fixed_mode->type |= DRM_MODE_TYPE_PREFERRED; fixed_mode->type |= DRM_MODE_TYPE_PREFERRED;
goto out; goto out;
......
...@@ -3889,7 +3889,7 @@ static void cpt_init_clock_gating(struct drm_device *dev) ...@@ -3889,7 +3889,7 @@ static void cpt_init_clock_gating(struct drm_device *dev)
val = I915_READ(TRANS_CHICKEN2(pipe)); val = I915_READ(TRANS_CHICKEN2(pipe));
val |= TRANS_CHICKEN2_TIMING_OVERRIDE; val |= TRANS_CHICKEN2_TIMING_OVERRIDE;
val &= ~TRANS_CHICKEN2_FDI_POLARITY_REVERSED; val &= ~TRANS_CHICKEN2_FDI_POLARITY_REVERSED;
if (dev_priv->fdi_rx_polarity_inverted) if (dev_priv->vbt.fdi_rx_polarity_inverted)
val |= TRANS_CHICKEN2_FDI_POLARITY_REVERSED; val |= TRANS_CHICKEN2_FDI_POLARITY_REVERSED;
val &= ~TRANS_CHICKEN2_FRAME_START_DELAY_MASK; val &= ~TRANS_CHICKEN2_FRAME_START_DELAY_MASK;
val &= ~TRANS_CHICKEN2_DISABLE_DEEP_COLOR_COUNTER; val &= ~TRANS_CHICKEN2_DISABLE_DEEP_COLOR_COUNTER;
......
...@@ -1526,7 +1526,7 @@ intel_sdvo_get_analog_edid(struct drm_connector *connector) ...@@ -1526,7 +1526,7 @@ intel_sdvo_get_analog_edid(struct drm_connector *connector)
return drm_get_edid(connector, return drm_get_edid(connector,
intel_gmbus_get_adapter(dev_priv, intel_gmbus_get_adapter(dev_priv,
dev_priv->crt_ddc_pin)); dev_priv->vbt.crt_ddc_pin));
} }
static enum drm_connector_status static enum drm_connector_status
...@@ -1809,9 +1809,9 @@ static void intel_sdvo_get_lvds_modes(struct drm_connector *connector) ...@@ -1809,9 +1809,9 @@ static void intel_sdvo_get_lvds_modes(struct drm_connector *connector)
goto end; goto end;
/* Fetch modes from VBT */ /* Fetch modes from VBT */
if (dev_priv->sdvo_lvds_vbt_mode != NULL) { if (dev_priv->vbt.sdvo_lvds_vbt_mode != NULL) {
newmode = drm_mode_duplicate(connector->dev, newmode = drm_mode_duplicate(connector->dev,
dev_priv->sdvo_lvds_vbt_mode); dev_priv->vbt.sdvo_lvds_vbt_mode);
if (newmode != NULL) { if (newmode != NULL) {
/* Guarantee the mode is preferred */ /* Guarantee the mode is preferred */
newmode->type = (DRM_MODE_TYPE_PREFERRED | newmode->type = (DRM_MODE_TYPE_PREFERRED |
......
...@@ -1521,12 +1521,12 @@ static int tv_is_present_in_vbt(struct drm_device *dev) ...@@ -1521,12 +1521,12 @@ static int tv_is_present_in_vbt(struct drm_device *dev)
struct child_device_config *p_child; struct child_device_config *p_child;
int i, ret; int i, ret;
if (!dev_priv->child_dev_num) if (!dev_priv->vbt.child_dev_num)
return 1; return 1;
ret = 0; ret = 0;
for (i = 0; i < dev_priv->child_dev_num; i++) { for (i = 0; i < dev_priv->vbt.child_dev_num; i++) {
p_child = dev_priv->child_dev + i; p_child = dev_priv->vbt.child_dev + i;
/* /*
* If the device type is not TV, continue. * If the device type is not TV, continue.
*/ */
...@@ -1564,7 +1564,7 @@ intel_tv_init(struct drm_device *dev) ...@@ -1564,7 +1564,7 @@ intel_tv_init(struct drm_device *dev)
return; return;
} }
/* Even if we have an encoder we may not have a connector */ /* Even if we have an encoder we may not have a connector */
if (!dev_priv->int_tv_support) if (!dev_priv->vbt.int_tv_support)
return; return;
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment