summaryrefslogtreecommitdiff
path: root/drivers/gpu
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2015-01-13 10:14:53 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2015-03-20 15:30:18 +0300
commit5dbe44336811a7e8ef4c958c6ac054772ee47637 (patch)
tree078bba27e553bece4fac23010bf4b3c6df5c51f4 /drivers/gpu
parent82e58855bc4f8442145cb2037e164a4b1f5cf854 (diff)
downloadlinux-5dbe44336811a7e8ef4c958c6ac054772ee47637.tar.xz
drm: omapdrm: Fix race condition between GO and vblank IRQ
The vblank interrupt is used by the driver as a completion signal when applying new settings. A race condition exist between enabling the vblank interrupt and applying new settings to the hardware by setting the GO bit. If a vblank interrupt occurs in-between, the driver will incorrectly consider the new settings to be applied. Fix this by enabling the interrupt after setting the GO bit. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/omapdrm/omap_crtc.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/gpu/drm/omapdrm/omap_crtc.c b/drivers/gpu/drm/omapdrm/omap_crtc.c
index c7d3e1eec6cb..3f811186c891 100644
--- a/drivers/gpu/drm/omapdrm/omap_crtc.c
+++ b/drivers/gpu/drm/omapdrm/omap_crtc.c
@@ -501,8 +501,8 @@ static void apply_worker(struct work_struct *work)
DBG("%s: GO", omap_crtc->name);
if (dispc_mgr_is_enabled(channel)) {
- omap_irq_register(dev, &omap_crtc->apply_irq);
dispc_mgr_go(channel);
+ omap_irq_register(dev, &omap_crtc->apply_irq);
} else {
struct omap_drm_private *priv = dev->dev_private;
queue_work(priv->wq, &omap_crtc->apply_work);