Commit 5cb5b370 authored by José Roberto de Souza's avatar José Roberto de Souza
Browse files

drm/i915/display: Prepare for fastset external dependencies check



MST and port sync have master and slaves pipes and it brings
dependencies between pipes to allow fastset.
For example if only MST master needs a modeset all of its slaves also
needs to do a modeset.

This patch adds the base for external dependencies check, the MST and
port sync bits will be added in another patches.

v3:
- moved handling to intel_atomic_check() this way is guarantee that
all pipes will have its state computed

v4:
- added a function to return if MST master neeeds modeset to simply
code in intel_atomic_check()

v5:
- fixed and moved code to check if MST master needs a modeset

v6:
- previons version of this patch was split into two patches

Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Manasi Navare <manasi.d.navare@intel.com>
Reviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: default avatarJosé Roberto de Souza <jose.souza@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20191223010654.67037-5-jose.souza@intel.com
parent c59053dc
Loading
Loading
Loading
Loading
+15 −3
Original line number Diff line number Diff line
@@ -14163,7 +14163,11 @@ static void intel_crtc_check_fastset(const struct intel_crtc_state *old_crtc_sta
	new_crtc_state->uapi.mode_changed = false;
	new_crtc_state->update_pipe = true;
}
static void intel_crtc_copy_fastset(const struct intel_crtc_state *old_crtc_state,
				    struct intel_crtc_state *new_crtc_state)
{
	/*
	 * If we're not doing the full modeset we want to
	 * keep the current M/N values as they may be
@@ -14324,8 +14328,6 @@ static int intel_atomic_check(struct drm_device *dev,
		if (!new_crtc_state->uapi.enable) {
			intel_crtc_copy_uapi_to_hw_state(new_crtc_state);
			any_ms = true;
			continue;
		}
@@ -14338,9 +14340,19 @@ static int intel_atomic_check(struct drm_device *dev,
			goto fail;
		intel_crtc_check_fastset(old_crtc_state, new_crtc_state);
	}
		if (needs_modeset(new_crtc_state))
	for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state,
					    new_crtc_state, i) {
		if (needs_modeset(new_crtc_state)) {
			any_ms = true;
			continue;
		}
		if (!new_crtc_state->update_pipe)
			continue;
		intel_crtc_copy_fastset(old_crtc_state, new_crtc_state);
	}
	if (any_ms && !check_digital_port_conflicts(state)) {