diff options
author | Daniel Vetter <daniel.vetter@ffwll.ch> | 2016-05-18 15:47:38 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2016-05-20 17:03:31 -0400 |
commit | fcee59065e58498682c60069cc6fb90694bab27e (patch) | |
tree | bea115621d1291a80d6bb57c2af3a36e366b84f5 | |
parent | fc7fedc20b7c819b9ef003afa16a64dc9e5ac30e (diff) |
drm: Nuke ->vblank_disable_allowed
This was added in
commit 0a3e67a4caac273a3bfc4ced3da364830b1ab241
Author: Jesse Barnes <jbarnes@virtuousgeek.org>
Date: Tue Sep 30 12:14:26 2008 -0700
drm: Rework vblank-wait handling to allow interrupt reduction.
to stay backwards-compatible with old UMS code that didn't even tell
the kernel when it did a modeset, so that the kernel could
save/restore vblank counters. At worst this means vblanks will be
somewhat funky on a setup that very likely no one still runs.
So let's just nuke it.
Plan B would be to set it unconditionally in drm_vblank_init for kms
drivers, instead of in each driver separately. So if this patch breaks
anything please only restore the hunks in drmP.h and drm_irq.c, plus
add a check for DRIVER_MODESET in drm_vblank_init.
Stumbled over this in a discussion on irc with Chris.
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: Liviu Dudau <liviu.dudau@arm.com>
Cc: Russell King <rmk+kernel@arm.linux.org.uk>
Cc: Thierry Reding <thierry.reding@gmail.com>
Cc: Eric Anholt <eric@anholt.net>
Cc: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Cc: Inki Dae <inki.dae@samsung.com>
Cc: Tomi Valkeinen <tomi.valkeinen@ti.com>
Cc: Mark Yao <mark.yao@rock-chips.com>
Cc: Sascha Hauer <s.hauer@pengutronix.de>
Cc: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Acked-by: Liviu Dudau <Liviu.Dudau@arm.com>
Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Tested-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/arm/hdlcd_drv.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/armada/armada_drv.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/drm_irq.c | 6 | ||||
-rw-r--r-- | drivers/gpu/drm/exynos/exynos_drm_drv.c | 7 | ||||
-rw-r--r-- | drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/gma500/psb_drv.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/i915_dma.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/imx/imx-drm-core.c | 7 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_irq_kms.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 7 | ||||
-rw-r--r-- | drivers/gpu/drm/tegra/drm.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/vc4/vc4_kms.c | 2 | ||||
-rw-r--r-- | include/drm/drmP.h | 8 |
14 files changed, 0 insertions, 47 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c index 9266c7b69808..835a3fa8d8df 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c | |||
@@ -219,7 +219,6 @@ int amdgpu_irq_init(struct amdgpu_device *adev) | |||
219 | if (r) { | 219 | if (r) { |
220 | return r; | 220 | return r; |
221 | } | 221 | } |
222 | adev->ddev->vblank_disable_allowed = true; | ||
223 | 222 | ||
224 | /* enable msi */ | 223 | /* enable msi */ |
225 | adev->irq.msi_enabled = false; | 224 | adev->irq.msi_enabled = false; |
diff --git a/drivers/gpu/drm/arm/hdlcd_drv.c b/drivers/gpu/drm/arm/hdlcd_drv.c index 734899c4e4bb..b987c63ba8d6 100644 --- a/drivers/gpu/drm/arm/hdlcd_drv.c +++ b/drivers/gpu/drm/arm/hdlcd_drv.c | |||
@@ -379,7 +379,6 @@ static int hdlcd_drm_bind(struct device *dev) | |||
379 | DRM_ERROR("failed to initialise vblank\n"); | 379 | DRM_ERROR("failed to initialise vblank\n"); |
380 | goto err_vblank; | 380 | goto err_vblank; |
381 | } | 381 | } |
382 | drm->vblank_disable_allowed = true; | ||
383 | 382 | ||
384 | drm_mode_config_reset(drm); | 383 | drm_mode_config_reset(drm); |
385 | drm_kms_helper_poll_init(drm); | 384 | drm_kms_helper_poll_init(drm); |
diff --git a/drivers/gpu/drm/armada/armada_drv.c b/drivers/gpu/drm/armada/armada_drv.c index 82043c204b76..439824a61aa5 100644 --- a/drivers/gpu/drm/armada/armada_drv.c +++ b/drivers/gpu/drm/armada/armada_drv.c | |||
@@ -113,7 +113,6 @@ static int armada_drm_load(struct drm_device *dev, unsigned long flags) | |||
113 | goto err_comp; | 113 | goto err_comp; |
114 | 114 | ||
115 | dev->irq_enabled = true; | 115 | dev->irq_enabled = true; |
116 | dev->vblank_disable_allowed = 1; | ||
117 | 116 | ||
118 | ret = armada_fbdev_init(dev); | 117 | ret = armada_fbdev_init(dev); |
119 | if (ret) | 118 | if (ret) |
diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c index 3c1a6f18e71c..0fac801c18fe 100644 --- a/drivers/gpu/drm/drm_irq.c +++ b/drivers/gpu/drm/drm_irq.c | |||
@@ -348,9 +348,6 @@ static void vblank_disable_fn(unsigned long arg) | |||
348 | unsigned int pipe = vblank->pipe; | 348 | unsigned int pipe = vblank->pipe; |
349 | unsigned long irqflags; | 349 | unsigned long irqflags; |
350 | 350 | ||
351 | if (!dev->vblank_disable_allowed) | ||
352 | return; | ||
353 | |||
354 | spin_lock_irqsave(&dev->vbl_lock, irqflags); | 351 | spin_lock_irqsave(&dev->vbl_lock, irqflags); |
355 | if (atomic_read(&vblank->refcount) == 0 && vblank->enabled) { | 352 | if (atomic_read(&vblank->refcount) == 0 && vblank->enabled) { |
356 | DRM_DEBUG("disabling vblank on crtc %u\n", pipe); | 353 | DRM_DEBUG("disabling vblank on crtc %u\n", pipe); |
@@ -437,8 +434,6 @@ int drm_vblank_init(struct drm_device *dev, unsigned int num_crtcs) | |||
437 | "get_vblank_timestamp == NULL\n"); | 434 | "get_vblank_timestamp == NULL\n"); |
438 | } | 435 | } |
439 | 436 | ||
440 | dev->vblank_disable_allowed = false; | ||
441 | |||
442 | return 0; | 437 | return 0; |
443 | 438 | ||
444 | err: | 439 | err: |
@@ -1585,7 +1580,6 @@ void drm_vblank_post_modeset(struct drm_device *dev, unsigned int pipe) | |||
1585 | 1580 | ||
1586 | if (vblank->inmodeset) { | 1581 | if (vblank->inmodeset) { |
1587 | spin_lock_irqsave(&dev->vbl_lock, irqflags); | 1582 | spin_lock_irqsave(&dev->vbl_lock, irqflags); |
1588 | dev->vblank_disable_allowed = true; | ||
1589 | drm_reset_vblank_timestamp(dev, pipe); | 1583 | drm_reset_vblank_timestamp(dev, pipe); |
1590 | spin_unlock_irqrestore(&dev->vbl_lock, irqflags); | 1584 | spin_unlock_irqrestore(&dev->vbl_lock, irqflags); |
1591 | 1585 | ||
diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c b/drivers/gpu/drm/exynos/exynos_drm_drv.c index 21c719e8e02b..2dd820e23b0c 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_drv.c +++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c | |||
@@ -212,13 +212,6 @@ static int exynos_drm_load(struct drm_device *dev, unsigned long flags) | |||
212 | */ | 212 | */ |
213 | dev->irq_enabled = true; | 213 | dev->irq_enabled = true; |
214 | 214 | ||
215 | /* | ||
216 | * with vblank_disable_allowed = true, vblank interrupt will be disabled | ||
217 | * by drm timer once a current process gives up ownership of | ||
218 | * vblank event.(after drm_vblank_put function is called) | ||
219 | */ | ||
220 | dev->vblank_disable_allowed = true; | ||
221 | |||
222 | /* init kms poll for handling hpd */ | 215 | /* init kms poll for handling hpd */ |
223 | drm_kms_helper_poll_init(dev); | 216 | drm_kms_helper_poll_init(dev); |
224 | 217 | ||
diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c index 44f6f262d75a..0ec1ad961e0d 100644 --- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c +++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c | |||
@@ -80,7 +80,6 @@ static int fsl_dcu_load(struct drm_device *dev, unsigned long flags) | |||
80 | dev_err(dev->dev, "failed to initialize vblank\n"); | 80 | dev_err(dev->dev, "failed to initialize vblank\n"); |
81 | goto done; | 81 | goto done; |
82 | } | 82 | } |
83 | dev->vblank_disable_allowed = true; | ||
84 | 83 | ||
85 | ret = fsl_dcu_drm_irq_init(dev); | 84 | ret = fsl_dcu_drm_irq_init(dev); |
86 | if (ret < 0) | 85 | if (ret < 0) |
diff --git a/drivers/gpu/drm/gma500/psb_drv.c b/drivers/gpu/drm/gma500/psb_drv.c index 4e1c6850520e..82b8ce418b27 100644 --- a/drivers/gpu/drm/gma500/psb_drv.c +++ b/drivers/gpu/drm/gma500/psb_drv.c | |||
@@ -374,7 +374,6 @@ static int psb_driver_load(struct drm_device *dev, unsigned long flags) | |||
374 | 374 | ||
375 | drm_irq_install(dev, dev->pdev->irq); | 375 | drm_irq_install(dev, dev->pdev->irq); |
376 | 376 | ||
377 | dev->vblank_disable_allowed = true; | ||
378 | dev->max_vblank_count = 0xffffff; /* only 24 bits of frame count */ | 377 | dev->max_vblank_count = 0xffffff; /* only 24 bits of frame count */ |
379 | dev->driver->get_vblank_counter = psb_get_vblank_counter; | 378 | dev->driver->get_vblank_counter = psb_get_vblank_counter; |
380 | 379 | ||
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c index 5c7615041b31..15615fb9bde6 100644 --- a/drivers/gpu/drm/i915/i915_dma.c +++ b/drivers/gpu/drm/i915/i915_dma.c | |||
@@ -476,9 +476,6 @@ static int i915_load_modeset_init(struct drm_device *dev) | |||
476 | 476 | ||
477 | intel_modeset_gem_init(dev); | 477 | intel_modeset_gem_init(dev); |
478 | 478 | ||
479 | /* Always safe in the mode setting case. */ | ||
480 | /* FIXME: do pre/post-mode set stuff in core KMS code */ | ||
481 | dev->vblank_disable_allowed = true; | ||
482 | if (INTEL_INFO(dev)->num_pipes == 0) | 479 | if (INTEL_INFO(dev)->num_pipes == 0) |
483 | return 0; | 480 | return 0; |
484 | 481 | ||
diff --git a/drivers/gpu/drm/imx/imx-drm-core.c b/drivers/gpu/drm/imx/imx-drm-core.c index 2453fb1c68a7..1080019e7b17 100644 --- a/drivers/gpu/drm/imx/imx-drm-core.c +++ b/drivers/gpu/drm/imx/imx-drm-core.c | |||
@@ -252,13 +252,6 @@ static int imx_drm_driver_load(struct drm_device *drm, unsigned long flags) | |||
252 | if (ret) | 252 | if (ret) |
253 | goto err_kms; | 253 | goto err_kms; |
254 | 254 | ||
255 | /* | ||
256 | * with vblank_disable_allowed = true, vblank interrupt will be | ||
257 | * disabled by drm timer once a current process gives up ownership | ||
258 | * of vblank event. (after drm_vblank_put function is called) | ||
259 | */ | ||
260 | drm->vblank_disable_allowed = true; | ||
261 | |||
262 | platform_set_drvdata(drm->platformdev, drm); | 255 | platform_set_drvdata(drm->platformdev, drm); |
263 | 256 | ||
264 | /* Now try and bind all our sub-components */ | 257 | /* Now try and bind all our sub-components */ |
diff --git a/drivers/gpu/drm/radeon/radeon_irq_kms.c b/drivers/gpu/drm/radeon/radeon_irq_kms.c index 1e9304d1c88f..c084cadcbf21 100644 --- a/drivers/gpu/drm/radeon/radeon_irq_kms.c +++ b/drivers/gpu/drm/radeon/radeon_irq_kms.c | |||
@@ -291,7 +291,6 @@ int radeon_irq_kms_init(struct radeon_device *rdev) | |||
291 | if (r) { | 291 | if (r) { |
292 | return r; | 292 | return r; |
293 | } | 293 | } |
294 | rdev->ddev->vblank_disable_allowed = true; | ||
295 | 294 | ||
296 | /* enable msi */ | 295 | /* enable msi */ |
297 | rdev->msi_enabled = 0; | 296 | rdev->msi_enabled = 0; |
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c index 399adf3c4224..a409d1f703cb 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c | |||
@@ -216,13 +216,6 @@ static int rockchip_drm_load(struct drm_device *drm_dev, unsigned long flags) | |||
216 | if (ret) | 216 | if (ret) |
217 | goto err_kms_helper_poll_fini; | 217 | goto err_kms_helper_poll_fini; |
218 | 218 | ||
219 | /* | ||
220 | * with vblank_disable_allowed = true, vblank interrupt will be disabled | ||
221 | * by drm timer once a current process gives up ownership of | ||
222 | * vblank event.(after drm_vblank_put function is called) | ||
223 | */ | ||
224 | drm_dev->vblank_disable_allowed = true; | ||
225 | |||
226 | drm_mode_config_reset(drm_dev); | 219 | drm_mode_config_reset(drm_dev); |
227 | 220 | ||
228 | ret = rockchip_drm_fbdev_init(drm_dev); | 221 | ret = rockchip_drm_fbdev_init(drm_dev); |
diff --git a/drivers/gpu/drm/tegra/drm.c b/drivers/gpu/drm/tegra/drm.c index 679905544181..b59c3bf0df44 100644 --- a/drivers/gpu/drm/tegra/drm.c +++ b/drivers/gpu/drm/tegra/drm.c | |||
@@ -180,7 +180,6 @@ static int tegra_drm_load(struct drm_device *drm, unsigned long flags) | |||
180 | 180 | ||
181 | /* syncpoints are used for full 32-bit hardware VBLANK counters */ | 181 | /* syncpoints are used for full 32-bit hardware VBLANK counters */ |
182 | drm->max_vblank_count = 0xffffffff; | 182 | drm->max_vblank_count = 0xffffffff; |
183 | drm->vblank_disable_allowed = true; | ||
184 | 183 | ||
185 | err = drm_vblank_init(drm, drm->mode_config.num_crtc); | 184 | err = drm_vblank_init(drm, drm->mode_config.num_crtc); |
186 | if (err < 0) | 185 | if (err < 0) |
diff --git a/drivers/gpu/drm/vc4/vc4_kms.c b/drivers/gpu/drm/vc4/vc4_kms.c index d423ba10239a..cb37751bc99f 100644 --- a/drivers/gpu/drm/vc4/vc4_kms.c +++ b/drivers/gpu/drm/vc4/vc4_kms.c | |||
@@ -207,8 +207,6 @@ int vc4_kms_load(struct drm_device *dev) | |||
207 | dev->mode_config.preferred_depth = 24; | 207 | dev->mode_config.preferred_depth = 24; |
208 | dev->mode_config.async_page_flip = true; | 208 | dev->mode_config.async_page_flip = true; |
209 | 209 | ||
210 | dev->vblank_disable_allowed = true; | ||
211 | |||
212 | drm_mode_config_reset(dev); | 210 | drm_mode_config_reset(dev); |
213 | 211 | ||
214 | vc4->fbdev = drm_fbdev_cma_init(dev, 32, | 212 | vc4->fbdev = drm_fbdev_cma_init(dev, 32, |
diff --git a/include/drm/drmP.h b/include/drm/drmP.h index 360b2a74e1ef..84f1a8eefbdb 100644 --- a/include/drm/drmP.h +++ b/include/drm/drmP.h | |||
@@ -815,14 +815,6 @@ struct drm_device { | |||
815 | int irq; | 815 | int irq; |
816 | 816 | ||
817 | /* | 817 | /* |
818 | * At load time, disabling the vblank interrupt won't be allowed since | ||
819 | * old clients may not call the modeset ioctl and therefore misbehave. | ||
820 | * Once the modeset ioctl *has* been called though, we can safely | ||
821 | * disable them when unused. | ||
822 | */ | ||
823 | bool vblank_disable_allowed; | ||
824 | |||
825 | /* | ||
826 | * If true, vblank interrupt will be disabled immediately when the | 818 | * If true, vblank interrupt will be disabled immediately when the |
827 | * refcount drops to zero, as opposed to via the vblank disable | 819 | * refcount drops to zero, as opposed to via the vblank disable |
828 | * timer. | 820 | * timer. |