• Imre Deak's avatar
    drm/i915/dp: Skip the HW readout of DPCD on disabled encoders · 6e6f9663
    Imre Deak authored
    Reading out the DP encoders' DPCD during booting or resume is only
    required for enabled encoders: such encoders may be modesetted during
    the initial commit and the link training this involves depends on an
    initialized DPCD. For DDI encoders reading out the DPCD is skipped, do
    the same on pre-DDI platforms.
    
    Atm, the first DPCD readout without a sink connected - which is a likely
    scneario if the encoder is disabled - leaves intel_dp->num_common_rates
    at 0, which resulted in
    
    intel_dp_sync_state()->intel_dp_max_common_rate()
    
    in a
    
    intel_dp->common_rates[-1]
    
    access. This by definition results in an undefined behaviour, though to
    my best knowledge in all HW/compiler configurations it actually results
    in accessing the array item type value preceding the array. In this
    case the preceding value happens to be intel_dp->num_common_rates,
    which is 0, so this issue - by luck - didn't cause a user visible
    problem.
    
    Nevertheless it's still an undefined behaviour and in CONFIG_UBSAN
    builds leads to a kernel BUG() (which revealed this problem for us),
    hence CC:stable.
    
    A related problem in case the encoder is enabled but the sink is not
    connected or the DPCD readout fails is fixed by the next patch.
    
    v2: Amend the commit message describing the root cause of the
        CONFIG_UBSAN BUG().
    
    Fixes: a532cde3 ("drm/i915/tc: Fix TypeC port init/resume time sanitization")
    References: https://gitlab.freedesktop.org/drm/intel/-/issues/4297Reported-and-tested-by: default avatarMat Jonczyk <mat.jonczyk@o2.pl>
    Cc: Mat Jonczyk <mat.jonczyk@o2.pl>
    Cc: José Roberto de Souza <jose.souza@intel.com>
    Cc: Jani Nikula <jani.nikula@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/20211018094154.1407705-2-imre.deak@intel.com
    (cherry picked from commit 4ec5ffc3)
    Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
    6e6f9663
intel_dp.c 155 KB