• Ville Syrjälä's avatar
    drm/i915: Generalize .set_signal_levels() · e722ab8b
    Ville Syrjälä authored
    Currently .set_signal_levels() is only used by encoders in DP mode.
    For most modern platforms there is no essential difference between
    DP and HDMI, and both codepaths just end up calling the same function
    under the hood. Let's get remove the need for that extra indirection
    by moving .set_signal_levels() into the encoder from intel_dp.
    Since we already plumb the crtc_state/etc. into .set_signal_levels()
    the code will do the right thing for both DP and HDMI.
    
    HSW/BDW/SKL are the only platforms that need a bit of care on
    account of having to preload the hardware buf_trans register
    with the full set of values. So we must still remember to call
    hsw_prepare_{dp,hdmi}_ddi_buffers() to do said preloading, and
    .set_signal_levels() will just end up selecting the correct entry
    for DP, and also setting up the iboost magic for both DP and HDMI.
    
    Note that previously on HSW/BDW/SKL we did write to DDI_BUF_CTL to
    select the correct entry until link training started, now that we
    call .set_signal_levels() already from hsw_ddi_pre_enable_dp() that
    is no longer the case. But it's all safe now that the
    intel_ddi_init_dp_buf_reg() call was hoisted up and it no longer
    sets up the DDI_BUF_CTL_ENABLE bit (that is still deferred until
    link training).
    
    v2: Rebase due to has_{iboost,buf_trans_select}()
        Add some notes about the DDI_BUF_CTL situation on HSW/BDW/SKL (Imre)
    Reviewed-by: default avatarImre Deak <imre.deak@intel.com>
    Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20211001130107.1746-4-ville.syrjala@linux.intel.com
    e722ab8b
intel_dp_link_training.c 27 KB