|
@@ -9654,11 +9654,22 @@ intel_pipe_config_compare(struct drm_device *dev,
|
|
PIPE_CONF_CHECK_I(pipe_src_w);
|
|
PIPE_CONF_CHECK_I(pipe_src_w);
|
|
PIPE_CONF_CHECK_I(pipe_src_h);
|
|
PIPE_CONF_CHECK_I(pipe_src_h);
|
|
|
|
|
|
- PIPE_CONF_CHECK_I(gmch_pfit.control);
|
|
|
|
- /* pfit ratios are autocomputed by the hw on gen4+ */
|
|
|
|
- if (INTEL_INFO(dev)->gen < 4)
|
|
|
|
- PIPE_CONF_CHECK_I(gmch_pfit.pgm_ratios);
|
|
|
|
- PIPE_CONF_CHECK_I(gmch_pfit.lvds_border_bits);
|
|
|
|
|
|
+ /*
|
|
|
|
+ * FIXME: BIOS likes to set up a cloned config with lvds+external
|
|
|
|
+ * screen. Since we don't yet re-compute the pipe config when moving
|
|
|
|
+ * just the lvds port away to another pipe the sw tracking won't match.
|
|
|
|
+ *
|
|
|
|
+ * Proper atomic modesets with recomputed global state will fix this.
|
|
|
|
+ * Until then just don't check gmch state for inherited modes.
|
|
|
|
+ */
|
|
|
|
+ if (!PIPE_CONF_QUIRK(PIPE_CONFIG_QUIRK_INHERITED_MODE)) {
|
|
|
|
+ PIPE_CONF_CHECK_I(gmch_pfit.control);
|
|
|
|
+ /* pfit ratios are autocomputed by the hw on gen4+ */
|
|
|
|
+ if (INTEL_INFO(dev)->gen < 4)
|
|
|
|
+ PIPE_CONF_CHECK_I(gmch_pfit.pgm_ratios);
|
|
|
|
+ PIPE_CONF_CHECK_I(gmch_pfit.lvds_border_bits);
|
|
|
|
+ }
|
|
|
|
+
|
|
PIPE_CONF_CHECK_I(pch_pfit.enabled);
|
|
PIPE_CONF_CHECK_I(pch_pfit.enabled);
|
|
if (current_config->pch_pfit.enabled) {
|
|
if (current_config->pch_pfit.enabled) {
|
|
PIPE_CONF_CHECK_I(pch_pfit.pos);
|
|
PIPE_CONF_CHECK_I(pch_pfit.pos);
|
|
@@ -11616,6 +11627,8 @@ static void intel_modeset_readout_hw_state(struct drm_device *dev)
|
|
base.head) {
|
|
base.head) {
|
|
memset(&crtc->config, 0, sizeof(crtc->config));
|
|
memset(&crtc->config, 0, sizeof(crtc->config));
|
|
|
|
|
|
|
|
+ crtc->config.quirks |= PIPE_CONFIG_QUIRK_INHERITED_MODE;
|
|
|
|
+
|
|
crtc->active = dev_priv->display.get_pipe_config(crtc,
|
|
crtc->active = dev_priv->display.get_pipe_config(crtc,
|
|
&crtc->config);
|
|
&crtc->config);
|
|
|
|
|