]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
drm: pass the irq explicitly to drm_irq_install
authorDaniel Vetter <daniel.vetter@ffwll.ch>
Sun, 3 Nov 2013 20:09:27 +0000 (21:09 +0100)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Wed, 23 Apr 2014 08:32:50 +0000 (10:32 +0200)
Unfortunately this requires a drm-wide change, and I didn't see a sane
way around that. Luckily it's fairly simple, we just need to inline
the respective get_irq implementation from either drm_pci.c or
drm_platform.c.

With that we can now also remove drm_dev_to_irq from drm_irq.c.

Reviewed-by: Thierry Reding <treding@nvidia.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
14 files changed:
Documentation/DocBook/drm.tmpl
drivers/gpu/drm/armada/armada_drv.c
drivers/gpu/drm/drm_irq.c
drivers/gpu/drm/gma500/psb_drv.c
drivers/gpu/drm/i915/i915_dma.c
drivers/gpu/drm/i915/i915_drv.c
drivers/gpu/drm/i915/i915_gem.c
drivers/gpu/drm/msm/msm_drv.c
drivers/gpu/drm/qxl/qxl_irq.c
drivers/gpu/drm/radeon/radeon_irq_kms.c
drivers/gpu/drm/shmobile/shmob_drm_drv.c
drivers/gpu/drm/tilcdc/tilcdc_drv.c
drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
include/drm/drmP.h

index 677a02553ec0cd772c1a86c73b7d314f48376190..83dd0b043c285815c26553ee2cc764b2da3728c2 100644 (file)
@@ -341,14 +341,6 @@ char *date;</synopsis>
         </para>
         <sect4>
           <title>Managed IRQ Registration</title>
-          <para>
-            Both the <function>drm_irq_install</function> and
-           <function>drm_irq_uninstall</function> functions get the device IRQ by
-           calling <function>drm_dev_to_irq</function>. This inline function will
-           call a bus-specific operation to retrieve the IRQ number. For platform
-           devices, <function>platform_get_irq</function>(..., 0) is used to
-           retrieve the IRQ number.
-          </para>
           <para>
             <function>drm_irq_install</function> starts by calling the
             <methodname>irq_preinstall</methodname> driver operation. The operation
@@ -356,7 +348,7 @@ char *date;</synopsis>
             clearing all pending interrupt flags or disabling the interrupt.
           </para>
           <para>
-            The IRQ will then be requested by a call to
+            The passed-in IRQ will then be requested by a call to
             <function>request_irq</function>. If the DRIVER_IRQ_SHARED driver
             feature flag is set, a shared (IRQF_SHARED) IRQ handler will be
             requested.
index 32982da82694be753d1072c90136d842a8a866ec..567cfbde0883df7f26e9b81da62ef778503dd424 100644 (file)
@@ -173,7 +173,7 @@ static int armada_drm_load(struct drm_device *dev, unsigned long flags)
        if (ret)
                goto err_kms;
 
-       ret = drm_irq_install(dev);
+       ret = drm_irq_install(dev, platform_get_irq(dev->platformdev, 0));
        if (ret)
                goto err_kms;
 
index cbf6f259bfe496640ec04f15d87573fef0798b73..de38bc9b658119dc5330ebe0dc865841bacc16f3 100644 (file)
@@ -233,11 +233,6 @@ static void drm_irq_vgaarb_nokms(void *cookie, bool state)
        }
 }
 
-static inline int drm_dev_to_irq(struct drm_device *dev)
-{
-       return dev->driver->bus->get_irq(dev);
-}
-
 /**
  * Install IRQ handler.
  *
@@ -247,14 +242,12 @@ static inline int drm_dev_to_irq(struct drm_device *dev)
  * \c irq_preinstall() and \c irq_postinstall() functions
  * before and after the installation.
  */
-int drm_irq_install(struct drm_device *dev)
+int drm_irq_install(struct drm_device *dev, int irq)
 {
-       int ret, irq;
+       int ret;
        unsigned long sh_flags = 0;
        char *irqname;
 
-       irq = drm_dev_to_irq(dev);
-
        if (!drm_core_check_feature(dev, DRIVER_HAVE_IRQ))
                return -EINVAL;
 
@@ -399,7 +392,7 @@ int drm_control(struct drm_device *dev, void *data,
                    ctl->irq != irq)
                        return -EINVAL;
                mutex_lock(&dev->struct_mutex);
-               ret = drm_irq_install(dev);
+               ret = drm_irq_install(dev, irq);
                mutex_unlock(&dev->struct_mutex);
 
                return ret;
index b686e56646ebd4b8abe6ba53582dd4e595484f29..0a3101a3db19bb2fc068d7b34468b07826b09148 100644 (file)
@@ -354,7 +354,7 @@ static int psb_driver_load(struct drm_device *dev, unsigned long flags)
        PSB_WVDC32(0xFFFFFFFF, PSB_INT_MASK_R);
        spin_unlock_irqrestore(&dev_priv->irqmask_lock, irqflags);
 
-       drm_irq_install(dev);
+       drm_irq_install(dev, dev->pdev->irq);
 
        dev->vblank_disable_allowed = true;
        dev->max_vblank_count = 0xffffff; /* only 24 bits of frame count */
index 283ff06001bcca88220e6e6402db44ca9f8d6bd3..42de2808e53de0971c766d7c274da43c5ffc6a5b 100644 (file)
@@ -1327,7 +1327,7 @@ static int i915_load_modeset_init(struct drm_device *dev)
 
        intel_power_domains_init_hw(dev_priv);
 
-       ret = drm_irq_install(dev);
+       ret = drm_irq_install(dev, dev->pdev->irq);
        if (ret)
                goto cleanup_gem_stolen;
 
index 87ce105910f2f91f0e032e64029dee608d356c71..6124b491a19e95fb5012879a4b7cfb5471f33ea3 100644 (file)
@@ -574,7 +574,7 @@ static int __i915_drm_thaw(struct drm_device *dev, bool restore_gtt_mappings)
                mutex_unlock(&dev->struct_mutex);
 
                /* We need working interrupts for modeset enabling ... */
-               drm_irq_install(dev);
+               drm_irq_install(dev, dev->pdev->irq);
 
                intel_modeset_init_hw(dev);
 
@@ -752,7 +752,7 @@ int i915_reset(struct drm_device *dev)
                 * being false when they shouldn't be able to.
                 */
                drm_irq_uninstall(dev);
-               drm_irq_install(dev);
+               drm_irq_install(dev, dev->pdev->irq);
 
                /* rps/rc6 re-init is necessary to restore state lost after the
                 * reset and the re-install of drm irq. Skip for ironlake per
index d2cc19a7023f1b72d88debb2df861d92c9d6e0ba..a94938f086985fa232111ebdd5d0608e95f8069d 100644 (file)
@@ -4523,7 +4523,7 @@ i915_gem_entervt_ioctl(struct drm_device *dev, void *data,
 
        BUG_ON(!list_empty(&dev_priv->gtt.base.active_list));
 
-       ret = drm_irq_install(dev);
+       ret = drm_irq_install(dev, dev->pdev->irq);
        if (ret)
                goto cleanup_ringbuffer;
        mutex_unlock(&dev->struct_mutex);
index f9de156b9e65c992d51f32d9670c315d240797da..50ec1bed5820e80aaf98946e17b82afa0fb21952 100644 (file)
@@ -288,7 +288,7 @@ static int msm_load(struct drm_device *dev, unsigned long flags)
        }
 
        pm_runtime_get_sync(dev->dev);
-       ret = drm_irq_install(dev);
+       ret = drm_irq_install(dev, platform_get_irq(dev->platformdev, 0));
        pm_runtime_put_sync(dev->dev);
        if (ret < 0) {
                dev_err(dev->dev, "failed to install IRQ handler\n");
index 28f84b4fce32fab576d4bd71d324bceaf93c0682..34d6a85e9023655efd5c67bd6b1e67d20b34b1bc 100644 (file)
@@ -87,7 +87,7 @@ int qxl_irq_init(struct qxl_device *qdev)
        atomic_set(&qdev->irq_received_cursor, 0);
        atomic_set(&qdev->irq_received_io_cmd, 0);
        qdev->irq_received_error = 0;
-       ret = drm_irq_install(qdev->ddev);
+       ret = drm_irq_install(qdev->ddev, qdev->ddev->pdev->irq);
        qdev->ram_header->int_mask = QXL_INTERRUPT_MASK;
        if (unlikely(ret != 0)) {
                DRM_ERROR("Failed installing irq: %d\n", ret);
index 089c9ffb0aa95e8e47c964f190b07e0e8fe93c32..16807afab362509f8432bf4a021d3954e747c301 100644 (file)
@@ -287,7 +287,7 @@ int radeon_irq_kms_init(struct radeon_device *rdev)
        INIT_WORK(&rdev->reset_work, radeon_irq_reset_work_func);
 
        rdev->irq.installed = true;
-       r = drm_irq_install(rdev->ddev);
+       r = drm_irq_install(rdev->ddev, rdev->ddev->pdev->irq);
        if (r) {
                rdev->irq.installed = false;
                flush_work(&rdev->hotplug_work);
index c839c9c89efbf6f4eb4a37cac2fba654435bd1f9..82c84c7fd4f6e1c93d2872414045bed206899c9a 100644 (file)
@@ -185,7 +185,7 @@ static int shmob_drm_load(struct drm_device *dev, unsigned long flags)
                goto done;
        }
 
-       ret = drm_irq_install(dev);
+       ret = drm_irq_install(dev, platform_get_irq(dev->platformdev, 0));
        if (ret < 0) {
                dev_err(&pdev->dev, "failed to install IRQ handler\n");
                goto done;
index 171a8203892ce16b7767b2fb3fa11fc1995f0fad..b20b69488dc9b28d66e557578fa9ab1680984c3b 100644 (file)
@@ -268,7 +268,7 @@ static int tilcdc_load(struct drm_device *dev, unsigned long flags)
        }
 
        pm_runtime_get_sync(dev->dev);
-       ret = drm_irq_install(dev);
+       ret = drm_irq_install(dev, platform_get_irq(dev->platformdev, 0));
        pm_runtime_put_sync(dev->dev);
        if (ret < 0) {
                dev_err(dev->dev, "failed to install IRQ handler\n");
index 4a223bbea3b34ee5489d25810ab04e14f1d2c7e3..6bdd15eea7e85ed098198ea98474213dced5c254 100644 (file)
@@ -806,7 +806,7 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset)
        }
 
        if (dev_priv->capabilities & SVGA_CAP_IRQMASK) {
-               ret = drm_irq_install(dev);
+               ret = drm_irq_install(dev, dev->pdev->irq);
                if (ret != 0) {
                        DRM_ERROR("Failed installing irq: %d\n", ret);
                        goto out_no_irq;
index 8e8c392d6fa8e4aa4b97e896d99ab56f95974791..7a7cfe88b9bf80cbc212b889e36b10fc016c9981 100644 (file)
@@ -1353,7 +1353,7 @@ extern void drm_core_reclaim_buffers(struct drm_device *dev,
                                /* IRQ support (drm_irq.h) */
 extern int drm_control(struct drm_device *dev, void *data,
                       struct drm_file *file_priv);
-extern int drm_irq_install(struct drm_device *dev);
+extern int drm_irq_install(struct drm_device *dev, int irq);
 extern int drm_irq_uninstall(struct drm_device *dev);
 
 extern int drm_vblank_init(struct drm_device *dev, int num_crtcs);