summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_display.c
diff options
context:
space:
mode:
authorDaniel Vetter2015-07-15 14:15:51 +0200
committerDaniel Vetter2015-07-15 17:18:19 +0200
commit1ed51de9ca9170d1c5361924a17e7c483050aeb6 (patch)
tree489755f33ba330ab375d68c22c3452b558a80d2d /drivers/gpu/drm/i915/intel_display.c
parentdrm/i915: Unconditionally check gmch pfit state (diff)
downloadkernel-qcow2-linux-1ed51de9ca9170d1c5361924a17e7c483050aeb6.tar.gz
kernel-qcow2-linux-1ed51de9ca9170d1c5361924a17e7c483050aeb6.tar.xz
kernel-qcow2-linux-1ed51de9ca9170d1c5361924a17e7c483050aeb6.zip
drm/i915: Clarify logic for initial modeset
Currently we both set mode->private_flags to some value and also use the pipe_config quirk. But since the pipe_config quirk isn't tied to the lifetime of the mode object we need to check both. Simplify this by only using mode.private_flags and stop using the INHERITED_MODE quirk. Also for clarity add an explicit #define for that driver priavete mode flag. By using crtc_state->mode_changed we can also remove the recalc local variable. Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com> Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_display.c')
-rw-r--r--drivers/gpu/drm/i915/intel_display.c34
1 files changed, 12 insertions, 22 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index c29e7ed5fbb7..ce71552d4498 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -13161,7 +13161,11 @@ static int intel_atomic_check(struct drm_device *dev,
for_each_crtc_in_state(state, crtc, crtc_state, i) {
struct intel_crtc_state *pipe_config =
to_intel_crtc_state(crtc_state);
- bool modeset, recalc = false;
+ bool modeset;
+
+ /* Catch I915_MODE_FLAG_INHERITED */
+ if (crtc_state->mode.private_flags != crtc->state->mode.private_flags)
+ crtc_state->mode_changed = true;
if (!crtc_state->enable) {
if (needs_modeset(crtc_state))
@@ -13170,28 +13174,22 @@ static int intel_atomic_check(struct drm_device *dev,
}
modeset = needs_modeset(crtc_state);
- /* see comment in intel_modeset_readout_hw_state */
- if (!modeset && crtc_state->mode_blob != crtc->state->mode_blob &&
- pipe_config->quirks & PIPE_CONFIG_QUIRK_INHERITED_MODE)
- recalc = true;
- if (!modeset && !recalc)
+ if (!modeset)
continue;
- if (recalc) {
- ret = drm_atomic_add_affected_connectors(state, crtc);
- if (ret)
- return ret;
- }
+ ret = drm_atomic_add_affected_connectors(state, crtc);
+ if (ret)
+ return ret;
ret = intel_modeset_pipe_config(crtc, pipe_config);
if (ret)
return ret;
- if (recalc && (!i915.fastboot ||
+ if (!i915.fastboot ||
!intel_pipe_config_compare(state->dev,
to_intel_crtc_state(crtc->state),
- pipe_config, true))) {
+ pipe_config, true)) {
modeset = crtc_state->mode_changed = true;
ret = drm_atomic_add_affected_planes(state, crtc);
@@ -15238,8 +15236,6 @@ static void intel_modeset_readout_hw_state(struct drm_device *dev)
memset(crtc->config, 0, sizeof(*crtc->config));
crtc->config->base.crtc = &crtc->base;
- crtc->config->quirks |= PIPE_CONFIG_QUIRK_INHERITED_MODE;
-
crtc->active = dev_priv->display.get_pipe_config(crtc,
crtc->config);
@@ -15265,17 +15261,11 @@ static void intel_modeset_readout_hw_state(struct drm_device *dev)
* right now it would cause a double modeset if
* fbdev or userspace chooses a different initial mode.
*
- * So to prevent the double modeset, fail the memcmp
- * test in drm_atomic_set_mode_for_crtc to get a new
- * mode blob, and compare if the mode blob changed
- * when the PIPE_CONFIG_QUIRK_INHERITED_MODE quirk is
- * set.
- *
* If that happens, someone indicated they wanted a
* mode change, which means it's safe to do a full
* recalculation.
*/
- crtc->base.state->mode.private_flags = ~0;
+ crtc->base.state->mode.private_flags = I915_MODE_FLAG_INHERITED;
}
crtc->base.hwmode = crtc->config->base.adjusted_mode;