|
@@ -1631,6 +1631,9 @@ int drm_atomic_helper_prepare_planes(struct drm_device *dev,
|
|
|
|
|
|
funcs = plane->helper_private;
|
|
|
|
|
|
+ if (!drm_atomic_helper_framebuffer_changed(dev, state, plane_state->crtc))
|
|
|
+ continue;
|
|
|
+
|
|
|
if (funcs->prepare_fb) {
|
|
|
ret = funcs->prepare_fb(plane, plane_state);
|
|
|
if (ret)
|
|
@@ -1647,11 +1650,13 @@ fail:
|
|
|
if (j >= i)
|
|
|
continue;
|
|
|
|
|
|
+ if (!drm_atomic_helper_framebuffer_changed(dev, state, plane_state->crtc))
|
|
|
+ continue;
|
|
|
+
|
|
|
funcs = plane->helper_private;
|
|
|
|
|
|
if (funcs->cleanup_fb)
|
|
|
funcs->cleanup_fb(plane, plane_state);
|
|
|
-
|
|
|
}
|
|
|
|
|
|
return ret;
|
|
@@ -1894,6 +1899,9 @@ void drm_atomic_helper_cleanup_planes(struct drm_device *dev,
|
|
|
for_each_plane_in_state(old_state, plane, plane_state, i) {
|
|
|
const struct drm_plane_helper_funcs *funcs;
|
|
|
|
|
|
+ if (!drm_atomic_helper_framebuffer_changed(dev, old_state, plane_state->crtc))
|
|
|
+ continue;
|
|
|
+
|
|
|
funcs = plane->helper_private;
|
|
|
|
|
|
if (funcs->cleanup_fb)
|