drivers/gpu/drm/via/via_drv.c |   15 ++++++++-------
 drivers/gpu/drm/via/via_irq.c |    5 +++++
 2 files changed, 13 insertions(+), 7 deletions(-)

New commits:
commit b853ddcddd71d963caed596fbf1f73e040099f6f
Author: James Simmons <jsimm...@infradead.org>
Date:   Sat Mar 30 15:22:06 2013 -0400

    Enabling vsync handling on the second crtc exposed a bug for IRQ handling. 
We need to enable IRQ after vblank setup. Also the docs recommend starting the 
hotplug irq handling after at least two frames have been displayed.

diff --git a/drivers/gpu/drm/via/via_drv.c b/drivers/gpu/drm/via/via_drv.c
index 323c363..9e089bd 100644
--- a/drivers/gpu/drm/via/via_drv.c
+++ b/drivers/gpu/drm/via/via_drv.c
@@ -261,6 +261,8 @@ static int via_driver_unload(struct drm_device *dev)
        if (ret)
                return ret;
 
+       drm_irq_uninstall(dev);
+
        if (drm_core_check_feature(dev, DRIVER_MODESET))
                via_modeset_fini(dev);
 
@@ -268,8 +270,6 @@ static int via_driver_unload(struct drm_device *dev)
 
        drm_vblank_cleanup(dev);
 
-       drm_irq_uninstall(dev);
-
        /* destroy work queue. */
        destroy_workqueue(dev_priv->wq);
 
@@ -390,10 +390,6 @@ via_driver_load(struct drm_device *dev, unsigned long 
chipset)
                goto out_err;
        }
 
-       ret = drm_irq_install(dev);
-       if (ret)
-               goto out_err;
-
        ret = drm_vblank_init(dev, 2);
        if (ret)
                goto out_err;
@@ -402,8 +398,13 @@ via_driver_load(struct drm_device *dev, unsigned long 
chipset)
        if (ret)
                goto out_err;
 
-       if (drm_core_check_feature(dev, DRIVER_MODESET))
+       if (drm_core_check_feature(dev, DRIVER_MODESET)) {
                ret = via_modeset_init(dev);
+               if (ret)
+                       goto out_err;
+       }
+
+       ret = drm_irq_install(dev);
 out_err:
        if (ret)
                via_driver_unload(dev);
diff --git a/drivers/gpu/drm/via/via_irq.c b/drivers/gpu/drm/via/via_irq.c
index 79ac545..6c1a511 100644
--- a/drivers/gpu/drm/via/via_irq.c
+++ b/drivers/gpu/drm/via/via_irq.c
@@ -277,6 +277,11 @@ irqreturn_t via_driver_irq_handler(DRM_IRQ_ARGS)
                ret = IRQ_HANDLED;
        }
 
+       if (status & VIA_IRQ_IGA2_VSYNC_STATUS) {
+               drm_handle_vblank(dev, 1);
+               ret = IRQ_HANDLED;
+       }
+
        for (i = 0; i < dev_priv->num_irqs; ++i) {
                if (status & cur_irq->pending_mask) {
                        struct via_fence_engine *eng = NULL;
_______________________________________________
Openchrome-devel mailing list
Openchrome-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/openchrome-devel

Reply via email to