1 /* Public domain. */ 2 3 #include <linux/kernel.h> 4 5 #include <drm/drm_plane.h> 6 #include <drm/drm_framebuffer.h> 7 #include <drm/drm_atomic_uapi.h> 8 #include <drm/drm_gem.h> 9 #include <linux/dma-resv.h> 10 11 int 12 drm_gem_plane_helper_prepare_fb(struct drm_plane *dp, 13 struct drm_plane_state *dps) 14 { 15 struct drm_gem_object *obj; 16 struct dma_fence *f; 17 int r; 18 19 if (dps->fb != NULL) { 20 obj = dps->fb->obj[0]; 21 if (obj == NULL) 22 return -EINVAL; 23 if (dps->fence) { 24 printf("%s: explicit fence not handled\n", __func__); 25 return -EINVAL; 26 } 27 r = dma_resv_get_singleton(obj->resv, DMA_RESV_USAGE_WRITE, &f); 28 if (r) 29 return r; 30 dps->fence = f; 31 } 32 33 return 0; 34 } 35