mirror of
https://gitlab.freedesktop.org/mesa/drm.git
synced 2025-12-20 19:50:12 +01:00
vblank-rework rework cleanups.
Remove some dead/obsolete code and make drm_update_vblank_count() static.
This commit is contained in:
parent
014935b680
commit
205aff6a5c
2 changed files with 4 additions and 30 deletions
|
|
@ -848,9 +848,6 @@ struct drm_device {
|
||||||
atomic_t *vblank_refcount; /* number of users of vblank interrupts per crtc */
|
atomic_t *vblank_refcount; /* number of users of vblank interrupts per crtc */
|
||||||
u32 *last_vblank; /* protected by dev->vbl_lock, used */
|
u32 *last_vblank; /* protected by dev->vbl_lock, used */
|
||||||
/* for wraparound handling */
|
/* for wraparound handling */
|
||||||
int *vblank_enabled; /* so we don't call enable more than
|
|
||||||
once per disable */
|
|
||||||
u32 *vblank_premodeset; /* for compensation of spurious wraparounds */
|
|
||||||
int *vblank_inmodeset; /* Display driver is setting mode */
|
int *vblank_inmodeset; /* Display driver is setting mode */
|
||||||
struct timer_list vblank_disable_timer;
|
struct timer_list vblank_disable_timer;
|
||||||
|
|
||||||
|
|
@ -1153,7 +1150,6 @@ extern int drm_wait_vblank(struct drm_device *dev, void *data, struct drm_file *
|
||||||
extern int drm_vblank_wait(struct drm_device * dev, unsigned int *vbl_seq);
|
extern int drm_vblank_wait(struct drm_device * dev, unsigned int *vbl_seq);
|
||||||
extern void drm_locked_tasklet(struct drm_device *dev, void(*func)(struct drm_device*));
|
extern void drm_locked_tasklet(struct drm_device *dev, void(*func)(struct drm_device*));
|
||||||
extern u32 drm_vblank_count(struct drm_device *dev, int crtc);
|
extern u32 drm_vblank_count(struct drm_device *dev, int crtc);
|
||||||
extern void drm_update_vblank_count(struct drm_device *dev, int crtc);
|
|
||||||
extern void drm_handle_vblank(struct drm_device *dev, int crtc);
|
extern void drm_handle_vblank(struct drm_device *dev, int crtc);
|
||||||
extern int drm_vblank_get(struct drm_device *dev, int crtc);
|
extern int drm_vblank_get(struct drm_device *dev, int crtc);
|
||||||
extern void drm_vblank_put(struct drm_device *dev, int crtc);
|
extern void drm_vblank_put(struct drm_device *dev, int crtc);
|
||||||
|
|
|
||||||
|
|
@ -82,13 +82,11 @@ static void vblank_disable_fn(unsigned long arg)
|
||||||
|
|
||||||
for (i = 0; i < dev->num_crtcs; i++) {
|
for (i = 0; i < dev->num_crtcs; i++) {
|
||||||
spin_lock_irqsave(&dev->vbl_lock, irqflags);
|
spin_lock_irqsave(&dev->vbl_lock, irqflags);
|
||||||
if (atomic_read(&dev->vblank_refcount[i]) == 0 &&
|
if (atomic_read(&dev->vblank_refcount[i]) == 0) {
|
||||||
dev->vblank_enabled[i]) {
|
|
||||||
DRM_DEBUG("disabling vblank on crtc %d\n", i);
|
DRM_DEBUG("disabling vblank on crtc %d\n", i);
|
||||||
dev->last_vblank[i] =
|
dev->last_vblank[i] =
|
||||||
dev->driver->get_vblank_counter(dev, i);
|
dev->driver->get_vblank_counter(dev, i);
|
||||||
dev->driver->disable_vblank(dev, i);
|
dev->driver->disable_vblank(dev, i);
|
||||||
dev->vblank_enabled[i] = 0;
|
|
||||||
}
|
}
|
||||||
spin_unlock_irqrestore(&dev->vbl_lock, irqflags);
|
spin_unlock_irqrestore(&dev->vbl_lock, irqflags);
|
||||||
}
|
}
|
||||||
|
|
@ -112,12 +110,8 @@ static void drm_vblank_cleanup(struct drm_device *dev)
|
||||||
dev->num_crtcs, DRM_MEM_DRIVER);
|
dev->num_crtcs, DRM_MEM_DRIVER);
|
||||||
drm_free(dev->vblank_refcount, sizeof(*dev->vblank_refcount) *
|
drm_free(dev->vblank_refcount, sizeof(*dev->vblank_refcount) *
|
||||||
dev->num_crtcs, DRM_MEM_DRIVER);
|
dev->num_crtcs, DRM_MEM_DRIVER);
|
||||||
drm_free(dev->vblank_enabled, sizeof(*dev->vblank_enabled) *
|
|
||||||
dev->num_crtcs, DRM_MEM_DRIVER);
|
|
||||||
drm_free(dev->last_vblank, sizeof(*dev->last_vblank) * dev->num_crtcs,
|
drm_free(dev->last_vblank, sizeof(*dev->last_vblank) * dev->num_crtcs,
|
||||||
DRM_MEM_DRIVER);
|
DRM_MEM_DRIVER);
|
||||||
drm_free(dev->vblank_premodeset, sizeof(*dev->vblank_premodeset) *
|
|
||||||
dev->num_crtcs, DRM_MEM_DRIVER);
|
|
||||||
drm_free(dev->vblank_inmodeset, sizeof(*dev->vblank_inmodeset) *
|
drm_free(dev->vblank_inmodeset, sizeof(*dev->vblank_inmodeset) *
|
||||||
dev->num_crtcs, DRM_MEM_DRIVER);
|
dev->num_crtcs, DRM_MEM_DRIVER);
|
||||||
|
|
||||||
|
|
@ -154,20 +148,10 @@ int drm_vblank_init(struct drm_device *dev, int num_crtcs)
|
||||||
if (!dev->vblank_refcount)
|
if (!dev->vblank_refcount)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
dev->vblank_enabled = drm_calloc(num_crtcs, sizeof(int),
|
|
||||||
DRM_MEM_DRIVER);
|
|
||||||
if (!dev->vblank_enabled)
|
|
||||||
goto err;
|
|
||||||
|
|
||||||
dev->last_vblank = drm_calloc(num_crtcs, sizeof(u32), DRM_MEM_DRIVER);
|
dev->last_vblank = drm_calloc(num_crtcs, sizeof(u32), DRM_MEM_DRIVER);
|
||||||
if (!dev->last_vblank)
|
if (!dev->last_vblank)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
dev->vblank_premodeset = drm_calloc(num_crtcs, sizeof(u32),
|
|
||||||
DRM_MEM_DRIVER);
|
|
||||||
if (!dev->vblank_premodeset)
|
|
||||||
goto err;
|
|
||||||
|
|
||||||
dev->vblank_inmodeset = drm_calloc(num_crtcs, sizeof(int),
|
dev->vblank_inmodeset = drm_calloc(num_crtcs, sizeof(int),
|
||||||
DRM_MEM_DRIVER);
|
DRM_MEM_DRIVER);
|
||||||
if (!dev->vblank_inmodeset)
|
if (!dev->vblank_inmodeset)
|
||||||
|
|
@ -359,7 +343,7 @@ EXPORT_SYMBOL(drm_vblank_count);
|
||||||
* Note: caller must hold dev->vbl_lock since this reads & writes
|
* Note: caller must hold dev->vbl_lock since this reads & writes
|
||||||
* device vblank fields.
|
* device vblank fields.
|
||||||
*/
|
*/
|
||||||
void drm_update_vblank_count(struct drm_device *dev, int crtc)
|
static void drm_update_vblank_count(struct drm_device *dev, int crtc)
|
||||||
{
|
{
|
||||||
u32 cur_vblank, diff;
|
u32 cur_vblank, diff;
|
||||||
|
|
||||||
|
|
@ -385,7 +369,6 @@ void drm_update_vblank_count(struct drm_device *dev, int crtc)
|
||||||
} else {
|
} else {
|
||||||
diff = cur_vblank - dev->last_vblank[crtc];
|
diff = cur_vblank - dev->last_vblank[crtc];
|
||||||
}
|
}
|
||||||
dev->last_vblank[crtc] = cur_vblank;
|
|
||||||
|
|
||||||
DRM_DEBUG("enabling vblank interrupts on crtc %d, missed %d\n",
|
DRM_DEBUG("enabling vblank interrupts on crtc %d, missed %d\n",
|
||||||
crtc, diff);
|
crtc, diff);
|
||||||
|
|
@ -411,16 +394,13 @@ int drm_vblank_get(struct drm_device *dev, int crtc)
|
||||||
|
|
||||||
spin_lock_irqsave(&dev->vbl_lock, irqflags);
|
spin_lock_irqsave(&dev->vbl_lock, irqflags);
|
||||||
/* Going from 0->1 means we have to enable interrupts again */
|
/* Going from 0->1 means we have to enable interrupts again */
|
||||||
if (atomic_add_return(1, &dev->vblank_refcount[crtc]) == 1 &&
|
if (atomic_add_return(1, &dev->vblank_refcount[crtc]) == 1) {
|
||||||
!dev->vblank_enabled[crtc]) {
|
|
||||||
ret = dev->driver->enable_vblank(dev, crtc);
|
ret = dev->driver->enable_vblank(dev, crtc);
|
||||||
if (ret)
|
if (ret)
|
||||||
atomic_dec(&dev->vblank_refcount[crtc]);
|
atomic_dec(&dev->vblank_refcount[crtc]);
|
||||||
else {
|
else
|
||||||
dev->vblank_enabled[crtc] = 1;
|
|
||||||
drm_update_vblank_count(dev, crtc);
|
drm_update_vblank_count(dev, crtc);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
spin_unlock_irqrestore(&dev->vbl_lock, irqflags);
|
spin_unlock_irqrestore(&dev->vbl_lock, irqflags);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
@ -481,9 +461,7 @@ int drm_modeset_ctl(struct drm_device *dev, void *data,
|
||||||
switch (modeset->cmd) {
|
switch (modeset->cmd) {
|
||||||
case _DRM_PRE_MODESET:
|
case _DRM_PRE_MODESET:
|
||||||
if (!dev->vblank_inmodeset[crtc]) {
|
if (!dev->vblank_inmodeset[crtc]) {
|
||||||
spin_lock_irqsave(&dev->vbl_lock, irqflags);
|
|
||||||
dev->vblank_inmodeset[crtc] = 1;
|
dev->vblank_inmodeset[crtc] = 1;
|
||||||
spin_unlock_irqrestore(&dev->vbl_lock, irqflags);
|
|
||||||
drm_vblank_get(dev, crtc);
|
drm_vblank_get(dev, crtc);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue