|
@@ -133,9 +133,16 @@ static void imx_drm_atomic_commit_tail(struct drm_atomic_state *state)
|
|
plane_disabling = true;
|
|
plane_disabling = true;
|
|
}
|
|
}
|
|
|
|
|
|
- if (plane_disabling) {
|
|
|
|
- drm_atomic_helper_wait_for_vblanks(dev, state);
|
|
|
|
|
|
+ /*
|
|
|
|
+ * The flip done wait is only strictly required by imx-drm if a deferred
|
|
|
|
+ * plane disable is in-flight. As the core requires blocking commits
|
|
|
|
+ * to wait for the flip it is done here unconditionally. This keeps the
|
|
|
|
+ * workitem around a bit longer than required for the majority of
|
|
|
|
+ * non-blocking commits, but we accept that for the sake of simplicity.
|
|
|
|
+ */
|
|
|
|
+ drm_atomic_helper_wait_for_flip_done(dev, state);
|
|
|
|
|
|
|
|
+ if (plane_disabling) {
|
|
for_each_old_plane_in_state(state, plane, old_plane_state, i)
|
|
for_each_old_plane_in_state(state, plane, old_plane_state, i)
|
|
ipu_plane_disable_deferred(plane);
|
|
ipu_plane_disable_deferred(plane);
|
|
|
|
|