Commit 13b55664 authored by Gustavo Padovan's avatar Gustavo Padovan Committed by Daniel Vetter

drm/atomic: add drm_atomic_set_fence_for_plane()

This new function should be used by drivers when setting a implicit
fence for the plane. It abstracts the fact that the user might have
chosen explicit fencing instead.
Signed-off-by: default avatarGustavo Padovan <gustavo.padovan@collabora.co.uk>
Reviewed-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
Link: http://patchwork.freedesktop.org/patch/msgid/1478513013-3221-1-git-send-email-gustavo@padovan.org
parent 7abc7d47
...@@ -1146,6 +1146,36 @@ drm_atomic_set_fb_for_plane(struct drm_plane_state *plane_state, ...@@ -1146,6 +1146,36 @@ drm_atomic_set_fb_for_plane(struct drm_plane_state *plane_state,
} }
EXPORT_SYMBOL(drm_atomic_set_fb_for_plane); EXPORT_SYMBOL(drm_atomic_set_fb_for_plane);
/**
* drm_atomic_set_fence_for_plane - set fence for plane
* @plane_state: atomic state object for the plane
* @fence: dma_fence to use for the plane
*
* Helper to setup the plane_state fence in case it is not set yet.
* By using this drivers doesn't need to worry if the user choose
* implicit or explicit fencing.
*
* This function will not set the fence to the state if it was set
* via explicit fencing interfaces on the atomic ioctl. It will
* all drope the reference to the fence as we not storing it
* anywhere.
*
* Otherwise, if plane_state->fence is not set this function we
* just set it with the received implict fence.
*/
void
drm_atomic_set_fence_for_plane(struct drm_plane_state *plane_state,
struct dma_fence *fence)
{
if (plane_state->fence) {
dma_fence_put(fence);
return;
}
plane_state->fence = fence;
}
EXPORT_SYMBOL(drm_atomic_set_fence_for_plane);
/** /**
* drm_atomic_set_crtc_for_connector - set crtc for connector * drm_atomic_set_crtc_for_connector - set crtc for connector
* @conn_state: atomic state object for the connector * @conn_state: atomic state object for the connector
......
...@@ -345,6 +345,8 @@ drm_atomic_set_crtc_for_plane(struct drm_plane_state *plane_state, ...@@ -345,6 +345,8 @@ drm_atomic_set_crtc_for_plane(struct drm_plane_state *plane_state,
struct drm_crtc *crtc); struct drm_crtc *crtc);
void drm_atomic_set_fb_for_plane(struct drm_plane_state *plane_state, void drm_atomic_set_fb_for_plane(struct drm_plane_state *plane_state,
struct drm_framebuffer *fb); struct drm_framebuffer *fb);
void drm_atomic_set_fence_for_plane(struct drm_plane_state *plane_state,
struct dma_fence *fence);
int __must_check int __must_check
drm_atomic_set_crtc_for_connector(struct drm_connector_state *conn_state, drm_atomic_set_crtc_for_connector(struct drm_connector_state *conn_state,
struct drm_crtc *crtc); struct drm_crtc *crtc);
......
...@@ -59,7 +59,7 @@ struct drm_plane_state { ...@@ -59,7 +59,7 @@ struct drm_plane_state {
struct drm_crtc *crtc; /* do not write directly, use drm_atomic_set_crtc_for_plane() */ struct drm_crtc *crtc; /* do not write directly, use drm_atomic_set_crtc_for_plane() */
struct drm_framebuffer *fb; /* do not write directly, use drm_atomic_set_fb_for_plane() */ struct drm_framebuffer *fb; /* do not write directly, use drm_atomic_set_fb_for_plane() */
struct dma_fence *fence; struct dma_fence *fence; /* do not write directly, use drm_atomic_set_fence_for_plane() */
/* Signed dest location allows it to be partially off screen */ /* Signed dest location allows it to be partially off screen */
int32_t crtc_x, crtc_y; int32_t crtc_x, crtc_y;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment