diff --git a/drivers/gpu/drm/vc4/vc4_firmware_kms.c b/drivers/gpu/drm/vc4/vc4_firmware_kms.c index 7edb38953a6a..967a0bf5886b 100644 --- a/drivers/gpu/drm/vc4/vc4_firmware_kms.c +++ b/drivers/gpu/drm/vc4/vc4_firmware_kms.c @@ -43,6 +43,7 @@ struct vc4_crtc { struct drm_pending_vblank_event *event; u32 overscan[4]; + bool vblank_enabled; }; static inline struct vc4_crtc *to_vc4_crtc(struct drm_crtc *crtc) @@ -420,7 +421,8 @@ static irqreturn_t vc4_crtc_irq_handler(int irq, void *data) if (stat & SMICS_INTERRUPTS) { writel(0, vc4_crtc->regs + SMICS); - drm_crtc_handle_vblank(&vc4_crtc->base); + if (vc4_crtc->vblank_enabled) + drm_crtc_handle_vblank(&vc4_crtc->base); vc4_crtc_handle_page_flip(vc4_crtc); ret = IRQ_HANDLED; } @@ -443,9 +445,9 @@ static int vc4_page_flip(struct drm_crtc *crtc, static int vc4_fkms_enable_vblank(struct drm_crtc *crtc) { - /* XXX: Need a way to enable/disable the interrupt, to avoid - * DRM warnings at boot time. - */ + struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc); + + vc4_crtc->vblank_enabled = true; return 0; }