diff options
author | Dave Airlie <airlied@redhat.com> | 2016-06-14 20:30:23 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2016-06-14 20:30:23 -0400 |
commit | 902daaacc0e8b4cea979f837873e1f63254f201d (patch) | |
tree | ac67709022795709a0f456b8f19be162584e57cb | |
parent | 27bf60db2485c09eba3b473ce5ffbaa4bba0c24e (diff) | |
parent | 476490a945e1f0f6bd58e303058d2d8ca93a974c (diff) |
Merge tag 'drm-intel-fixes-2016-06-14' of git://anongit.freedesktop.org/drm-intel into drm-fixes
"Pretty much all regression fixes, or black screens."
* tag 'drm-intel-fixes-2016-06-14' of git://anongit.freedesktop.org/drm-intel:
drm/i915/ilk: Don't disable SSC source if it's in use
drm/i915: Extract physical display dimensions from VBT
drm/i915: Check VBT for port presence in addition to the strap on VLV/CHV
drm/i915: Only ignore eDP ports that are connected
drm/i915: Silence "unexpected child device config size" for VBT on 845g
drm/i915: Fix NULL pointer deference when out of PLLs in IVB
-rw-r--r-- | drivers/gpu/drm/i915/i915_drv.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_bios.c | 46 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 88 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_dp.c | 18 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_dpll_mgr.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_drv.h | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_dsi.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_hdmi.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_lvds.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_vbt_defs.h | 7 |
10 files changed, 132 insertions, 41 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index 5faacc6e548d..7c334e902266 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h | |||
@@ -3481,6 +3481,7 @@ int intel_bios_init(struct drm_i915_private *dev_priv); | |||
3481 | bool intel_bios_is_valid_vbt(const void *buf, size_t size); | 3481 | bool intel_bios_is_valid_vbt(const void *buf, size_t size); |
3482 | bool intel_bios_is_tv_present(struct drm_i915_private *dev_priv); | 3482 | bool intel_bios_is_tv_present(struct drm_i915_private *dev_priv); |
3483 | bool intel_bios_is_lvds_present(struct drm_i915_private *dev_priv, u8 *i2c_pin); | 3483 | bool intel_bios_is_lvds_present(struct drm_i915_private *dev_priv, u8 *i2c_pin); |
3484 | bool intel_bios_is_port_present(struct drm_i915_private *dev_priv, enum port port); | ||
3484 | bool intel_bios_is_port_edp(struct drm_i915_private *dev_priv, enum port port); | 3485 | bool intel_bios_is_port_edp(struct drm_i915_private *dev_priv, enum port port); |
3485 | bool intel_bios_is_port_dp_dual_mode(struct drm_i915_private *dev_priv, enum port port); | 3486 | bool intel_bios_is_port_dp_dual_mode(struct drm_i915_private *dev_priv, enum port port); |
3486 | bool intel_bios_is_dsi_present(struct drm_i915_private *dev_priv, enum port *port); | 3487 | bool intel_bios_is_dsi_present(struct drm_i915_private *dev_priv, enum port *port); |
diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c index b235b6e88ead..b9022fa053d6 100644 --- a/drivers/gpu/drm/i915/intel_bios.c +++ b/drivers/gpu/drm/i915/intel_bios.c | |||
@@ -139,6 +139,11 @@ fill_detail_timing_data(struct drm_display_mode *panel_fixed_mode, | |||
139 | else | 139 | else |
140 | panel_fixed_mode->flags |= DRM_MODE_FLAG_NVSYNC; | 140 | panel_fixed_mode->flags |= DRM_MODE_FLAG_NVSYNC; |
141 | 141 | ||
142 | panel_fixed_mode->width_mm = (dvo_timing->himage_hi << 8) | | ||
143 | dvo_timing->himage_lo; | ||
144 | panel_fixed_mode->height_mm = (dvo_timing->vimage_hi << 8) | | ||
145 | dvo_timing->vimage_lo; | ||
146 | |||
142 | /* Some VBTs have bogus h/vtotal values */ | 147 | /* Some VBTs have bogus h/vtotal values */ |
143 | if (panel_fixed_mode->hsync_end > panel_fixed_mode->htotal) | 148 | if (panel_fixed_mode->hsync_end > panel_fixed_mode->htotal) |
144 | panel_fixed_mode->htotal = panel_fixed_mode->hsync_end + 1; | 149 | panel_fixed_mode->htotal = panel_fixed_mode->hsync_end + 1; |
@@ -1187,7 +1192,7 @@ parse_device_mapping(struct drm_i915_private *dev_priv, | |||
1187 | } | 1192 | } |
1188 | if (bdb->version < 106) { | 1193 | if (bdb->version < 106) { |
1189 | expected_size = 22; | 1194 | expected_size = 22; |
1190 | } else if (bdb->version < 109) { | 1195 | } else if (bdb->version < 111) { |
1191 | expected_size = 27; | 1196 | expected_size = 27; |
1192 | } else if (bdb->version < 195) { | 1197 | } else if (bdb->version < 195) { |
1193 | BUILD_BUG_ON(sizeof(struct old_child_dev_config) != 33); | 1198 | BUILD_BUG_ON(sizeof(struct old_child_dev_config) != 33); |
@@ -1546,6 +1551,45 @@ bool intel_bios_is_lvds_present(struct drm_i915_private *dev_priv, u8 *i2c_pin) | |||
1546 | } | 1551 | } |
1547 | 1552 | ||
1548 | /** | 1553 | /** |
1554 | * intel_bios_is_port_present - is the specified digital port present | ||
1555 | * @dev_priv: i915 device instance | ||
1556 | * @port: port to check | ||
1557 | * | ||
1558 | * Return true if the device in %port is present. | ||
1559 | */ | ||
1560 | bool intel_bios_is_port_present(struct drm_i915_private *dev_priv, enum port port) | ||
1561 | { | ||
1562 | static const struct { | ||
1563 | u16 dp, hdmi; | ||
1564 | } port_mapping[] = { | ||
1565 | [PORT_B] = { DVO_PORT_DPB, DVO_PORT_HDMIB, }, | ||
1566 | [PORT_C] = { DVO_PORT_DPC, DVO_PORT_HDMIC, }, | ||
1567 | [PORT_D] = { DVO_PORT_DPD, DVO_PORT_HDMID, }, | ||
1568 | [PORT_E] = { DVO_PORT_DPE, DVO_PORT_HDMIE, }, | ||
1569 | }; | ||
1570 | int i; | ||
1571 | |||
1572 | /* FIXME maybe deal with port A as well? */ | ||
1573 | if (WARN_ON(port == PORT_A) || port >= ARRAY_SIZE(port_mapping)) | ||
1574 | return false; | ||
1575 | |||
1576 | if (!dev_priv->vbt.child_dev_num) | ||
1577 | return false; | ||
1578 | |||
1579 | for (i = 0; i < dev_priv->vbt.child_dev_num; i++) { | ||
1580 | const union child_device_config *p_child = | ||
1581 | &dev_priv->vbt.child_dev[i]; | ||
1582 | if ((p_child->common.dvo_port == port_mapping[port].dp || | ||
1583 | p_child->common.dvo_port == port_mapping[port].hdmi) && | ||
1584 | (p_child->common.device_type & (DEVICE_TYPE_TMDS_DVI_SIGNALING | | ||
1585 | DEVICE_TYPE_DISPLAYPORT_OUTPUT))) | ||
1586 | return true; | ||
1587 | } | ||
1588 | |||
1589 | return false; | ||
1590 | } | ||
1591 | |||
1592 | /** | ||
1549 | * intel_bios_is_port_edp - is the device in given port eDP | 1593 | * intel_bios_is_port_edp - is the device in given port eDP |
1550 | * @dev_priv: i915 device instance | 1594 | * @dev_priv: i915 device instance |
1551 | * @port: port to check | 1595 | * @port: port to check |
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 2113f401f0ba..56a1637c864f 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
@@ -8275,12 +8275,14 @@ static void ironlake_init_pch_refclk(struct drm_device *dev) | |||
8275 | { | 8275 | { |
8276 | struct drm_i915_private *dev_priv = dev->dev_private; | 8276 | struct drm_i915_private *dev_priv = dev->dev_private; |
8277 | struct intel_encoder *encoder; | 8277 | struct intel_encoder *encoder; |
8278 | int i; | ||
8278 | u32 val, final; | 8279 | u32 val, final; |
8279 | bool has_lvds = false; | 8280 | bool has_lvds = false; |
8280 | bool has_cpu_edp = false; | 8281 | bool has_cpu_edp = false; |
8281 | bool has_panel = false; | 8282 | bool has_panel = false; |
8282 | bool has_ck505 = false; | 8283 | bool has_ck505 = false; |
8283 | bool can_ssc = false; | 8284 | bool can_ssc = false; |
8285 | bool using_ssc_source = false; | ||
8284 | 8286 | ||
8285 | /* We need to take the global config into account */ | 8287 | /* We need to take the global config into account */ |
8286 | for_each_intel_encoder(dev, encoder) { | 8288 | for_each_intel_encoder(dev, encoder) { |
@@ -8307,8 +8309,22 @@ static void ironlake_init_pch_refclk(struct drm_device *dev) | |||
8307 | can_ssc = true; | 8309 | can_ssc = true; |
8308 | } | 8310 | } |
8309 | 8311 | ||
8310 | DRM_DEBUG_KMS("has_panel %d has_lvds %d has_ck505 %d\n", | 8312 | /* Check if any DPLLs are using the SSC source */ |
8311 | has_panel, has_lvds, has_ck505); | 8313 | for (i = 0; i < dev_priv->num_shared_dpll; i++) { |
8314 | u32 temp = I915_READ(PCH_DPLL(i)); | ||
8315 | |||
8316 | if (!(temp & DPLL_VCO_ENABLE)) | ||
8317 | continue; | ||
8318 | |||
8319 | if ((temp & PLL_REF_INPUT_MASK) == | ||
8320 | PLLB_REF_INPUT_SPREADSPECTRUMIN) { | ||
8321 | using_ssc_source = true; | ||
8322 | break; | ||
8323 | } | ||
8324 | } | ||
8325 | |||
8326 | DRM_DEBUG_KMS("has_panel %d has_lvds %d has_ck505 %d using_ssc_source %d\n", | ||
8327 | has_panel, has_lvds, has_ck505, using_ssc_source); | ||
8312 | 8328 | ||
8313 | /* Ironlake: try to setup display ref clock before DPLL | 8329 | /* Ironlake: try to setup display ref clock before DPLL |
8314 | * enabling. This is only under driver's control after | 8330 | * enabling. This is only under driver's control after |
@@ -8345,9 +8361,9 @@ static void ironlake_init_pch_refclk(struct drm_device *dev) | |||
8345 | final |= DREF_CPU_SOURCE_OUTPUT_NONSPREAD; | 8361 | final |= DREF_CPU_SOURCE_OUTPUT_NONSPREAD; |
8346 | } else | 8362 | } else |
8347 | final |= DREF_CPU_SOURCE_OUTPUT_DISABLE; | 8363 | final |= DREF_CPU_SOURCE_OUTPUT_DISABLE; |
8348 | } else { | 8364 | } else if (using_ssc_source) { |
8349 | final |= DREF_SSC_SOURCE_DISABLE; | 8365 | final |= DREF_SSC_SOURCE_ENABLE; |
8350 | final |= DREF_CPU_SOURCE_OUTPUT_DISABLE; | 8366 | final |= DREF_SSC1_ENABLE; |
8351 | } | 8367 | } |
8352 | 8368 | ||
8353 | if (final == val) | 8369 | if (final == val) |
@@ -8393,7 +8409,7 @@ static void ironlake_init_pch_refclk(struct drm_device *dev) | |||
8393 | POSTING_READ(PCH_DREF_CONTROL); | 8409 | POSTING_READ(PCH_DREF_CONTROL); |
8394 | udelay(200); | 8410 | udelay(200); |
8395 | } else { | 8411 | } else { |
8396 | DRM_DEBUG_KMS("Disabling SSC entirely\n"); | 8412 | DRM_DEBUG_KMS("Disabling CPU source output\n"); |
8397 | 8413 | ||
8398 | val &= ~DREF_CPU_SOURCE_OUTPUT_MASK; | 8414 | val &= ~DREF_CPU_SOURCE_OUTPUT_MASK; |
8399 | 8415 | ||
@@ -8404,16 +8420,20 @@ static void ironlake_init_pch_refclk(struct drm_device *dev) | |||
8404 | POSTING_READ(PCH_DREF_CONTROL); | 8420 | POSTING_READ(PCH_DREF_CONTROL); |
8405 | udelay(200); | 8421 | udelay(200); |
8406 | 8422 | ||
8407 | /* Turn off the SSC source */ | 8423 | if (!using_ssc_source) { |
8408 | val &= ~DREF_SSC_SOURCE_MASK; | 8424 | DRM_DEBUG_KMS("Disabling SSC source\n"); |
8409 | val |= DREF_SSC_SOURCE_DISABLE; | ||
8410 | 8425 | ||
8411 | /* Turn off SSC1 */ | 8426 | /* Turn off the SSC source */ |
8412 | val &= ~DREF_SSC1_ENABLE; | 8427 | val &= ~DREF_SSC_SOURCE_MASK; |
8428 | val |= DREF_SSC_SOURCE_DISABLE; | ||
8413 | 8429 | ||
8414 | I915_WRITE(PCH_DREF_CONTROL, val); | 8430 | /* Turn off SSC1 */ |
8415 | POSTING_READ(PCH_DREF_CONTROL); | 8431 | val &= ~DREF_SSC1_ENABLE; |
8416 | udelay(200); | 8432 | |
8433 | I915_WRITE(PCH_DREF_CONTROL, val); | ||
8434 | POSTING_READ(PCH_DREF_CONTROL); | ||
8435 | udelay(200); | ||
8436 | } | ||
8417 | } | 8437 | } |
8418 | 8438 | ||
8419 | BUG_ON(val != final); | 8439 | BUG_ON(val != final); |
@@ -14554,6 +14574,8 @@ static void intel_setup_outputs(struct drm_device *dev) | |||
14554 | if (I915_READ(PCH_DP_D) & DP_DETECTED) | 14574 | if (I915_READ(PCH_DP_D) & DP_DETECTED) |
14555 | intel_dp_init(dev, PCH_DP_D, PORT_D); | 14575 | intel_dp_init(dev, PCH_DP_D, PORT_D); |
14556 | } else if (IS_VALLEYVIEW(dev) || IS_CHERRYVIEW(dev)) { | 14576 | } else if (IS_VALLEYVIEW(dev) || IS_CHERRYVIEW(dev)) { |
14577 | bool has_edp, has_port; | ||
14578 | |||
14557 | /* | 14579 | /* |
14558 | * The DP_DETECTED bit is the latched state of the DDC | 14580 | * The DP_DETECTED bit is the latched state of the DDC |
14559 | * SDA pin at boot. However since eDP doesn't require DDC | 14581 | * SDA pin at boot. However since eDP doesn't require DDC |
@@ -14562,27 +14584,37 @@ static void intel_setup_outputs(struct drm_device *dev) | |||
14562 | * Thus we can't rely on the DP_DETECTED bit alone to detect | 14584 | * Thus we can't rely on the DP_DETECTED bit alone to detect |
14563 | * eDP ports. Consult the VBT as well as DP_DETECTED to | 14585 | * eDP ports. Consult the VBT as well as DP_DETECTED to |
14564 | * detect eDP ports. | 14586 | * detect eDP ports. |
14587 | * | ||
14588 | * Sadly the straps seem to be missing sometimes even for HDMI | ||
14589 | * ports (eg. on Voyo V3 - CHT x7-Z8700), so check both strap | ||
14590 | * and VBT for the presence of the port. Additionally we can't | ||
14591 | * trust the port type the VBT declares as we've seen at least | ||
14592 | * HDMI ports that the VBT claim are DP or eDP. | ||
14565 | */ | 14593 | */ |
14566 | if (I915_READ(VLV_HDMIB) & SDVO_DETECTED && | 14594 | has_edp = intel_dp_is_edp(dev, PORT_B); |
14567 | !intel_dp_is_edp(dev, PORT_B)) | 14595 | has_port = intel_bios_is_port_present(dev_priv, PORT_B); |
14596 | if (I915_READ(VLV_DP_B) & DP_DETECTED || has_port) | ||
14597 | has_edp &= intel_dp_init(dev, VLV_DP_B, PORT_B); | ||
14598 | if ((I915_READ(VLV_HDMIB) & SDVO_DETECTED || has_port) && !has_edp) | ||
14568 | intel_hdmi_init(dev, VLV_HDMIB, PORT_B); | 14599 | intel_hdmi_init(dev, VLV_HDMIB, PORT_B); |
14569 | if (I915_READ(VLV_DP_B) & DP_DETECTED || | ||
14570 | intel_dp_is_edp(dev, PORT_B)) | ||
14571 | intel_dp_init(dev, VLV_DP_B, PORT_B); | ||
14572 | 14600 | ||
14573 | if (I915_READ(VLV_HDMIC) & SDVO_DETECTED && | 14601 | has_edp = intel_dp_is_edp(dev, PORT_C); |
14574 | !intel_dp_is_edp(dev, PORT_C)) | 14602 | has_port = intel_bios_is_port_present(dev_priv, PORT_C); |
14603 | if (I915_READ(VLV_DP_C) & DP_DETECTED || has_port) | ||
14604 | has_edp &= intel_dp_init(dev, VLV_DP_C, PORT_C); | ||
14605 | if ((I915_READ(VLV_HDMIC) & SDVO_DETECTED || has_port) && !has_edp) | ||
14575 | intel_hdmi_init(dev, VLV_HDMIC, PORT_C); | 14606 | intel_hdmi_init(dev, VLV_HDMIC, PORT_C); |
14576 | if (I915_READ(VLV_DP_C) & DP_DETECTED || | ||
14577 | intel_dp_is_edp(dev, PORT_C)) | ||
14578 | intel_dp_init(dev, VLV_DP_C, PORT_C); | ||
14579 | 14607 | ||
14580 | if (IS_CHERRYVIEW(dev)) { | 14608 | if (IS_CHERRYVIEW(dev)) { |
14581 | /* eDP not supported on port D, so don't check VBT */ | 14609 | /* |
14582 | if (I915_READ(CHV_HDMID) & SDVO_DETECTED) | 14610 | * eDP not supported on port D, |
14583 | intel_hdmi_init(dev, CHV_HDMID, PORT_D); | 14611 | * so no need to worry about it |
14584 | if (I915_READ(CHV_DP_D) & DP_DETECTED) | 14612 | */ |
14613 | has_port = intel_bios_is_port_present(dev_priv, PORT_D); | ||
14614 | if (I915_READ(CHV_DP_D) & DP_DETECTED || has_port) | ||
14585 | intel_dp_init(dev, CHV_DP_D, PORT_D); | 14615 | intel_dp_init(dev, CHV_DP_D, PORT_D); |
14616 | if (I915_READ(CHV_HDMID) & SDVO_DETECTED || has_port) | ||
14617 | intel_hdmi_init(dev, CHV_HDMID, PORT_D); | ||
14586 | } | 14618 | } |
14587 | 14619 | ||
14588 | intel_dsi_init(dev); | 14620 | intel_dsi_init(dev); |
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c index f192f58708c2..ffe5f8430957 100644 --- a/drivers/gpu/drm/i915/intel_dp.c +++ b/drivers/gpu/drm/i915/intel_dp.c | |||
@@ -5725,8 +5725,11 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp, | |||
5725 | if (!fixed_mode && dev_priv->vbt.lfp_lvds_vbt_mode) { | 5725 | if (!fixed_mode && dev_priv->vbt.lfp_lvds_vbt_mode) { |
5726 | fixed_mode = drm_mode_duplicate(dev, | 5726 | fixed_mode = drm_mode_duplicate(dev, |
5727 | dev_priv->vbt.lfp_lvds_vbt_mode); | 5727 | dev_priv->vbt.lfp_lvds_vbt_mode); |
5728 | if (fixed_mode) | 5728 | if (fixed_mode) { |
5729 | fixed_mode->type |= DRM_MODE_TYPE_PREFERRED; | 5729 | fixed_mode->type |= DRM_MODE_TYPE_PREFERRED; |
5730 | connector->display_info.width_mm = fixed_mode->width_mm; | ||
5731 | connector->display_info.height_mm = fixed_mode->height_mm; | ||
5732 | } | ||
5730 | } | 5733 | } |
5731 | mutex_unlock(&dev->mode_config.mutex); | 5734 | mutex_unlock(&dev->mode_config.mutex); |
5732 | 5735 | ||
@@ -5923,9 +5926,9 @@ fail: | |||
5923 | return false; | 5926 | return false; |
5924 | } | 5927 | } |
5925 | 5928 | ||
5926 | void | 5929 | bool intel_dp_init(struct drm_device *dev, |
5927 | intel_dp_init(struct drm_device *dev, | 5930 | i915_reg_t output_reg, |
5928 | i915_reg_t output_reg, enum port port) | 5931 | enum port port) |
5929 | { | 5932 | { |
5930 | struct drm_i915_private *dev_priv = dev->dev_private; | 5933 | struct drm_i915_private *dev_priv = dev->dev_private; |
5931 | struct intel_digital_port *intel_dig_port; | 5934 | struct intel_digital_port *intel_dig_port; |
@@ -5935,7 +5938,7 @@ intel_dp_init(struct drm_device *dev, | |||
5935 | 5938 | ||
5936 | intel_dig_port = kzalloc(sizeof(*intel_dig_port), GFP_KERNEL); | 5939 | intel_dig_port = kzalloc(sizeof(*intel_dig_port), GFP_KERNEL); |
5937 | if (!intel_dig_port) | 5940 | if (!intel_dig_port) |
5938 | return; | 5941 | return false; |
5939 | 5942 | ||
5940 | intel_connector = intel_connector_alloc(); | 5943 | intel_connector = intel_connector_alloc(); |
5941 | if (!intel_connector) | 5944 | if (!intel_connector) |
@@ -5992,7 +5995,7 @@ intel_dp_init(struct drm_device *dev, | |||
5992 | if (!intel_dp_init_connector(intel_dig_port, intel_connector)) | 5995 | if (!intel_dp_init_connector(intel_dig_port, intel_connector)) |
5993 | goto err_init_connector; | 5996 | goto err_init_connector; |
5994 | 5997 | ||
5995 | return; | 5998 | return true; |
5996 | 5999 | ||
5997 | err_init_connector: | 6000 | err_init_connector: |
5998 | drm_encoder_cleanup(encoder); | 6001 | drm_encoder_cleanup(encoder); |
@@ -6000,8 +6003,7 @@ err_encoder_init: | |||
6000 | kfree(intel_connector); | 6003 | kfree(intel_connector); |
6001 | err_connector_alloc: | 6004 | err_connector_alloc: |
6002 | kfree(intel_dig_port); | 6005 | kfree(intel_dig_port); |
6003 | 6006 | return false; | |
6004 | return; | ||
6005 | } | 6007 | } |
6006 | 6008 | ||
6007 | void intel_dp_mst_suspend(struct drm_device *dev) | 6009 | void intel_dp_mst_suspend(struct drm_device *dev) |
diff --git a/drivers/gpu/drm/i915/intel_dpll_mgr.c b/drivers/gpu/drm/i915/intel_dpll_mgr.c index 3ac705936b04..baf6f5584cbd 100644 --- a/drivers/gpu/drm/i915/intel_dpll_mgr.c +++ b/drivers/gpu/drm/i915/intel_dpll_mgr.c | |||
@@ -366,6 +366,9 @@ ibx_get_dpll(struct intel_crtc *crtc, struct intel_crtc_state *crtc_state, | |||
366 | DPLL_ID_PCH_PLL_B); | 366 | DPLL_ID_PCH_PLL_B); |
367 | } | 367 | } |
368 | 368 | ||
369 | if (!pll) | ||
370 | return NULL; | ||
371 | |||
369 | /* reference the pll */ | 372 | /* reference the pll */ |
370 | intel_reference_shared_dpll(pll, crtc_state); | 373 | intel_reference_shared_dpll(pll, crtc_state); |
371 | 374 | ||
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h index a28b4aac1e02..4a24b0067a3a 100644 --- a/drivers/gpu/drm/i915/intel_drv.h +++ b/drivers/gpu/drm/i915/intel_drv.h | |||
@@ -1284,7 +1284,7 @@ void intel_csr_ucode_suspend(struct drm_i915_private *); | |||
1284 | void intel_csr_ucode_resume(struct drm_i915_private *); | 1284 | void intel_csr_ucode_resume(struct drm_i915_private *); |
1285 | 1285 | ||
1286 | /* intel_dp.c */ | 1286 | /* intel_dp.c */ |
1287 | void intel_dp_init(struct drm_device *dev, i915_reg_t output_reg, enum port port); | 1287 | bool intel_dp_init(struct drm_device *dev, i915_reg_t output_reg, enum port port); |
1288 | bool intel_dp_init_connector(struct intel_digital_port *intel_dig_port, | 1288 | bool intel_dp_init_connector(struct intel_digital_port *intel_dig_port, |
1289 | struct intel_connector *intel_connector); | 1289 | struct intel_connector *intel_connector); |
1290 | void intel_dp_set_link_params(struct intel_dp *intel_dp, | 1290 | void intel_dp_set_link_params(struct intel_dp *intel_dp, |
diff --git a/drivers/gpu/drm/i915/intel_dsi.c b/drivers/gpu/drm/i915/intel_dsi.c index 366ad6c67ce4..4756ef639648 100644 --- a/drivers/gpu/drm/i915/intel_dsi.c +++ b/drivers/gpu/drm/i915/intel_dsi.c | |||
@@ -1545,6 +1545,9 @@ void intel_dsi_init(struct drm_device *dev) | |||
1545 | goto err; | 1545 | goto err; |
1546 | } | 1546 | } |
1547 | 1547 | ||
1548 | connector->display_info.width_mm = fixed_mode->width_mm; | ||
1549 | connector->display_info.height_mm = fixed_mode->height_mm; | ||
1550 | |||
1548 | intel_panel_init(&intel_connector->panel, fixed_mode, NULL); | 1551 | intel_panel_init(&intel_connector->panel, fixed_mode, NULL); |
1549 | 1552 | ||
1550 | intel_dsi_add_properties(intel_connector); | 1553 | intel_dsi_add_properties(intel_connector); |
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c index 2c3bd9c2573e..a8844702d11b 100644 --- a/drivers/gpu/drm/i915/intel_hdmi.c +++ b/drivers/gpu/drm/i915/intel_hdmi.c | |||
@@ -2142,6 +2142,9 @@ void intel_hdmi_init_connector(struct intel_digital_port *intel_dig_port, | |||
2142 | enum port port = intel_dig_port->port; | 2142 | enum port port = intel_dig_port->port; |
2143 | uint8_t alternate_ddc_pin; | 2143 | uint8_t alternate_ddc_pin; |
2144 | 2144 | ||
2145 | DRM_DEBUG_KMS("Adding HDMI connector on port %c\n", | ||
2146 | port_name(port)); | ||
2147 | |||
2145 | if (WARN(intel_dig_port->max_lanes < 4, | 2148 | if (WARN(intel_dig_port->max_lanes < 4, |
2146 | "Not enough lanes (%d) for HDMI on port %c\n", | 2149 | "Not enough lanes (%d) for HDMI on port %c\n", |
2147 | intel_dig_port->max_lanes, port_name(port))) | 2150 | intel_dig_port->max_lanes, port_name(port))) |
diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c index bc53c0dd34d0..96281e628d2a 100644 --- a/drivers/gpu/drm/i915/intel_lvds.c +++ b/drivers/gpu/drm/i915/intel_lvds.c | |||
@@ -1082,6 +1082,8 @@ void intel_lvds_init(struct drm_device *dev) | |||
1082 | fixed_mode = drm_mode_duplicate(dev, dev_priv->vbt.lfp_lvds_vbt_mode); | 1082 | fixed_mode = drm_mode_duplicate(dev, dev_priv->vbt.lfp_lvds_vbt_mode); |
1083 | if (fixed_mode) { | 1083 | if (fixed_mode) { |
1084 | fixed_mode->type |= DRM_MODE_TYPE_PREFERRED; | 1084 | fixed_mode->type |= DRM_MODE_TYPE_PREFERRED; |
1085 | connector->display_info.width_mm = fixed_mode->width_mm; | ||
1086 | connector->display_info.height_mm = fixed_mode->height_mm; | ||
1085 | goto out; | 1087 | goto out; |
1086 | } | 1088 | } |
1087 | } | 1089 | } |
diff --git a/drivers/gpu/drm/i915/intel_vbt_defs.h b/drivers/gpu/drm/i915/intel_vbt_defs.h index c15051de8023..44fb0b35eed3 100644 --- a/drivers/gpu/drm/i915/intel_vbt_defs.h +++ b/drivers/gpu/drm/i915/intel_vbt_defs.h | |||
@@ -403,9 +403,10 @@ struct lvds_dvo_timing { | |||
403 | u8 vsync_off:4; | 403 | u8 vsync_off:4; |
404 | u8 rsvd0:6; | 404 | u8 rsvd0:6; |
405 | u8 hsync_off_hi:2; | 405 | u8 hsync_off_hi:2; |
406 | u8 h_image; | 406 | u8 himage_lo; |
407 | u8 v_image; | 407 | u8 vimage_lo; |
408 | u8 max_hv; | 408 | u8 vimage_hi:4; |
409 | u8 himage_hi:4; | ||
409 | u8 h_border; | 410 | u8 h_border; |
410 | u8 v_border; | 411 | u8 v_border; |
411 | u8 rsvd1:3; | 412 | u8 rsvd1:3; |