Commit 07600c53 authored by Daniel Vetter's avatar Daniel Vetter

drm/irq: Make drm_vblank_pre/post_modeset internal

Now that all drivers are switched over to drm_crtc_vblank_on/off we
can relegate pre/post_modeset to the purely drm_irq.c internal role of
supporting old ums userspace.

As usual switch to the drm_legacy_ prefix to make it clear this is
for old drivers only.

v2: Rebase on top of Thierry's s/int crtc/unsigned int pipe/ changes.

Cc: Ben Skeggs <bskeggs@redhat.com>
Cc: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@intel.com>
parent 9bc6db0d
...@@ -1445,30 +1445,8 @@ void drm_crtc_vblank_on(struct drm_crtc *crtc) ...@@ -1445,30 +1445,8 @@ void drm_crtc_vblank_on(struct drm_crtc *crtc)
} }
EXPORT_SYMBOL(drm_crtc_vblank_on); EXPORT_SYMBOL(drm_crtc_vblank_on);
/** static void drm_legacy_vblank_pre_modeset(struct drm_device *dev,
* drm_vblank_pre_modeset - account for vblanks across mode sets unsigned int pipe)
* @dev: DRM device
* @pipe: CRTC index
*
* Account for vblank events across mode setting events, which will likely
* reset the hardware frame counter.
*
* This is done by grabbing a temporary vblank reference to ensure that the
* vblank interrupt keeps running across the modeset sequence. With this the
* software-side vblank frame counting will ensure that there are no jumps or
* discontinuities.
*
* Unfortunately this approach is racy and also doesn't work when the vblank
* interrupt stops running, e.g. across system suspend resume. It is therefore
* highly recommended that drivers use the newer drm_vblank_off() and
* drm_vblank_on() instead. drm_vblank_pre_modeset() only works correctly when
* using "cooked" software vblank frame counters and not relying on any hardware
* counters.
*
* Drivers must call drm_vblank_post_modeset() when re-enabling the same crtc
* again.
*/
void drm_vblank_pre_modeset(struct drm_device *dev, unsigned int pipe)
{ {
struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; struct drm_vblank_crtc *vblank = &dev->vblank[pipe];
...@@ -1492,17 +1470,9 @@ void drm_vblank_pre_modeset(struct drm_device *dev, unsigned int pipe) ...@@ -1492,17 +1470,9 @@ void drm_vblank_pre_modeset(struct drm_device *dev, unsigned int pipe)
vblank->inmodeset |= 0x2; vblank->inmodeset |= 0x2;
} }
} }
EXPORT_SYMBOL(drm_vblank_pre_modeset);
/** static void drm_legacy_vblank_post_modeset(struct drm_device *dev,
* drm_vblank_post_modeset - undo drm_vblank_pre_modeset changes unsigned int pipe)
* @dev: DRM device
* @pipe: CRTC index
*
* This function again drops the temporary vblank reference acquired in
* drm_vblank_pre_modeset.
*/
void drm_vblank_post_modeset(struct drm_device *dev, unsigned int pipe)
{ {
struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; struct drm_vblank_crtc *vblank = &dev->vblank[pipe];
unsigned long irqflags; unsigned long irqflags;
...@@ -1525,7 +1495,6 @@ void drm_vblank_post_modeset(struct drm_device *dev, unsigned int pipe) ...@@ -1525,7 +1495,6 @@ void drm_vblank_post_modeset(struct drm_device *dev, unsigned int pipe)
vblank->inmodeset = 0; vblank->inmodeset = 0;
} }
} }
EXPORT_SYMBOL(drm_vblank_post_modeset);
/* /*
* drm_modeset_ctl - handle vblank event counter changes across mode switch * drm_modeset_ctl - handle vblank event counter changes across mode switch
...@@ -1558,10 +1527,10 @@ int drm_modeset_ctl(struct drm_device *dev, void *data, ...@@ -1558,10 +1527,10 @@ int drm_modeset_ctl(struct drm_device *dev, void *data,
switch (modeset->cmd) { switch (modeset->cmd) {
case _DRM_PRE_MODESET: case _DRM_PRE_MODESET:
drm_vblank_pre_modeset(dev, pipe); drm_legacy_vblank_pre_modeset(dev, pipe);
break; break;
case _DRM_POST_MODESET: case _DRM_POST_MODESET:
drm_vblank_post_modeset(dev, pipe); drm_legacy_vblank_post_modeset(dev, pipe);
break; break;
default: default:
return -EINVAL; return -EINVAL;
......
...@@ -727,10 +727,6 @@ void drm_clflush_virt_range(void *addr, unsigned long length); ...@@ -727,10 +727,6 @@ void drm_clflush_virt_range(void *addr, unsigned long length);
* DMA quiscent + idle. DMA quiescent usually requires the hardware lock. * DMA quiscent + idle. DMA quiescent usually requires the hardware lock.
*/ */
/* Modesetting support */
extern void drm_vblank_pre_modeset(struct drm_device *dev, unsigned int pipe);
extern void drm_vblank_post_modeset(struct drm_device *dev, unsigned int pipe);
/* Debugfs support */ /* Debugfs support */
#if defined(CONFIG_DEBUG_FS) #if defined(CONFIG_DEBUG_FS)
extern int drm_debugfs_create_files(const struct drm_info_list *files, extern int drm_debugfs_create_files(const struct drm_info_list *files,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment