return true;
}
-static bool vop_is_cfg_done_complete(struct vop *vop)
-{
- return VOP_CTRL_GET(vop, cfg_done) ? false : true;
-}
-
static bool vop_fs_irq_is_active(struct vop *vop)
{
return VOP_INTR_GET_TYPE(vop, status, FS_INTR);
*/
vop_wait_for_irq_handler(vop);
+ spin_lock_irq(&crtc->dev->event_lock);
+ if (crtc->state->event) {
+ WARN_ON(drm_crtc_vblank_get(crtc) != 0);
+ WARN_ON(vop->event);
+
+ vop->event = crtc->state->event;
+ crtc->state->event = NULL;
+ }
+ spin_unlock_irq(&crtc->dev->event_lock);
+
for_each_plane_in_state(old_state, plane, old_plane_state, i) {
if (!old_plane_state->fb)
continue;
static void vop_crtc_atomic_begin(struct drm_crtc *crtc,
struct drm_crtc_state *old_crtc_state)
{
- struct vop *vop = to_vop(crtc);
-
- if (crtc->state->event) {
- WARN_ON(drm_crtc_vblank_get(crtc) != 0);
-
- vop->event = crtc->state->event;
- crtc->state->event = NULL;
- }
}
static const struct drm_crtc_helper_funcs vop_crtc_helper_funcs = {
struct drm_crtc *crtc = &vop->crtc;
unsigned long flags;
- if (!vop_is_cfg_done_complete(vop))
- return;
-
if (vop->event) {
spin_lock_irqsave(&drm->event_lock, flags);