• Kuogee Hsieh's avatar
    drm/msm/dp: force link training for display resolution change · a6e2af64
    Kuogee Hsieh authored
    Display resolution change is implemented through drm modeset. Older
    modeset (resolution) has to be disabled first before newer modeset
    (resolution) can be enabled. Display disable will turn off both
    pixel clock and main link clock so that main link have to be
    re-trained during display enable to have new video stream flow
    again. At current implementation, display enable function manually
    kicks up irq_hpd_handle which will read panel link status and start
    link training if link status is not in sync state.
    
    However, there is rare case that a particular panel links status keep
    staying in sync for some period of time after main link had been shut
    down previously at display disabled. In this case, main link retraining
    will not be executed by irq_hdp_handle(). Hence video stream of newer
    display resolution will fail to be transmitted to panel due to main
    link is not in sync between host and panel.
    
    This patch will bypass irq_hpd_handle() in favor of directly call
    dp_ctrl_on_stream() to always perform link training in regardless of
    main link status. So that no unexpected exception resolution change
    failure cases will happen. Also this implementation are more efficient
    than manual kicking off irq_hpd_handle function.
    
    Changes in v2:
    -- set force_link_train flag on DP only (is_edp == false)
    
    Changes in v3:
    -- revise commit  text
    -- add Fixes tag
    
    Changes in v4:
    -- revise commit  text
    
    Changes in v5:
    -- fix spelling at commit text
    
    Changes in v6:
    -- split dp_ctrl_on_stream() for phy test case
    -- revise commit text for modeset
    
    Changes in v7:
    -- drop 0 assignment at local variable (ret = 0)
    
    Changes in v8:
    -- add patch to remove pixel_rate from dp_ctrl
    
    Changes in v9:
    -- forward declare dp_ctrl_on_stream_phy_test_report()
    
    Fixes: 62671d2e ("drm/msm/dp: fixes wrong connection state caused by failure of link train")
    Signed-off-by: default avatarKuogee Hsieh <quic_khsieh@quicinc.com>
    Reviewed-by: default avatarStephen Boyd <swboyd@chromium.org>
    Patchwork: https://patchwork.freedesktop.org/patch/489895/
    Link: https://lore.kernel.org/r/1655411200-7255-1-git-send-email-quic_khsieh@quicinc.comSigned-off-by: default avatarRob Clark <robdclark@chromium.org>
    a6e2af64
dp_ctrl.c 54.3 KB