mirror of
https://github.com/torvalds/linux.git
synced 2024-11-23 04:31:50 +00:00
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: Harry 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
This commit is contained in:
parent
29dc0d1de1
commit
41292b1fa1
@ -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);
|
|||||||
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)
|
|||||||
* 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)
|
|||||||
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(
|
|||||||
* @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(
|
|||||||
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);
|
|||||||
* @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(
|
|||||||
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 @@ retry:
|
|||||||
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 @@ fail:
|
|||||||
|
|
||||||
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 *,
|
|||||||
|
|
||||||
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,
|
|||||||
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)
|
|||||||
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)
|
|||||||
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,
|
|||||||
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)
|
|||||||
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)
|
|||||||
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,
|
|||||||
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 {
|
|||||||
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 {
|
|||||||
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:
|
||||||
|
Loading…
Reference in New Issue
Block a user