drm/exynos: clean up wait_for_vblank
authorInki Dae <inki.dae@samsung.com>
Tue, 5 Apr 2016 08:27:42 +0000 (17:27 +0900)
committerInki Dae <daeinki@gmail.com>
Sat, 30 Apr 2016 02:34:12 +0000 (11:34 +0900)
This patch cleans up wait_for_vblank relevant codes.
wait_for_vblank callback isn't used anymore in Exynos drm driver
so it removes relevant codes. However, display controllers -
FIMD and DECON - still use this function driver internally
to ensure shadow registers to be updated, which resolves
page fault issue so keep it.

Signed-off-by: Inki Dae <inki.dae@samsung.com>
drivers/gpu/drm/exynos/exynos7_drm_decon.c
drivers/gpu/drm/exynos/exynos_drm_drv.h
drivers/gpu/drm/exynos/exynos_drm_fimd.c
drivers/gpu/drm/exynos/exynos_mixer.c

index 93361073af9aa667471753843fe7f335ab1077aa..f6223f907c158fbdfcf176da6aef13536966c5bb 100644 (file)
@@ -593,7 +593,6 @@ static const struct exynos_drm_crtc_ops decon_crtc_ops = {
        .commit = decon_commit,
        .enable_vblank = decon_enable_vblank,
        .disable_vblank = decon_disable_vblank,
-       .wait_for_vblank = decon_wait_for_vblank,
        .atomic_begin = decon_atomic_begin,
        .update_plane = decon_update_plane,
        .disable_plane = decon_disable_plane,
index ff671e3db6ca5575a52f8578c68a02d5a50b1bda..2ca719cc3e2ae76f74856249ab591b5095b9c4fc 100644 (file)
@@ -120,8 +120,6 @@ struct exynos_drm_plane_config {
  * @commit: set current hw specific display mode to hw.
  * @enable_vblank: specific driver callback for enabling vblank interrupt.
  * @disable_vblank: specific driver callback for disabling vblank interrupt.
- * @wait_for_vblank: wait for vblank interrupt to make sure that
- *     hardware overlay is updated.
  * @atomic_check: validate state
  * @atomic_begin: prepare device to receive an update
  * @atomic_flush: mark the end of device update
@@ -137,7 +135,6 @@ struct exynos_drm_crtc_ops {
        void (*commit)(struct exynos_drm_crtc *crtc);
        int (*enable_vblank)(struct exynos_drm_crtc *crtc);
        void (*disable_vblank)(struct exynos_drm_crtc *crtc);
-       void (*wait_for_vblank)(struct exynos_drm_crtc *crtc);
        int (*atomic_check)(struct exynos_drm_crtc *crtc,
                            struct drm_crtc_state *state);
        void (*atomic_begin)(struct exynos_drm_crtc *crtc);
index d04d46dab3623ba74de84c3c279998411f000d3f..57a5719ca55dfba097c0d7eab6e1f27466c6410a 100644 (file)
@@ -888,7 +888,6 @@ static const struct exynos_drm_crtc_ops fimd_crtc_ops = {
        .commit = fimd_commit,
        .enable_vblank = fimd_enable_vblank,
        .disable_vblank = fimd_disable_vblank,
-       .wait_for_vblank = fimd_wait_for_vblank,
        .atomic_begin = fimd_atomic_begin,
        .update_plane = fimd_update_plane,
        .disable_plane = fimd_disable_plane,
index d1a9944a175971939323892654a80d73bb7224b1..74a4269cc1b0a17cb527f3616b8e9fcfa87b00ff 100644 (file)
@@ -104,8 +104,6 @@ struct mixer_context {
 
        struct mixer_resources  mixer_res;
        enum mixer_version_id   mxr_ver;
-       wait_queue_head_t       wait_vsync_queue;
-       atomic_t                wait_vsync_event;
 };
 
 struct mixer_drv_data {
@@ -788,12 +786,6 @@ static irqreturn_t mixer_irq_handler(int irq, void *arg)
 
                        exynos_drm_crtc_finish_update(ctx->crtc, plane);
                }
-
-               /* set wait vsync event to zero and wake up queue. */
-               if (atomic_read(&ctx->wait_vsync_event)) {
-                       atomic_set(&ctx->wait_vsync_event, 0);
-                       wake_up(&ctx->wait_vsync_queue);
-               }
        }
 
 out:
@@ -1028,34 +1020,6 @@ static void mixer_atomic_flush(struct exynos_drm_crtc *crtc)
        mixer_vsync_set_update(mixer_ctx, true);
 }
 
-static void mixer_wait_for_vblank(struct exynos_drm_crtc *crtc)
-{
-       struct mixer_context *mixer_ctx = crtc->ctx;
-       int err;
-
-       if (!test_bit(MXR_BIT_POWERED, &mixer_ctx->flags))
-               return;
-
-       err = drm_vblank_get(mixer_ctx->drm_dev, mixer_ctx->pipe);
-       if (err < 0) {
-               DRM_DEBUG_KMS("failed to acquire vblank counter\n");
-               return;
-       }
-
-       atomic_set(&mixer_ctx->wait_vsync_event, 1);
-
-       /*
-        * wait for MIXER to signal VSYNC interrupt or return after
-        * timeout which is set to 50ms (refresh rate of 20).
-        */
-       if (!wait_event_timeout(mixer_ctx->wait_vsync_queue,
-                               !atomic_read(&mixer_ctx->wait_vsync_event),
-                               HZ/20))
-               DRM_DEBUG_KMS("vblank wait timed out.\n");
-
-       drm_vblank_put(mixer_ctx->drm_dev, mixer_ctx->pipe);
-}
-
 static void mixer_enable(struct exynos_drm_crtc *crtc)
 {
        struct mixer_context *ctx = crtc->ctx;
@@ -1131,7 +1095,6 @@ static const struct exynos_drm_crtc_ops mixer_crtc_ops = {
        .disable                = mixer_disable,
        .enable_vblank          = mixer_enable_vblank,
        .disable_vblank         = mixer_disable_vblank,
-       .wait_for_vblank        = mixer_wait_for_vblank,
        .atomic_begin           = mixer_atomic_begin,
        .update_plane           = mixer_update_plane,
        .disable_plane          = mixer_disable_plane,
@@ -1253,8 +1216,6 @@ static int mixer_probe(struct platform_device *pdev)
        ctx->vp_enabled = drv->is_vp_enabled;
        ctx->has_sclk = drv->has_sclk;
        ctx->mxr_ver = drv->version;
-       init_waitqueue_head(&ctx->wait_vsync_queue);
-       atomic_set(&ctx->wait_vsync_event, 0);
 
        platform_set_drvdata(pdev, ctx);