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