• Stephan Gerhold's avatar
    drm/mcde: Handle pending vblank while disabling display · 97de8636
    Stephan Gerhold authored
    Disabling the display using MCDE currently results in a warning
    together with a delay caused by some timeouts:
    
        mcde a0350000.mcde: MCDE display is disabled
        ------------[ cut here ]------------
        WARNING: CPU: 0 PID: 20 at drivers/gpu/drm/drm_atomic_helper.c:2258 drm_atomic_helper_commit_hw_done+0xe0/0xe4
        Hardware name: ST-Ericsson Ux5x0 platform (Device Tree Support)
        Workqueue: events drm_mode_rmfb_work_fn
        [<c010f468>] (unwind_backtrace) from [<c010b54c>] (show_stack+0x10/0x14)
        [<c010b54c>] (show_stack) from [<c079dd90>] (dump_stack+0x84/0x98)
        [<c079dd90>] (dump_stack) from [<c011d1b0>] (__warn+0xb8/0xd4)
        [<c011d1b0>] (__warn) from [<c011d230>] (warn_slowpath_fmt+0x64/0xc4)
        [<c011d230>] (warn_slowpath_fmt) from [<c0413048>] (drm_atomic_helper_commit_hw_done+0xe0/0xe4)
        [<c0413048>] (drm_atomic_helper_commit_hw_done) from [<c04159cc>] (drm_atomic_helper_commit_tail_rpm+0x44/0x6c)
        [<c04159cc>] (drm_atomic_helper_commit_tail_rpm) from [<c0415f5c>] (commit_tail+0x50/0x10c)
        [<c0415f5c>] (commit_tail) from [<c04160dc>] (drm_atomic_helper_commit+0xbc/0x128)
        [<c04160dc>] (drm_atomic_helper_commit) from [<c0430790>] (drm_framebuffer_remove+0x390/0x428)
        [<c0430790>] (drm_framebuffer_remove) from [<c0430860>] (drm_mode_rmfb_work_fn+0x38/0x48)
        [<c0430860>] (drm_mode_rmfb_work_fn) from [<c01368a8>] (process_one_work+0x1f0/0x43c)
        [<c01368a8>] (process_one_work) from [<c0136d48>] (worker_thread+0x254/0x55c)
        [<c0136d48>] (worker_thread) from [<c013c014>] (kthread+0x124/0x150)
        [<c013c014>] (kthread) from [<c01010e8>] (ret_from_fork+0x14/0x2c)
        Exception stack(0xeb14dfb0 to 0xeb14dff8)
        dfa0:                                     00000000 00000000 00000000 00000000
        dfc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
        dfe0: 00000000 00000000 00000000 00000000 00000013 00000000
        ---[ end trace 314909bcd4c7d50c ]---
        [drm:drm_atomic_helper_wait_for_dependencies] *ERROR* [CRTC:32:crtc-0] flip_done timed out
        [drm:drm_atomic_helper_wait_for_dependencies] *ERROR* [CONNECTOR:34:DSI-1] flip_done timed out
        [drm:drm_atomic_helper_wait_for_dependencies] *ERROR* [PLANE:31:plane-0] flip_done timed out
    
    The reason for this is that there is a vblank event pending, but we
    never handle it after disabling the vblank interrupts.
    
    Check if there is an vblank event pending when disabling the display,
    and clear it by sending a fake vblank event in that case.
    Signed-off-by: default avatarStephan Gerhold <stephan@gerhold.net>
    Tested-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    Reviewed-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20191106165835.2863-8-stephan@gerhold.net
    97de8636
mcde_display.c 28.7 KB