| From cf1ff6281a9edbe71e1f593bb277f83b0ed02cf7 Mon Sep 17 00:00:00 2001 |
| From: Eric Anholt <eric@anholt.net> |
| Date: Mon, 5 Feb 2018 18:01:02 +0000 |
| Subject: [PATCH] drm/vc4: Fix warning about vblank interrupts before |
| DRM core is ready. |
| |
| The SMICS interrupt fires continuously, but since it's 1/100 the rate |
| of the USB interrupts, we don't really need a way to turn it off. We |
| do need to make sure that we don't tell DRM about it until DRM has |
| asked for the interrupt at least once, because otherwise it will throw |
| a warning at boot time. |
| |
| Signed-off-by: Eric Anholt <eric@anholt.net> |
| --- |
| drivers/gpu/drm/vc4/vc4_firmware_kms.c | 10 ++++++---- |
| 1 file changed, 6 insertions(+), 4 deletions(-) |
| |
| --- 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( |
| |
| 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 |
| |
| 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; |
| } |