diff options
Diffstat (limited to 'drivers/gpu/drm/i915/intel_atomic.c')
| -rw-r--r-- | drivers/gpu/drm/i915/intel_atomic.c | 45 | 
1 files changed, 8 insertions, 37 deletions
diff --git a/drivers/gpu/drm/i915/intel_atomic.c b/drivers/gpu/drm/i915/intel_atomic.c index 7ed8033aae60..8e35e0d013df 100644 --- a/drivers/gpu/drm/i915/intel_atomic.c +++ b/drivers/gpu/drm/i915/intel_atomic.c @@ -129,8 +129,9 @@ int intel_atomic_commit(struct drm_device *dev,  			struct drm_atomic_state *state,  			bool async)  { -	int ret; -	int i; +	struct drm_crtc_state *crtc_state; +	struct drm_crtc *crtc; +	int ret, i;  	if (async) {  		DRM_DEBUG_KMS("i915 does not yet support async commit\n"); @@ -142,48 +143,18 @@ int intel_atomic_commit(struct drm_device *dev,  		return ret;  	/* Point of no return */ - -	/* -	 * FIXME:  The proper sequence here will eventually be: -	 * -	 * drm_atomic_helper_swap_state(dev, state) -	 * drm_atomic_helper_commit_modeset_disables(dev, state); -	 * drm_atomic_helper_commit_planes(dev, state); -	 * drm_atomic_helper_commit_modeset_enables(dev, state); -	 * drm_atomic_helper_wait_for_vblanks(dev, state); -	 * drm_atomic_helper_cleanup_planes(dev, state); -	 * drm_atomic_state_free(state); -	 * -	 * once we have full atomic modeset.  For now, just manually update -	 * plane states to avoid clobbering good states with dummy states -	 * while nuclear pageflipping. -	 */ -	for (i = 0; i < dev->mode_config.num_total_plane; i++) { -		struct drm_plane *plane = state->planes[i]; - -		if (!plane) -			continue; - -		plane->state->state = state; -		swap(state->plane_states[i], plane->state); -		plane->state->state = NULL; -	} +	drm_atomic_helper_swap_state(dev, state);  	/* swap crtc_scaler_state */ -	for (i = 0; i < dev->mode_config.num_crtc; i++) { -		struct drm_crtc *crtc = state->crtcs[i]; -		if (!crtc) { -			continue; -		} - -		to_intel_crtc(crtc)->config->scaler_state = -			to_intel_crtc_state(state->crtc_states[i])->scaler_state; +	for_each_crtc_in_state(state, crtc, crtc_state, i) { +		to_intel_crtc(crtc)->config = to_intel_crtc_state(crtc->state);  		if (INTEL_INFO(dev)->gen >= 9)  			skl_detach_scalers(to_intel_crtc(crtc)); + +		drm_atomic_helper_commit_planes_on_crtc(crtc_state);  	} -	drm_atomic_helper_commit_planes(dev, state);  	drm_atomic_helper_wait_for_vblanks(dev, state);  	drm_atomic_helper_cleanup_planes(dev, state);  	drm_atomic_state_free(state);  |