|
|
@@ -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);
|