Merge branch 'drm-intel-fixes' of git://people.freedesktop.org/~danvet/drm-intel
Daniel writes: - Unbreak mbp retina, this time with a much more fine-grained approach (since the previous "completely ignore edp vbt bpp value" regressed some machines even after fixing a bug in our dp bw code). - Disable cloning on sdvo. It just doesn't work (yeah took us a while to figure out), leading to jittery outputs in the best case. - Revert rc6 for ilk again. It seems to help a few of the gpu hang reporters at least, and it's definitely the best we've got. Head-against-the-wall-banging is still ongoing for what really breaks (and how we can reproduce the non-rc6 hangs and how to reproduce on gen4). * 'drm-intel-fixes' of git://people.freedesktop.org/~danvet/drm-intel: Revert "drm/i915: enable rc6 on ilk again" drm/i915: do not default to 18 bpp for eDP if missing from VBT drm/i915: disable cloning on sdvo
This commit is contained in:
@@ -499,12 +499,8 @@ 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->edp.support)
|
||||||
DRM_DEBUG_KMS("No eDP BDB found but eDP panel "
|
DRM_DEBUG_KMS("No eDP BDB found but eDP panel supported.\n");
|
||||||
"supported, assume %dbpp panel color "
|
|
||||||
"depth.\n",
|
|
||||||
dev_priv->edp.bpp);
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -657,9 +653,6 @@ init_vbt_defaults(struct drm_i915_private *dev_priv)
|
|||||||
dev_priv->lvds_use_ssc = 1;
|
dev_priv->lvds_use_ssc = 1;
|
||||||
dev_priv->lvds_ssc_freq = intel_bios_ssc_frequency(dev, 1);
|
dev_priv->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->lvds_ssc_freq);
|
||||||
|
|
||||||
/* eDP data */
|
|
||||||
dev_priv->edp.bpp = 18;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
||||||
|
@@ -3845,7 +3845,7 @@ static bool intel_choose_pipe_bpp_dither(struct drm_crtc *crtc,
|
|||||||
/* Use VBT settings if we have an eDP panel */
|
/* Use VBT settings if we have an eDP panel */
|
||||||
unsigned int edp_bpc = dev_priv->edp.bpp / 3;
|
unsigned int edp_bpc = dev_priv->edp.bpp / 3;
|
||||||
|
|
||||||
if (edp_bpc < display_bpc) {
|
if (edp_bpc && edp_bpc < display_bpc) {
|
||||||
DRM_DEBUG_KMS("clamping display bpc (was %d) to eDP (%d)\n", display_bpc, edp_bpc);
|
DRM_DEBUG_KMS("clamping display bpc (was %d) to eDP (%d)\n", display_bpc, edp_bpc);
|
||||||
display_bpc = edp_bpc;
|
display_bpc = edp_bpc;
|
||||||
}
|
}
|
||||||
|
@@ -2373,15 +2373,9 @@ int intel_enable_rc6(const struct drm_device *dev)
|
|||||||
if (i915_enable_rc6 >= 0)
|
if (i915_enable_rc6 >= 0)
|
||||||
return i915_enable_rc6;
|
return i915_enable_rc6;
|
||||||
|
|
||||||
if (INTEL_INFO(dev)->gen == 5) {
|
/* Disable RC6 on Ironlake */
|
||||||
#ifdef CONFIG_INTEL_IOMMU
|
if (INTEL_INFO(dev)->gen == 5)
|
||||||
/* Disable rc6 on ilk if VT-d is on. */
|
return 0;
|
||||||
if (intel_iommu_gfx_mapped)
|
|
||||||
return false;
|
|
||||||
#endif
|
|
||||||
DRM_DEBUG_DRIVER("Ironlake: only RC6 available\n");
|
|
||||||
return INTEL_RC6_ENABLE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (IS_HASWELL(dev)) {
|
if (IS_HASWELL(dev)) {
|
||||||
DRM_DEBUG_DRIVER("Haswell: only RC6 available\n");
|
DRM_DEBUG_DRIVER("Haswell: only RC6 available\n");
|
||||||
|
@@ -2201,7 +2201,6 @@ intel_sdvo_dvi_init(struct intel_sdvo *intel_sdvo, int device)
|
|||||||
connector->connector_type = DRM_MODE_CONNECTOR_HDMIA;
|
connector->connector_type = DRM_MODE_CONNECTOR_HDMIA;
|
||||||
intel_sdvo->is_hdmi = true;
|
intel_sdvo->is_hdmi = true;
|
||||||
}
|
}
|
||||||
intel_sdvo->base.cloneable = true;
|
|
||||||
|
|
||||||
intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo);
|
intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo);
|
||||||
if (intel_sdvo->is_hdmi)
|
if (intel_sdvo->is_hdmi)
|
||||||
@@ -2232,7 +2231,6 @@ intel_sdvo_tv_init(struct intel_sdvo *intel_sdvo, int type)
|
|||||||
|
|
||||||
intel_sdvo->is_tv = true;
|
intel_sdvo->is_tv = true;
|
||||||
intel_sdvo->base.needs_tv_clock = true;
|
intel_sdvo->base.needs_tv_clock = true;
|
||||||
intel_sdvo->base.cloneable = false;
|
|
||||||
|
|
||||||
intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo);
|
intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo);
|
||||||
|
|
||||||
@@ -2275,8 +2273,6 @@ intel_sdvo_analog_init(struct intel_sdvo *intel_sdvo, int device)
|
|||||||
intel_sdvo_connector->output_flag = SDVO_OUTPUT_RGB1;
|
intel_sdvo_connector->output_flag = SDVO_OUTPUT_RGB1;
|
||||||
}
|
}
|
||||||
|
|
||||||
intel_sdvo->base.cloneable = true;
|
|
||||||
|
|
||||||
intel_sdvo_connector_init(intel_sdvo_connector,
|
intel_sdvo_connector_init(intel_sdvo_connector,
|
||||||
intel_sdvo);
|
intel_sdvo);
|
||||||
return true;
|
return true;
|
||||||
@@ -2307,9 +2303,6 @@ intel_sdvo_lvds_init(struct intel_sdvo *intel_sdvo, int device)
|
|||||||
intel_sdvo_connector->output_flag = SDVO_OUTPUT_LVDS1;
|
intel_sdvo_connector->output_flag = SDVO_OUTPUT_LVDS1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* SDVO LVDS is not cloneable because the input mode gets adjusted by the encoder */
|
|
||||||
intel_sdvo->base.cloneable = false;
|
|
||||||
|
|
||||||
intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo);
|
intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo);
|
||||||
if (!intel_sdvo_create_enhance_property(intel_sdvo, intel_sdvo_connector))
|
if (!intel_sdvo_create_enhance_property(intel_sdvo, intel_sdvo_connector))
|
||||||
goto err;
|
goto err;
|
||||||
@@ -2721,6 +2714,16 @@ bool intel_sdvo_init(struct drm_device *dev, uint32_t sdvo_reg, bool is_sdvob)
|
|||||||
goto err_output;
|
goto err_output;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Cloning SDVO with anything is often impossible, since the SDVO
|
||||||
|
* encoder can request a special input timing mode. And even if that's
|
||||||
|
* not the case we have evidence that cloning a plain unscaled mode with
|
||||||
|
* VGA doesn't really work. Furthermore the cloning flags are way too
|
||||||
|
* simplistic anyway to express such constraints, so just give up on
|
||||||
|
* cloning for SDVO encoders.
|
||||||
|
*/
|
||||||
|
intel_sdvo->base.cloneable = false;
|
||||||
|
|
||||||
/* Only enable the hotplug irq if we need it, to work around noisy
|
/* Only enable the hotplug irq if we need it, to work around noisy
|
||||||
* hotplug lines.
|
* hotplug lines.
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user