提交 41292b1f 编写于 作者: D Daniel Vetter

drm: Add acquire ctx parameter to ->page_flip(_target)

Again just going through the motions, no functional changes in here.

Cc: Gerd Hoffmann <kraxel@redhat.com>
Cc: Ben Skeggs <bskeggs@redhat.com>
Cc: Russell King <linux@armlinux.org.uk>
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: Eric Anholt <eric@anholt.net>
Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: Christian König <christian.koenig@amd.com>
Reviewed-by: NHarry Wentland <harry.wentland@amd.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>t
Link: http://patchwork.freedesktop.org/patch/msgid/20170322215058.8671-12-daniel.vetter@ffwll.ch
上级 29dc0d1d
...@@ -311,7 +311,8 @@ int amdgpu_crtc_page_flip_target(struct drm_crtc *crtc, ...@@ -311,7 +311,8 @@ int amdgpu_crtc_page_flip_target(struct drm_crtc *crtc,
struct drm_framebuffer *fb, struct drm_framebuffer *fb,
struct drm_pending_vblank_event *event, struct drm_pending_vblank_event *event,
uint32_t page_flip_flags, uint32_t page_flip_flags,
uint32_t target) uint32_t target,
struct drm_modeset_acquire_ctx *ctx)
{ {
struct amdgpu_bo *new_abo; struct amdgpu_bo *new_abo;
struct amdgpu_flip_work *work; struct amdgpu_flip_work *work;
......
...@@ -594,7 +594,8 @@ int amdgpu_crtc_set_config(struct drm_mode_set *set); ...@@ -594,7 +594,8 @@ int amdgpu_crtc_set_config(struct drm_mode_set *set);
int amdgpu_crtc_page_flip_target(struct drm_crtc *crtc, int amdgpu_crtc_page_flip_target(struct drm_crtc *crtc,
struct drm_framebuffer *fb, struct drm_framebuffer *fb,
struct drm_pending_vblank_event *event, struct drm_pending_vblank_event *event,
uint32_t page_flip_flags, uint32_t target); uint32_t page_flip_flags, uint32_t target,
struct drm_modeset_acquire_ctx *ctx);
void amdgpu_crtc_cleanup_flip_ctx(struct amdgpu_flip_work *work, void amdgpu_crtc_cleanup_flip_ctx(struct amdgpu_flip_work *work,
struct amdgpu_bo *new_abo); struct amdgpu_bo *new_abo);
int amdgpu_crtc_prepare_flip(struct drm_crtc *crtc, int amdgpu_crtc_prepare_flip(struct drm_crtc *crtc,
......
...@@ -1027,7 +1027,8 @@ static void armada_drm_crtc_destroy(struct drm_crtc *crtc) ...@@ -1027,7 +1027,8 @@ static void armada_drm_crtc_destroy(struct drm_crtc *crtc)
* and a mode_set. * and a mode_set.
*/ */
static int armada_drm_crtc_page_flip(struct drm_crtc *crtc, static int armada_drm_crtc_page_flip(struct drm_crtc *crtc,
struct drm_framebuffer *fb, struct drm_pending_vblank_event *event, uint32_t page_flip_flags) struct drm_framebuffer *fb, struct drm_pending_vblank_event *event, uint32_t page_flip_flags,
struct drm_modeset_acquire_ctx *ctx)
{ {
struct armada_crtc *dcrtc = drm_to_armada_crtc(crtc); struct armada_crtc *dcrtc = drm_to_armada_crtc(crtc);
struct armada_frame_work *work; struct armada_frame_work *work;
......
...@@ -96,7 +96,8 @@ static void bochs_crtc_commit(struct drm_crtc *crtc) ...@@ -96,7 +96,8 @@ static void bochs_crtc_commit(struct drm_crtc *crtc)
static int bochs_crtc_page_flip(struct drm_crtc *crtc, static int bochs_crtc_page_flip(struct drm_crtc *crtc,
struct drm_framebuffer *fb, struct drm_framebuffer *fb,
struct drm_pending_vblank_event *event, struct drm_pending_vblank_event *event,
uint32_t page_flip_flags) uint32_t page_flip_flags,
struct drm_modeset_acquire_ctx *ctx)
{ {
struct bochs_device *bochs = struct bochs_device *bochs =
container_of(crtc, struct bochs_device, crtc); container_of(crtc, struct bochs_device, crtc);
......
...@@ -2859,6 +2859,7 @@ static int page_flip_common( ...@@ -2859,6 +2859,7 @@ static int page_flip_common(
* @fb: DRM framebuffer * @fb: DRM framebuffer
* @event: optional DRM event to signal upon completion * @event: optional DRM event to signal upon completion
* @flags: flip flags for non-vblank sync'ed updates * @flags: flip flags for non-vblank sync'ed updates
* @ctx: lock acquisition context
* *
* Provides a default &drm_crtc_funcs.page_flip implementation * Provides a default &drm_crtc_funcs.page_flip implementation
* using the atomic driver interface. * using the atomic driver interface.
...@@ -2872,7 +2873,8 @@ static int page_flip_common( ...@@ -2872,7 +2873,8 @@ static int page_flip_common(
int drm_atomic_helper_page_flip(struct drm_crtc *crtc, int drm_atomic_helper_page_flip(struct drm_crtc *crtc,
struct drm_framebuffer *fb, struct drm_framebuffer *fb,
struct drm_pending_vblank_event *event, struct drm_pending_vblank_event *event,
uint32_t flags) uint32_t flags,
struct drm_modeset_acquire_ctx *ctx)
{ {
struct drm_plane *plane = crtc->primary; struct drm_plane *plane = crtc->primary;
struct drm_atomic_state *state; struct drm_atomic_state *state;
...@@ -2920,6 +2922,7 @@ EXPORT_SYMBOL(drm_atomic_helper_page_flip); ...@@ -2920,6 +2922,7 @@ EXPORT_SYMBOL(drm_atomic_helper_page_flip);
* @event: optional DRM event to signal upon completion * @event: optional DRM event to signal upon completion
* @flags: flip flags for non-vblank sync'ed updates * @flags: flip flags for non-vblank sync'ed updates
* @target: specifying the target vblank period when the flip to take effect * @target: specifying the target vblank period when the flip to take effect
* @ctx: lock acquisition context
* *
* Provides a default &drm_crtc_funcs.page_flip_target implementation. * Provides a default &drm_crtc_funcs.page_flip_target implementation.
* Similar to drm_atomic_helper_page_flip() with extra parameter to specify * Similar to drm_atomic_helper_page_flip() with extra parameter to specify
...@@ -2933,7 +2936,8 @@ int drm_atomic_helper_page_flip_target( ...@@ -2933,7 +2936,8 @@ int drm_atomic_helper_page_flip_target(
struct drm_framebuffer *fb, struct drm_framebuffer *fb,
struct drm_pending_vblank_event *event, struct drm_pending_vblank_event *event,
uint32_t flags, uint32_t flags,
uint32_t target) uint32_t target,
struct drm_modeset_acquire_ctx *ctx)
{ {
struct drm_plane *plane = crtc->primary; struct drm_plane *plane = crtc->primary;
struct drm_atomic_state *state; struct drm_atomic_state *state;
......
...@@ -932,9 +932,11 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev, ...@@ -932,9 +932,11 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev,
if (crtc->funcs->page_flip_target) if (crtc->funcs->page_flip_target)
ret = crtc->funcs->page_flip_target(crtc, fb, e, ret = crtc->funcs->page_flip_target(crtc, fb, e,
page_flip->flags, page_flip->flags,
target_vblank); target_vblank,
&ctx);
else else
ret = crtc->funcs->page_flip(crtc, fb, e, page_flip->flags); ret = crtc->funcs->page_flip(crtc, fb, e, page_flip->flags,
&ctx);
if (ret) { if (ret) {
if (page_flip->flags & DRM_MODE_PAGE_FLIP_EVENT) if (page_flip->flags & DRM_MODE_PAGE_FLIP_EVENT)
drm_event_cancel_free(dev, &e->base); drm_event_cancel_free(dev, &e->base);
......
...@@ -792,7 +792,8 @@ nouveau_page_flip_emit(struct nouveau_channel *chan, ...@@ -792,7 +792,8 @@ nouveau_page_flip_emit(struct nouveau_channel *chan,
int int
nouveau_crtc_page_flip(struct drm_crtc *crtc, struct drm_framebuffer *fb, nouveau_crtc_page_flip(struct drm_crtc *crtc, struct drm_framebuffer *fb,
struct drm_pending_vblank_event *event, u32 flags) struct drm_pending_vblank_event *event, u32 flags,
struct drm_modeset_acquire_ctx *ctx)
{ {
const int swap_interval = (flags & DRM_MODE_PAGE_FLIP_ASYNC) ? 0 : 1; const int swap_interval = (flags & DRM_MODE_PAGE_FLIP_ASYNC) ? 0 : 1;
struct drm_device *dev = crtc->dev; struct drm_device *dev = crtc->dev;
......
...@@ -76,7 +76,8 @@ int nouveau_display_vblstamp(struct drm_device *, unsigned int, int *, ...@@ -76,7 +76,8 @@ int nouveau_display_vblstamp(struct drm_device *, unsigned int, int *,
int nouveau_crtc_page_flip(struct drm_crtc *crtc, struct drm_framebuffer *fb, int nouveau_crtc_page_flip(struct drm_crtc *crtc, struct drm_framebuffer *fb,
struct drm_pending_vblank_event *event, struct drm_pending_vblank_event *event,
uint32_t page_flip_flags); uint32_t page_flip_flags,
struct drm_modeset_acquire_ctx *ctx);
int nouveau_finish_page_flip(struct nouveau_channel *, int nouveau_finish_page_flip(struct nouveau_channel *,
struct nouveau_page_flip_state *); struct nouveau_page_flip_state *);
......
...@@ -485,7 +485,8 @@ static int radeon_crtc_page_flip_target(struct drm_crtc *crtc, ...@@ -485,7 +485,8 @@ static int radeon_crtc_page_flip_target(struct drm_crtc *crtc,
struct drm_framebuffer *fb, struct drm_framebuffer *fb,
struct drm_pending_vblank_event *event, struct drm_pending_vblank_event *event,
uint32_t page_flip_flags, uint32_t page_flip_flags,
uint32_t target) uint32_t target,
struct drm_modeset_acquire_ctx *ctx)
{ {
struct drm_device *dev = crtc->dev; struct drm_device *dev = crtc->dev;
struct radeon_device *rdev = dev->dev_private; struct radeon_device *rdev = dev->dev_private;
......
...@@ -449,7 +449,8 @@ void shmob_drm_crtc_finish_page_flip(struct shmob_drm_crtc *scrtc) ...@@ -449,7 +449,8 @@ void shmob_drm_crtc_finish_page_flip(struct shmob_drm_crtc *scrtc)
static int shmob_drm_crtc_page_flip(struct drm_crtc *crtc, static int shmob_drm_crtc_page_flip(struct drm_crtc *crtc,
struct drm_framebuffer *fb, struct drm_framebuffer *fb,
struct drm_pending_vblank_event *event, struct drm_pending_vblank_event *event,
uint32_t page_flip_flags) uint32_t page_flip_flags,
struct drm_modeset_acquire_ctx *ctx)
{ {
struct shmob_drm_crtc *scrtc = to_shmob_crtc(crtc); struct shmob_drm_crtc *scrtc = to_shmob_crtc(crtc);
struct drm_device *dev = scrtc->crtc.dev; struct drm_device *dev = scrtc->crtc.dev;
......
...@@ -361,7 +361,8 @@ static void udl_crtc_destroy(struct drm_crtc *crtc) ...@@ -361,7 +361,8 @@ static void udl_crtc_destroy(struct drm_crtc *crtc)
static int udl_crtc_page_flip(struct drm_crtc *crtc, static int udl_crtc_page_flip(struct drm_crtc *crtc,
struct drm_framebuffer *fb, struct drm_framebuffer *fb,
struct drm_pending_vblank_event *event, struct drm_pending_vblank_event *event,
uint32_t page_flip_flags) uint32_t page_flip_flags,
struct drm_modeset_acquire_ctx *ctx)
{ {
struct udl_framebuffer *ufb = to_udl_fb(fb); struct udl_framebuffer *ufb = to_udl_fb(fb);
struct drm_device *dev = crtc->dev; struct drm_device *dev = crtc->dev;
......
...@@ -807,12 +807,13 @@ static int vc4_async_page_flip(struct drm_crtc *crtc, ...@@ -807,12 +807,13 @@ static int vc4_async_page_flip(struct drm_crtc *crtc,
static int vc4_page_flip(struct drm_crtc *crtc, static int vc4_page_flip(struct drm_crtc *crtc,
struct drm_framebuffer *fb, struct drm_framebuffer *fb,
struct drm_pending_vblank_event *event, struct drm_pending_vblank_event *event,
uint32_t flags) uint32_t flags,
struct drm_modeset_acquire_ctx *ctx)
{ {
if (flags & DRM_MODE_PAGE_FLIP_ASYNC) if (flags & DRM_MODE_PAGE_FLIP_ASYNC)
return vc4_async_page_flip(crtc, fb, event, flags); return vc4_async_page_flip(crtc, fb, event, flags);
else else
return drm_atomic_helper_page_flip(crtc, fb, event, flags); return drm_atomic_helper_page_flip(crtc, fb, event, flags, ctx);
} }
static struct drm_crtc_state *vc4_crtc_duplicate_state(struct drm_crtc *crtc) static struct drm_crtc_state *vc4_crtc_duplicate_state(struct drm_crtc *crtc)
......
...@@ -395,7 +395,8 @@ static int vmw_sou_crtc_set_config(struct drm_mode_set *set) ...@@ -395,7 +395,8 @@ static int vmw_sou_crtc_set_config(struct drm_mode_set *set)
static int vmw_sou_crtc_page_flip(struct drm_crtc *crtc, static int vmw_sou_crtc_page_flip(struct drm_crtc *crtc,
struct drm_framebuffer *fb, struct drm_framebuffer *fb,
struct drm_pending_vblank_event *event, struct drm_pending_vblank_event *event,
uint32_t flags) uint32_t flags,
struct drm_modeset_acquire_ctx *ctx)
{ {
struct vmw_private *dev_priv = vmw_priv(crtc->dev); struct vmw_private *dev_priv = vmw_priv(crtc->dev);
struct drm_framebuffer *old_fb = crtc->primary->fb; struct drm_framebuffer *old_fb = crtc->primary->fb;
......
...@@ -649,7 +649,8 @@ static int vmw_stdu_crtc_set_config(struct drm_mode_set *set) ...@@ -649,7 +649,8 @@ static int vmw_stdu_crtc_set_config(struct drm_mode_set *set)
static int vmw_stdu_crtc_page_flip(struct drm_crtc *crtc, static int vmw_stdu_crtc_page_flip(struct drm_crtc *crtc,
struct drm_framebuffer *new_fb, struct drm_framebuffer *new_fb,
struct drm_pending_vblank_event *event, struct drm_pending_vblank_event *event,
uint32_t flags) uint32_t flags,
struct drm_modeset_acquire_ctx *ctx)
{ {
struct vmw_private *dev_priv = vmw_priv(crtc->dev); struct vmw_private *dev_priv = vmw_priv(crtc->dev);
......
...@@ -125,13 +125,15 @@ int drm_atomic_helper_connector_set_property(struct drm_connector *connector, ...@@ -125,13 +125,15 @@ int drm_atomic_helper_connector_set_property(struct drm_connector *connector,
int drm_atomic_helper_page_flip(struct drm_crtc *crtc, int drm_atomic_helper_page_flip(struct drm_crtc *crtc,
struct drm_framebuffer *fb, struct drm_framebuffer *fb,
struct drm_pending_vblank_event *event, struct drm_pending_vblank_event *event,
uint32_t flags); uint32_t flags,
struct drm_modeset_acquire_ctx *ctx);
int drm_atomic_helper_page_flip_target( int drm_atomic_helper_page_flip_target(
struct drm_crtc *crtc, struct drm_crtc *crtc,
struct drm_framebuffer *fb, struct drm_framebuffer *fb,
struct drm_pending_vblank_event *event, struct drm_pending_vblank_event *event,
uint32_t flags, uint32_t flags,
uint32_t target); uint32_t target,
struct drm_modeset_acquire_ctx *ctx);
int drm_atomic_helper_connector_dpms(struct drm_connector *connector, int drm_atomic_helper_connector_dpms(struct drm_connector *connector,
int mode); int mode);
struct drm_encoder * struct drm_encoder *
......
...@@ -405,7 +405,8 @@ struct drm_crtc_funcs { ...@@ -405,7 +405,8 @@ struct drm_crtc_funcs {
int (*page_flip)(struct drm_crtc *crtc, int (*page_flip)(struct drm_crtc *crtc,
struct drm_framebuffer *fb, struct drm_framebuffer *fb,
struct drm_pending_vblank_event *event, struct drm_pending_vblank_event *event,
uint32_t flags); uint32_t flags,
struct drm_modeset_acquire_ctx *ctx);
/** /**
* @page_flip_target: * @page_flip_target:
...@@ -423,7 +424,8 @@ struct drm_crtc_funcs { ...@@ -423,7 +424,8 @@ struct drm_crtc_funcs {
int (*page_flip_target)(struct drm_crtc *crtc, int (*page_flip_target)(struct drm_crtc *crtc,
struct drm_framebuffer *fb, struct drm_framebuffer *fb,
struct drm_pending_vblank_event *event, struct drm_pending_vblank_event *event,
uint32_t flags, uint32_t target); uint32_t flags, uint32_t target,
struct drm_modeset_acquire_ctx *ctx);
/** /**
* @set_property: * @set_property:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册