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

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

drm/i915: calculate primary visibility changes instead of calling from set_config



This should be much cleaner, with the same effects.

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 8a8f7f44
Loading
Loading
Loading
Loading
+7 −39
Original line number Diff line number Diff line
@@ -13225,20 +13225,11 @@ intel_modeset_stage_output_state(struct drm_device *dev,
	return 0;
}

static bool primary_plane_visible(struct drm_crtc *crtc)
{
	struct intel_plane_state *plane_state =
		to_intel_plane_state(crtc->primary->state);

	return plane_state->visible;
}

static int intel_crtc_set_config(struct drm_mode_set *set)
{
	struct drm_device *dev;
	struct drm_atomic_state *state = NULL;
	struct intel_crtc_state *pipe_config;
	bool primary_plane_was_visible;
	int ret;

	BUG_ON(!set);
@@ -13277,38 +13268,8 @@ static int intel_crtc_set_config(struct drm_mode_set *set)

	intel_update_pipe_size(to_intel_crtc(set->crtc));

	primary_plane_was_visible = primary_plane_visible(set->crtc);

	ret = intel_set_mode_with_config(set->crtc, pipe_config);

	if (ret == 0 &&
	    pipe_config->base.enable &&
	    pipe_config->base.planes_changed &&
	    !needs_modeset(&pipe_config->base)) {
		struct intel_crtc *intel_crtc = to_intel_crtc(set->crtc);

		/*
		 * We need to make sure the primary plane is re-enabled if it
		 * has previously been turned off.
		 */
		if (ret == 0 && !primary_plane_was_visible &&
		    primary_plane_visible(set->crtc)) {
			WARN_ON(!intel_crtc->active);
			intel_post_enable_primary(set->crtc);
		}

		/*
		 * In the fastboot case this may be our only check of the
		 * state after boot.  It would be better to only do it on
		 * the first update, but we don't have a nice way of doing that
		 * (and really, set_config isn't used much for high freq page
		 * flipping, so increasing its cost here shouldn't be a big
		 * deal).
		 */
		if (i915.fastboot && ret == 0)
			intel_modeset_check_state(set->crtc->dev);
	}

	if (ret) {
		DRM_DEBUG_KMS("failed to set mode on [CRTC:%d], err = %d\n",
			      set->crtc->base.id, ret);
@@ -13641,8 +13602,15 @@ intel_check_primary_plane(struct drm_plane *plane,
			 */
			if (IS_BROADWELL(dev))
				intel_crtc->atomic.wait_vblank = true;

			if (crtc_state && !needs_modeset(&crtc_state->base))
				intel_crtc->atomic.post_enable_primary = true;
		}

		if (!state->visible && old_state->visible &&
		    crtc_state && !needs_modeset(&crtc_state->base))
			intel_crtc->atomic.pre_disable_primary = true;

		intel_crtc->atomic.fb_bits |=
			INTEL_FRONTBUFFER_PRIMARY(intel_crtc->pipe);