• Imre Deak's avatar
    drm/i915/dp: Ensure sink rate values are always valid · 6c34bd45
    Imre Deak authored
    Atm, there are no sink rate values set for DP (vs. eDP) sinks until the
    DPCD capabilities are successfully read from the sink. During this time
    intel_dp->num_common_rates is 0 which can lead to a
    
    intel_dp->common_rates[-1]    (*)
    
    access, which is an undefined behaviour, in the following cases:
    
    - In intel_dp_sync_state(), if the encoder is enabled without a sink
      connected to the encoder's connector (BIOS enabled a monitor, but the
      user unplugged the monitor until the driver loaded).
    - In intel_dp_sync_state() if the encoder is enabled with a sink
      connected, but for some reason the DPCD read has failed.
    - In intel_dp_compute_link_config() if modesetting a connector without
      a sink connected on it.
    - In intel_dp_compute_link_config() if modesetting a connector with a
      a sink connected on it, but before probing the connector first.
    
    To avoid the (*) access in all the above cases, make sure that the sink
    rate table - and hence the common rate table - is always valid, by
    setting a default minimum sink rate when registering the connector
    before anything could use it.
    
    I also considered setting all the DP link rates by default, so that
    modesetting with higher resolution modes also succeeds in the last two
    cases above. However in case a sink is not connected that would stop
    working after the first modeset, due to the LT fallback logic. So this
    would need more work, beyond the scope of this fix.
    
    As I mentioned in the previous patch, I don't think the issue this patch
    fixes is user visible, however it is an undefined behaviour by
    definition and triggers a BUG() in CONFIG_UBSAN builds, hence CC:stable.
    
    v2: Clear the default sink rates, before initializing these for eDP.
    
    Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/4297
    References: https://gitlab.freedesktop.org/drm/intel/-/issues/4298Suggested-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
    Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarImre Deak <imre.deak@intel.com>
    Reviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
    Acked-by: default avatarJani Nikula <jani.nikula@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20211018143417.1452632-1-imre.deak@intel.com
    (cherry picked from commit 3f61ef97)
    Signed-off-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
    6c34bd45
intel_dp.c 147 KB