• Lee Shawn C's avatar
    drm/i915/mst: filter out the display mode exceed sink's capability · e398d7c1
    Lee Shawn C authored
    So far, max dot clock rate for MST mode rely on physcial
    bandwidth limitation. It would caused compatibility issue
    if source display resolution exceed MST hub output ability.
    
    For example, source DUT had DP 1.2 output capability.
    And MST docking just support HDMI 1.4 spec. When a HDMI 2.0
    monitor connected. Source would retrieve EDID from external
    and get max resolution 4k@60fps. DP 1.2 can support 4K@60fps
    because it did not surpass DP physical bandwidth limitation.
    Do modeset to 4k@60fps, source output display data but MST
    docking can't output HDMI properly due to this resolution
    already over HDMI 1.4 spec.
    
    Refer to commit <fcf46380> ("drm/dp_mst: Use full_pbn
    instead of available_pbn for bandwidth checks").
    Source driver should refer to full_pbn to evaluate sink
    output capability. And filter out the resolution surpass
    sink output limitation.
    
    Changes since v1:
    * Using mgr->base.lock to protect full_pbn.
    Changes since v2:
    * Add ctx lock.
    Changes since v3:
    * s/intel_dp_mst_mode_clock_exceed_pbn_bandwidth/
      intel_dp_mst_mode_clock_exceeds_pbn_bw/
    * Use the new drm_connector_helper_funcs.mode_valid_ctx to properly pipe
      down the drm_modeset_acquire_ctx that the probe helpers are using, so
      we can safely grab &mgr->base.lock without deadlocking
    Changes since v4:
    * Move drm_dp_calc_pbn_mode(mode->clock, bpp, false) > port->full_pbn
      check
    * Fix the bpp we use in drm_dp_calc_pbn_mode()
    * Drop leftover (!mgr) check
    * Don't check for if full_pbn is unset. To be clear - it _can_ be unset,
      but if it is then it's certainly a bug in DRM or a non-compliant sink
      as full_pbn should always be populated by the time we call
      ->mode_valid_ctx.
      We should workaround non-compliant sinks with full_pbn=0, but that
      should happen in the DP MST helpers so we can estimate the full_pbn
      value as best we can.
    Tested-by: default avatarImre Deak <imre.deak@intel.com>
    Reviewed-by: default avatarImre Deak <imre.deak@intel.com>
    Cc: Manasi Navare <manasi.d.navare@intel.com>
    Cc: Jani Nikula <jani.nikula@linux.intel.com>
    Cc: Ville Syrjala <ville.syrjala@linux.intel.com>
    Cc: Cooper Chiou <cooper.chiou@intel.com>
    Co-developed-by: default avatarLyude Paul <lyude@redhat.com>
    Signed-off-by: default avatarLee Shawn C <shawn.c.lee@intel.com>
    Signed-off-by: default avatarLyude Paul <lyude@redhat.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20200713170746.254388-3-lyude@redhat.com
    e398d7c1
intel_dp_mst.c 28.7 KB