b/drivers/gpu/drm/drm_atomic_helper.c
@@ -516,6 +516,40 @@ static enum drm_mode_status mode_valid_path(struct
drm_connector *connector,
return 0;
}
+static int
+update_shared_planes(struct drm_device *dev, struct drm_atomic_state
*state)
+{
+ struct drm_plane *plane;
+ struct drm_plane_state *plane_state;
+ uint32_t plane_mask = 0;
+ int i, ret;
+
+ for_each_plane_in_state(state, plane, plane_state, i) {
+ if (plane->type == DRM_PLANE_TYPE_SHARED &&
plane_state->crtc)
+ plane_mask |= (1 << drm_plane_index(plane));
+ }
+
+ drm_for_each_sibling_plane_mask(plane, dev, plane_mask) {
+ /*
+ * sibling planes should not appear in plane_mask,
otherwise
+ * we have multiple sibling planes staged in one commit
+ */
+ if (plane_mask & (1 << drm_plane_index(plane)))
+ return -EINVAL;
+
+ plane_state = drm_atomic_get_plane_state(state, plane);
+ if (IS_ERR(plane_state))
+ return PTR_ERR(plane_state);
+
+ drm_atomic_set_fb_for_plane(plane_state, NULL);
+ ret = drm_atomic_set_crtc_for_plane(plane_state, NULL);
+ if (ret)
+ return ret;
+ }
+
+ return 0;
+}