• Rob Clark's avatar
    drm/msm/dpu: fix "frame done" timeouts · 241b507c
    Rob Clark authored
    Previously, dpu_crtc_frame_event_work() would try to aquire all the
    modeset locks in order to check whether it can release bandwidth.  (If
    we only have cmd-mode display, bandwidth can be released at frame-done
    time.)
    
    The problem with this is that it is also responsible for signalling
    frame_done_comp, which dpu_crtc_commit_kickoff() waits on if there is
    already a frame pending.  This is called in the msm_atomic_commit_tail()
    path.. which means that for non-nonblock commits, at least some of the
    modeset locks are already held.
    
    Re-work this scheme to use a reference count to track our need to have
    clocks enabled.  It is incremented for each atomic commit, and
    decremented in the corresponding frame-done.  Additionally, any crtc
    used in video mode hold an extra reference while they are enabled.  The
    net effect is that we can determine in frame-done whether it is safe to
    drop bandwidth without needing to aquire any modeset locks.
    Signed-off-by: default avatarRob Clark <robdclark@chromium.org>
    Reviewed-by: default avatarSean Paul <sean@chromium.org>
    Signed-off-by: default avatarRob Clark <robdclark@chromium.org>
    241b507c
dpu_kms.c 27 KB