Applied. Thanks, Inki Dae 2013/1/3 Rahul Sharma <rahul.sharma@xxxxxxxxxxx>: > This patch implements the exynos_drm_crtc_finish_pageflip in > exynos_drm_crtc.c. This avoids the duplication of same code > in mixer, fimd and vidi. > > Signed-off-by: Rahul Sharma <rahul.sharma@xxxxxxxxxxx> > Signed-off-by: Stephane Marchesin <marcheu@xxxxxxxxxxxx> > --- > This patch is based on branch "exynos-drm-next" at > http://git.kernel.org/?p=linux/kernel/git/daeinki/drm-exynos.git > > drivers/gpu/drm/exynos/exynos_drm_crtc.c | 30 +++++++++++++++++++++++++++++ > drivers/gpu/drm/exynos/exynos_drm_crtc.h | 1 + > drivers/gpu/drm/exynos/exynos_drm_fimd.c | 30 +---------------------------- > drivers/gpu/drm/exynos/exynos_drm_vidi.c | 30 +---------------------------- > drivers/gpu/drm/exynos/exynos_mixer.c | 33 +++----------------------------- > 5 files changed, 36 insertions(+), 88 deletions(-) > > diff --git a/drivers/gpu/drm/exynos/exynos_drm_crtc.c b/drivers/gpu/drm/exynos/exynos_drm_crtc.c > index d59a03a..e8894bc 100644 > --- a/drivers/gpu/drm/exynos/exynos_drm_crtc.c > +++ b/drivers/gpu/drm/exynos/exynos_drm_crtc.c > @@ -393,3 +393,33 @@ void exynos_drm_crtc_disable_vblank(struct drm_device *dev, int crtc) > exynos_drm_fn_encoder(private->crtc[crtc], &crtc, > exynos_drm_disable_vblank); > } > + > +void exynos_drm_crtc_finish_pageflip(struct drm_device *dev, int crtc) > +{ > + struct exynos_drm_private *dev_priv = dev->dev_private; > + struct drm_pending_vblank_event *e, *t; > + struct timeval now; > + unsigned long flags; > + > + DRM_DEBUG_KMS("%s\n", __FILE__); > + > + spin_lock_irqsave(&dev->event_lock, flags); > + > + list_for_each_entry_safe(e, t, &dev_priv->pageflip_event_list, > + base.link) { > + /* if event's pipe isn't same as crtc then ignore it. */ > + if (crtc != e->pipe) > + continue; > + > + do_gettimeofday(&now); > + e->event.sequence = 0; > + e->event.tv_sec = now.tv_sec; > + e->event.tv_usec = now.tv_usec; > + > + list_move_tail(&e->base.link, &e->base.file_priv->event_list); > + wake_up_interruptible(&e->base.file_priv->event_wait); > + drm_vblank_put(dev, crtc); > + } > + > + spin_unlock_irqrestore(&dev->event_lock, flags); > +} > diff --git a/drivers/gpu/drm/exynos/exynos_drm_crtc.h b/drivers/gpu/drm/exynos/exynos_drm_crtc.h > index 8ac3969..3e197e6 100644 > --- a/drivers/gpu/drm/exynos/exynos_drm_crtc.h > +++ b/drivers/gpu/drm/exynos/exynos_drm_crtc.h > @@ -18,5 +18,6 @@ > int exynos_drm_crtc_create(struct drm_device *dev, unsigned int nr); > int exynos_drm_crtc_enable_vblank(struct drm_device *dev, int crtc); > void exynos_drm_crtc_disable_vblank(struct drm_device *dev, int crtc); > +void exynos_drm_crtc_finish_pageflip(struct drm_device *dev, int crtc); > > #endif > diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c > index bf0d9ba..6dda825 100644 > --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c > +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c > @@ -663,34 +663,6 @@ static struct exynos_drm_manager fimd_manager = { > .display_ops = &fimd_display_ops, > }; > > -static void fimd_finish_pageflip(struct drm_device *drm_dev, int crtc) > -{ > - struct exynos_drm_private *dev_priv = drm_dev->dev_private; > - struct drm_pending_vblank_event *e, *t; > - struct timeval now; > - unsigned long flags; > - > - spin_lock_irqsave(&drm_dev->event_lock, flags); > - > - list_for_each_entry_safe(e, t, &dev_priv->pageflip_event_list, > - base.link) { > - /* if event's pipe isn't same as crtc then ignore it. */ > - if (crtc != e->pipe) > - continue; > - > - do_gettimeofday(&now); > - e->event.sequence = 0; > - e->event.tv_sec = now.tv_sec; > - e->event.tv_usec = now.tv_usec; > - > - list_move_tail(&e->base.link, &e->base.file_priv->event_list); > - wake_up_interruptible(&e->base.file_priv->event_wait); > - drm_vblank_put(drm_dev, crtc); > - } > - > - spin_unlock_irqrestore(&drm_dev->event_lock, flags); > -} > - > static irqreturn_t fimd_irq_handler(int irq, void *dev_id) > { > struct fimd_context *ctx = (struct fimd_context *)dev_id; > @@ -710,7 +682,7 @@ static irqreturn_t fimd_irq_handler(int irq, void *dev_id) > goto out; > > drm_handle_vblank(drm_dev, manager->pipe); > - fimd_finish_pageflip(drm_dev, manager->pipe); > + exynos_drm_crtc_finish_pageflip(drm_dev, manager->pipe); > > /* set wait vsync event to zero and wake up queue. */ > if (atomic_read(&ctx->wait_vsync_event)) { > diff --git a/drivers/gpu/drm/exynos/exynos_drm_vidi.c b/drivers/gpu/drm/exynos/exynos_drm_vidi.c > index 3260035..b192308 100644 > --- a/drivers/gpu/drm/exynos/exynos_drm_vidi.c > +++ b/drivers/gpu/drm/exynos/exynos_drm_vidi.c > @@ -379,34 +379,6 @@ static struct exynos_drm_manager vidi_manager = { > .display_ops = &vidi_display_ops, > }; > > -static void vidi_finish_pageflip(struct drm_device *drm_dev, int crtc) > -{ > - struct exynos_drm_private *dev_priv = drm_dev->dev_private; > - struct drm_pending_vblank_event *e, *t; > - struct timeval now; > - unsigned long flags; > - > - spin_lock_irqsave(&drm_dev->event_lock, flags); > - > - list_for_each_entry_safe(e, t, &dev_priv->pageflip_event_list, > - base.link) { > - /* if event's pipe isn't same as crtc then ignore it. */ > - if (crtc != e->pipe) > - continue; > - > - do_gettimeofday(&now); > - e->event.sequence = 0; > - e->event.tv_sec = now.tv_sec; > - e->event.tv_usec = now.tv_usec; > - > - list_move_tail(&e->base.link, &e->base.file_priv->event_list); > - wake_up_interruptible(&e->base.file_priv->event_wait); > - drm_vblank_put(drm_dev, crtc); > - } > - > - spin_unlock_irqrestore(&drm_dev->event_lock, flags); > -} > - > static void vidi_fake_vblank_handler(struct work_struct *work) > { > struct vidi_context *ctx = container_of(work, struct vidi_context, > @@ -431,7 +403,7 @@ static void vidi_fake_vblank_handler(struct work_struct *work) > > mutex_unlock(&ctx->lock); > > - vidi_finish_pageflip(subdrv->drm_dev, manager->pipe); > + exynos_drm_crtc_finish_pageflip(subdrv->drm_dev, manager->pipe); > } > > static int vidi_subdrv_probe(struct drm_device *drm_dev, struct device *dev) > diff --git a/drivers/gpu/drm/exynos/exynos_mixer.c b/drivers/gpu/drm/exynos/exynos_mixer.c > index 21db895..e9dbf79 100644 > --- a/drivers/gpu/drm/exynos/exynos_mixer.c > +++ b/drivers/gpu/drm/exynos/exynos_mixer.c > @@ -35,6 +35,7 @@ > #include <drm/exynos_drm.h> > > #include "exynos_drm_drv.h" > +#include "exynos_drm_crtc.h" > #include "exynos_drm_hdmi.h" > #include "exynos_drm_iommu.h" > > @@ -949,35 +950,6 @@ static struct exynos_mixer_ops mixer_ops = { > .win_disable = mixer_win_disable, > }; > > -/* for pageflip event */ > -static void mixer_finish_pageflip(struct drm_device *drm_dev, int crtc) > -{ > - struct exynos_drm_private *dev_priv = drm_dev->dev_private; > - struct drm_pending_vblank_event *e, *t; > - struct timeval now; > - unsigned long flags; > - > - spin_lock_irqsave(&drm_dev->event_lock, flags); > - > - list_for_each_entry_safe(e, t, &dev_priv->pageflip_event_list, > - base.link) { > - /* if event's pipe isn't same as crtc then ignore it. */ > - if (crtc != e->pipe) > - continue; > - > - do_gettimeofday(&now); > - e->event.sequence = 0; > - e->event.tv_sec = now.tv_sec; > - e->event.tv_usec = now.tv_usec; > - > - list_move_tail(&e->base.link, &e->base.file_priv->event_list); > - wake_up_interruptible(&e->base.file_priv->event_wait); > - drm_vblank_put(drm_dev, crtc); > - } > - > - spin_unlock_irqrestore(&drm_dev->event_lock, flags); > -} > - > static irqreturn_t mixer_irq_handler(int irq, void *arg) > { > struct exynos_drm_hdmi_context *drm_hdmi_ctx = arg; > @@ -1006,7 +978,8 @@ static irqreturn_t mixer_irq_handler(int irq, void *arg) > } > > drm_handle_vblank(drm_hdmi_ctx->drm_dev, ctx->pipe); > - mixer_finish_pageflip(drm_hdmi_ctx->drm_dev, ctx->pipe); > + exynos_drm_crtc_finish_pageflip(drm_hdmi_ctx->drm_dev, > + ctx->pipe); > > /* set wait vsync event to zero and wake up queue. */ > if (atomic_read(&ctx->wait_vsync_event)) { > -- > 1.8.0 > > _______________________________________________ > dri-devel mailing list > dri-devel@xxxxxxxxxxxxxxxxxxxxx > http://lists.freedesktop.org/mailman/listinfo/dri-devel _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel