#include <linux/dma-buf.h>
 
 #include <drm/drm_atomic_uapi.h>
+#include <drm/drm_gem_framebuffer_helper.h>
 
 #include "msm_drv.h"
 #include "dpu_kms.h"
        struct dpu_plane *pdpu = to_dpu_plane(plane);
        struct dpu_plane_state *pstate = to_dpu_plane_state(new_state);
        struct dpu_hw_fmt_layout layout;
-       struct drm_gem_object *obj;
-       struct dma_fence *fence;
        struct dpu_kms *kms = _dpu_plane_get_kms(&pdpu->base);
        int ret;
 
         *       we can use msm_atomic_prepare_fb() instead of doing the
         *       implicit fence and fb prepare by hand here.
         */
-       obj = msm_framebuffer_bo(new_state->fb, 0);
-       fence = reservation_object_get_excl_rcu(obj->resv);
-       if (fence)
-               drm_atomic_set_fence_for_plane(new_state, fence);
+       drm_gem_fb_prepare_fb(plane, new_state);
 
        if (pstate->aspace) {
                ret = msm_framebuffer_prepare(new_state->fb,
 
  */
 
 #include <drm/drm_atomic_uapi.h>
+#include <drm/drm_gem_framebuffer_helper.h>
 
 #include "msm_drv.h"
 #include "msm_gem.h"
 {
        struct msm_drm_private *priv = plane->dev->dev_private;
        struct msm_kms *kms = priv->kms;
-       struct drm_gem_object *obj;
-       struct dma_fence *fence;
 
        if (!new_state->fb)
                return 0;
 
-       obj = msm_framebuffer_bo(new_state->fb, 0);
-       fence = reservation_object_get_excl_rcu(obj->resv);
-
-       drm_atomic_set_fence_for_plane(new_state, fence);
+       drm_gem_fb_prepare_fb(plane, new_state);
 
        return msm_framebuffer_prepare(new_state->fb, kms->aspace);
 }