|
@@ -7712,22 +7712,25 @@ intel_modeset_affected_pipes(struct drm_crtc *crtc, unsigned *modeset_pipes,
|
|
|
if (crtc->enabled)
|
|
|
*prepare_pipes |= 1 << intel_crtc->pipe;
|
|
|
|
|
|
- /* We only support modeset on one single crtc, hence we need to do that
|
|
|
- * only for the passed in crtc iff we change anything else than just
|
|
|
- * disable crtcs.
|
|
|
- *
|
|
|
- * This is actually not true, to be fully compatible with the old crtc
|
|
|
- * helper we automatically disable _any_ output (i.e. doesn't need to be
|
|
|
- * connected to the crtc we're modesetting on) if it's disconnected.
|
|
|
- * Which is a rather nutty api (since changed the output configuration
|
|
|
- * without userspace's explicit request can lead to confusion), but
|
|
|
- * alas. Hence we currently need to modeset on all pipes we prepare. */
|
|
|
+ /*
|
|
|
+ * For simplicity do a full modeset on any pipe where the output routing
|
|
|
+ * changed. We could be more clever, but that would require us to be
|
|
|
+ * more careful with calling the relevant encoder->mode_set functions.
|
|
|
+ */
|
|
|
if (*prepare_pipes)
|
|
|
*modeset_pipes = *prepare_pipes;
|
|
|
|
|
|
/* ... and mask these out. */
|
|
|
*modeset_pipes &= ~(*disable_pipes);
|
|
|
*prepare_pipes &= ~(*disable_pipes);
|
|
|
+
|
|
|
+ /*
|
|
|
+ * HACK: We don't (yet) fully support global modesets. intel_set_config
|
|
|
+ * obies this rule, but the modeset restore mode of
|
|
|
+ * intel_modeset_setup_hw_state does not.
|
|
|
+ */
|
|
|
+ *modeset_pipes &= 1 << intel_crtc->pipe;
|
|
|
+ *prepare_pipes &= 1 << intel_crtc->pipe;
|
|
|
}
|
|
|
|
|
|
static bool intel_crtc_in_use(struct drm_crtc *crtc)
|