• Jeffrey Hugo's avatar
    drm/msm/dsi: Implement reset correctly · 78e31c42
    Jeffrey Hugo authored
    On msm8998, vblank timeouts are observed because the DSI controller is not
    reset properly, which ends up stalling the MDP.  This is because the reset
    logic is not correct per the hardware documentation.
    
    The documentation states that after asserting reset, software should wait
    some time (no indication of how long), or poll the status register until it
    returns 0 before deasserting reset.
    
    wmb() is insufficient for this purpose since it just ensures ordering, not
    timing between writes.  Since asserting and deasserting reset occurs on the
    same register, ordering is already guaranteed by the architecture, making
    the wmb extraneous.
    
    Since we would define a timeout for polling the status register to avoid a
    possible infinite loop, lets just use a static delay of 20 ms, since 16.666
    ms is the time available to process one frame at 60 fps.
    
    Fixes: a689554b ("drm/msm: Initial add DSI connector support")
    Cc: Hai Li <hali@codeaurora.org>
    Cc: Rob Clark <robdclark@gmail.com>
    Signed-off-by: default avatarJeffrey Hugo <jeffrey.l.hugo@gmail.com>
    Reviewed-by: default avatarSean Paul <sean@poorly.run>
    [seanpaul renamed RESET_DELAY to DSI_RESET_TOGGLE_DELAY_MS]
    Signed-off-by: default avatarSean Paul <seanpaul@chromium.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20191011133939.16551-1-jeffrey.l.hugo@gmail.com
    78e31c42
dsi_host.c 60.7 KB