| From 32487c1ae57e369b4475b8581b3b754869786b2e Mon Sep 17 00:00:00 2001 |
| From: Keith Packard <keithp@keithp.com> |
| Date: Mon, 22 Jul 2013 18:49:58 -0700 |
| Subject: drm: Pass page flip ioctl flags to driver |
| |
| This lets drivers see the flags requested by the application |
| |
| [airlied: fixup for rcar/imx/msm] |
| |
| Signed-off-by: Keith Packard <keithp@keithp.com> |
| Signed-off-by: Dave Airlie <airlied@gmail.com> |
| (cherry picked from commit ed8d19756e80ec63003a93aa4d70406e6ba61522) |
| Signed-off-by: James Ausmus <james.ausmus@intel.com> |
| |
| Conflicts: |
| drivers/gpu/drm/msm/mdp4/mdp4_crtc.c |
| drivers/gpu/drm/rcar-du/rcar_du_crtc.c |
| (drivers don't exist in this tree) |
| Signed-off-by: Darren Hart <dvhart@linux.intel.com> |
| --- |
| drivers/gpu/drm/drm_crtc.c | 2 +- |
| drivers/gpu/drm/exynos/exynos_drm_crtc.c | 5 +++-- |
| drivers/gpu/drm/i915/i915_drv.h | 3 ++- |
| drivers/gpu/drm/i915/intel_display.c | 23 +++++++++++++++-------- |
| drivers/gpu/drm/nouveau/nouveau_display.c | 3 ++- |
| drivers/gpu/drm/nouveau/nouveau_display.h | 3 ++- |
| drivers/gpu/drm/omapdrm/omap_crtc.c | 3 ++- |
| drivers/gpu/drm/radeon/radeon_display.c | 3 ++- |
| drivers/gpu/drm/shmobile/shmob_drm_crtc.c | 3 ++- |
| drivers/gpu/drm/tilcdc/tilcdc_crtc.c | 3 ++- |
| drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 3 ++- |
| drivers/gpu/drm/vmwgfx/vmwgfx_kms.h | 3 ++- |
| drivers/staging/imx-drm/ipuv3-crtc.c | 3 ++- |
| include/drm/drm_crtc.h | 3 ++- |
| 14 files changed, 41 insertions(+), 22 deletions(-) |
| |
| --- a/drivers/gpu/drm/drm_crtc.c |
| +++ b/drivers/gpu/drm/drm_crtc.c |
| @@ -3524,7 +3524,7 @@ int drm_mode_page_flip_ioctl(struct drm_ |
| } |
| |
| old_fb = crtc->fb; |
| - ret = crtc->funcs->page_flip(crtc, fb, e); |
| + ret = crtc->funcs->page_flip(crtc, fb, e, page_flip->flags); |
| if (ret) { |
| if (page_flip->flags & DRM_MODE_PAGE_FLIP_EVENT) { |
| spin_lock_irqsave(&dev->event_lock, flags); |
| --- a/drivers/gpu/drm/exynos/exynos_drm_crtc.c |
| +++ b/drivers/gpu/drm/exynos/exynos_drm_crtc.c |
| @@ -197,8 +197,9 @@ static struct drm_crtc_helper_funcs exyn |
| }; |
| |
| static int exynos_drm_crtc_page_flip(struct drm_crtc *crtc, |
| - struct drm_framebuffer *fb, |
| - struct drm_pending_vblank_event *event) |
| + struct drm_framebuffer *fb, |
| + struct drm_pending_vblank_event *event, |
| + uint32_t page_flip_flags) |
| { |
| struct drm_device *dev = crtc->dev; |
| struct exynos_drm_private *dev_priv = dev->dev_private; |
| --- a/drivers/gpu/drm/i915/i915_drv.h |
| +++ b/drivers/gpu/drm/i915/i915_drv.h |
| @@ -380,7 +380,8 @@ struct drm_i915_display_funcs { |
| void (*init_clock_gating)(struct drm_device *dev); |
| int (*queue_flip)(struct drm_device *dev, struct drm_crtc *crtc, |
| struct drm_framebuffer *fb, |
| - struct drm_i915_gem_object *obj); |
| + struct drm_i915_gem_object *obj, |
| + uint32_t flags); |
| int (*update_plane)(struct drm_crtc *crtc, struct drm_framebuffer *fb, |
| int x, int y); |
| void (*hpd_irq_setup)(struct drm_device *dev); |
| --- a/drivers/gpu/drm/i915/intel_display.c |
| +++ b/drivers/gpu/drm/i915/intel_display.c |
| @@ -7654,7 +7654,8 @@ inline static void intel_mark_page_flip_ |
| static int intel_gen2_queue_flip(struct drm_device *dev, |
| struct drm_crtc *crtc, |
| struct drm_framebuffer *fb, |
| - struct drm_i915_gem_object *obj) |
| + struct drm_i915_gem_object *obj, |
| + uint32_t flags) |
| { |
| struct drm_i915_private *dev_priv = dev->dev_private; |
| struct intel_crtc *intel_crtc = to_intel_crtc(crtc); |
| @@ -7698,7 +7699,8 @@ err: |
| static int intel_gen3_queue_flip(struct drm_device *dev, |
| struct drm_crtc *crtc, |
| struct drm_framebuffer *fb, |
| - struct drm_i915_gem_object *obj) |
| + struct drm_i915_gem_object *obj, |
| + uint32_t flags) |
| { |
| struct drm_i915_private *dev_priv = dev->dev_private; |
| struct intel_crtc *intel_crtc = to_intel_crtc(crtc); |
| @@ -7739,7 +7741,8 @@ err: |
| static int intel_gen4_queue_flip(struct drm_device *dev, |
| struct drm_crtc *crtc, |
| struct drm_framebuffer *fb, |
| - struct drm_i915_gem_object *obj) |
| + struct drm_i915_gem_object *obj, |
| + uint32_t flags) |
| { |
| struct drm_i915_private *dev_priv = dev->dev_private; |
| struct intel_crtc *intel_crtc = to_intel_crtc(crtc); |
| @@ -7787,7 +7790,8 @@ err: |
| static int intel_gen6_queue_flip(struct drm_device *dev, |
| struct drm_crtc *crtc, |
| struct drm_framebuffer *fb, |
| - struct drm_i915_gem_object *obj) |
| + struct drm_i915_gem_object *obj, |
| + uint32_t flags) |
| { |
| struct drm_i915_private *dev_priv = dev->dev_private; |
| struct intel_crtc *intel_crtc = to_intel_crtc(crtc); |
| @@ -7837,7 +7841,8 @@ err: |
| static int intel_gen7_queue_flip(struct drm_device *dev, |
| struct drm_crtc *crtc, |
| struct drm_framebuffer *fb, |
| - struct drm_i915_gem_object *obj) |
| + struct drm_i915_gem_object *obj, |
| + uint32_t flags) |
| { |
| struct drm_i915_private *dev_priv = dev->dev_private; |
| struct intel_crtc *intel_crtc = to_intel_crtc(crtc); |
| @@ -7887,14 +7892,16 @@ err: |
| static int intel_default_queue_flip(struct drm_device *dev, |
| struct drm_crtc *crtc, |
| struct drm_framebuffer *fb, |
| - struct drm_i915_gem_object *obj) |
| + struct drm_i915_gem_object *obj, |
| + uint32_t flags) |
| { |
| return -ENODEV; |
| } |
| |
| static int intel_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) |
| { |
| struct drm_device *dev = crtc->dev; |
| struct drm_i915_private *dev_priv = dev->dev_private; |
| @@ -7964,7 +7971,7 @@ static int intel_crtc_page_flip(struct d |
| atomic_inc(&intel_crtc->unpin_work_count); |
| intel_crtc->reset_counter = atomic_read(&dev_priv->gpu_error.reset_counter); |
| |
| - ret = dev_priv->display.queue_flip(dev, crtc, fb, obj); |
| + ret = dev_priv->display.queue_flip(dev, crtc, fb, obj, page_flip_flags); |
| if (ret) |
| goto cleanup_pending; |
| |
| --- a/drivers/gpu/drm/nouveau/nouveau_display.c |
| +++ b/drivers/gpu/drm/nouveau/nouveau_display.c |
| @@ -554,7 +554,8 @@ fail: |
| |
| 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) |
| { |
| struct drm_device *dev = crtc->dev; |
| struct nouveau_drm *drm = nouveau_drm(dev); |
| --- a/drivers/gpu/drm/nouveau/nouveau_display.h |
| +++ b/drivers/gpu/drm/nouveau/nouveau_display.h |
| @@ -60,7 +60,8 @@ int nouveau_display_suspend(struct drm_ |
| void nouveau_display_resume(struct drm_device *dev); |
| |
| 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); |
| int nouveau_finish_page_flip(struct nouveau_channel *, |
| struct nouveau_page_flip_state *); |
| |
| --- a/drivers/gpu/drm/omapdrm/omap_crtc.c |
| +++ b/drivers/gpu/drm/omapdrm/omap_crtc.c |
| @@ -308,7 +308,8 @@ static void page_flip_cb(void *arg) |
| |
| static int omap_crtc_page_flip_locked(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) |
| { |
| struct drm_device *dev = crtc->dev; |
| struct omap_crtc *omap_crtc = to_omap_crtc(crtc); |
| --- a/drivers/gpu/drm/radeon/radeon_display.c |
| +++ b/drivers/gpu/drm/radeon/radeon_display.c |
| @@ -339,7 +339,8 @@ void radeon_crtc_handle_flip(struct rade |
| |
| static int radeon_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) |
| { |
| struct drm_device *dev = crtc->dev; |
| struct radeon_device *rdev = dev->dev_private; |
| --- a/drivers/gpu/drm/shmobile/shmob_drm_crtc.c |
| +++ b/drivers/gpu/drm/shmobile/shmob_drm_crtc.c |
| @@ -465,7 +465,8 @@ void shmob_drm_crtc_finish_page_flip(str |
| |
| static int shmob_drm_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) |
| { |
| struct shmob_drm_crtc *scrtc = to_shmob_crtc(crtc); |
| struct drm_device *dev = scrtc->crtc.dev; |
| --- a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c |
| +++ b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c |
| @@ -153,7 +153,8 @@ static void tilcdc_crtc_destroy(struct d |
| |
| static int tilcdc_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) |
| { |
| struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); |
| struct drm_device *dev = crtc->dev; |
| --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c |
| +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c |
| @@ -1705,7 +1705,8 @@ int vmw_du_update_layout(struct vmw_priv |
| |
| int vmw_du_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) |
| { |
| struct vmw_private *dev_priv = vmw_priv(crtc->dev); |
| struct drm_framebuffer *old_fb = crtc->fb; |
| --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h |
| +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h |
| @@ -123,7 +123,8 @@ struct vmw_display_unit { |
| void vmw_display_unit_cleanup(struct vmw_display_unit *du); |
| int vmw_du_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); |
| void vmw_du_crtc_save(struct drm_crtc *crtc); |
| void vmw_du_crtc_restore(struct drm_crtc *crtc); |
| void vmw_du_crtc_gamma_set(struct drm_crtc *crtc, |
| --- a/drivers/staging/imx-drm/ipuv3-crtc.c |
| +++ b/drivers/staging/imx-drm/ipuv3-crtc.c |
| @@ -134,7 +134,8 @@ static void ipu_crtc_dpms(struct drm_crt |
| |
| static int ipu_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) |
| { |
| struct ipu_crtc *ipu_crtc = to_ipu_crtc(crtc); |
| int ret; |
| --- a/include/drm/drm_crtc.h |
| +++ b/include/drm/drm_crtc.h |
| @@ -365,7 +365,8 @@ struct drm_crtc_funcs { |
| */ |
| int (*page_flip)(struct drm_crtc *crtc, |
| struct drm_framebuffer *fb, |
| - struct drm_pending_vblank_event *event); |
| + struct drm_pending_vblank_event *event, |
| + uint32_t flags); |
| |
| int (*set_property)(struct drm_crtc *crtc, |
| struct drm_property *property, uint64_t val); |