• Todd Previte's avatar
    drm: Fix for DP CTS test 4.2.2.5 - I2C DEFER handling · 396aa445
    Todd Previte authored
    For test 4.2.2.5 to pass per the Link CTS Core 1.2 rev1.1 spec, the source
    device must attempt at least 7 times to read the EDID when it receives an
    I2C defer. The normal DRM code makes only 7 retries, regardless of whether
    or not the response is a native defer or an I2C defer. Test 4.2.2.5 fails
    since there are native defers interspersed with the I2C defers which
    results in less than 7 EDID read attempts.
    
    The solution is to add the numer of defers to the retry counter when an I2C
    DEFER is returned such that another read attempt will be made. This situation
    should normally only occur in compliance testing, however, as a worse case
    real-world scenario, it would result in 13 attempts ( 6 native defers, 7 I2C
    defers) for a single transaction to complete. The net result is a slightly
    slower response to an EDID read that shouldn't significantly impact overall
    performance.
    
    V2:
    - Added a check on the number of I2C Defers to limit the number
      of times that the retries variable will be decremented. This
      is to address review feedback regarding possible infinite loops
      from misbehaving sink devices.
    V3:
    - Fixed the limit value to 7 instead of 8 to get the correct retry
      count.
    - Combined the increment of the defer count into the if-statement
    V4:
    - Removed i915 tag from subject as the patch is not i915-specific
    V5:
    - Updated the for-loop to add the number of i2c defers to the retry
      counter such that the correct number of retry attempts will be
      made
    Signed-off-by: default avatarTodd Previte <tprevite@gmail.com>
    Cc: dri-devel@lists.freedesktop.org
    Reviewed-by: default avatarPaulo Zanoni <paulo.r.zanoni@intel.com>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    396aa445
drm_dp_helper.c 18.1 KB