Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3cb480bc authored by Maarten Lankhorst's avatar Maarten Lankhorst Committed by Jani Nikula
Browse files

drm/i915: Use drm_atomic_helper_update_legacy_modeset_state, v2.



Now that the helper is exported there's no need to duplicate
this code any more.

Changes since v1:
- move intel_modeset_update_staged_output_state call to the right place.

Signed-off-by: default avatarMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
Reviewed-by: default avatarMatt Roper <matthew.d.roper@intel.com>
Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
parent 1b509259
Loading
Loading
Loading
Loading
+4 −57
Original line number Diff line number Diff line
@@ -11737,43 +11737,6 @@ static void intel_modeset_update_connector_atomic_state(struct drm_device *dev)
	}
}

/* Fixup legacy state after an atomic state swap.
 */
static void intel_modeset_fixup_state(struct drm_atomic_state *state)
{
	struct intel_crtc *crtc;
	struct intel_encoder *encoder;
	struct intel_connector *connector;

	for_each_intel_connector(state->dev, connector) {
		connector->base.encoder = connector->base.state->best_encoder;
		if (connector->base.encoder)
			connector->base.encoder->crtc =
				connector->base.state->crtc;
	}

	/* Update crtc of disabled encoders */
	for_each_intel_encoder(state->dev, encoder) {
		int num_connectors = 0;

		for_each_intel_connector(state->dev, connector)
			if (connector->base.encoder == &encoder->base)
				num_connectors++;

		if (num_connectors == 0)
			encoder->base.crtc = NULL;
	}

	for_each_intel_crtc(state->dev, crtc) {
		crtc->base.enabled = crtc->base.state->enable;
		crtc->config = to_intel_crtc_state(crtc->base.state);
	}

	/* Copy the new configuration to the staged state, to keep the few
	 * pieces of code that haven't been converted yet happy */
	intel_modeset_update_staged_output_state(state->dev);
}

static void
connected_sink_compute_bpp(struct intel_connector *connector,
			   struct intel_crtc_state *pipe_config)
@@ -12261,11 +12224,14 @@ intel_modeset_update_state(struct drm_atomic_state *state)
		intel_encoder->connectors_active = false;
	}

	intel_modeset_fixup_state(state);
	drm_atomic_helper_update_legacy_modeset_state(state->dev, state);
	intel_modeset_update_staged_output_state(state->dev);

	/* Double check state. */
	for_each_crtc(dev, crtc) {
		WARN_ON(crtc->state->enable != intel_crtc_in_use(crtc));

		to_intel_crtc(crtc)->config = to_intel_crtc_state(crtc->state);
	}

	list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
@@ -12972,25 +12938,6 @@ static int __intel_set_mode(struct drm_crtc *modeset_crtc,
			drm_plane_helper_disable(crtc->primary);
	}

	/* crtc->mode is already used by the ->mode_set callbacks, hence we need
	 * to set it here already despite that we pass it down the callchain.
	 *
	 * Note we'll need to fix this up when we start tracking multiple
	 * pipes; here we assume a single modeset_pipe and only track the
	 * single crtc and mode.
	 */
	if (pipe_config->base.enable && needs_modeset(&pipe_config->base)) {
		modeset_crtc->mode = pipe_config->base.mode;

		/*
		 * Calculate and store various constants which
		 * are later needed by vblank and swap-completion
		 * timestamping. They are derived from true hwmode.
		 */
		drm_calc_timestamping_constants(modeset_crtc,
						&pipe_config->base.adjusted_mode);
	}

	/* Only after disabling all output pipelines that will be changed can we
	 * update the the output configuration. */
	intel_modeset_update_state(state);