Skip to content

Commit

Permalink
drm/rockchip: Enable vblank without event
Browse files Browse the repository at this point in the history
vblank should be enabled regardless of whether an event
is expected back. This is especially important for a cursor
plane.

Reviewed-by: Yakir Yang <[email protected]>
Tested-by: Yakir Yang <[email protected]>
Signed-off-by: Sean Paul <[email protected]>
  • Loading branch information
atseanpaul committed Aug 23, 2016
1 parent d761b2d commit 5b68040
Showing 1 changed file with 10 additions and 5 deletions.
15 changes: 10 additions & 5 deletions drivers/gpu/drm/rockchip/rockchip_drm_vop.c
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@ struct vop {
struct device *dev;
struct drm_device *drm_dev;
bool is_enabled;
bool vblank_active;

/* mutex vsync_ work */
struct mutex vsync_mutex;
Expand Down Expand Up @@ -1090,10 +1091,11 @@ static void vop_crtc_atomic_begin(struct drm_crtc *crtc,
struct vop *vop = to_vop(crtc);

spin_lock_irq(&crtc->dev->event_lock);
if (crtc->state->event) {
WARN_ON(drm_crtc_vblank_get(crtc) != 0);
WARN_ON(vop->event);
vop->vblank_active = true;
WARN_ON(drm_crtc_vblank_get(crtc) != 0);
WARN_ON(vop->event);

if (crtc->state->event) {
vop->event = crtc->state->event;
crtc->state->event = NULL;
}
Expand Down Expand Up @@ -1180,12 +1182,14 @@ static void vop_handle_vblank(struct vop *vop)

spin_lock_irqsave(&drm->event_lock, flags);
if (vop->event) {

drm_crtc_send_vblank_event(crtc, vop->event);
drm_crtc_vblank_put(crtc);
vop->event = NULL;

}
if (vop->vblank_active) {
vop->vblank_active = false;
drm_crtc_vblank_put(crtc);
}
spin_unlock_irqrestore(&drm->event_lock, flags);

if (!completion_done(&vop->wait_update_complete))
Expand Down Expand Up @@ -1455,6 +1459,7 @@ static int vop_initial(struct vop *vop)
clk_disable(vop->aclk);

vop->is_enabled = false;
vop->vblank_active = false;

return 0;

Expand Down

0 comments on commit 5b68040

Please sign in to comment.