drm/amd/display: Do not count I2C DEFERs with AUX DEFERs
authorWesley Chalmers <Wesley.Chalmers@amd.com>
Mon, 29 Mar 2021 17:36:35 +0000 (13:36 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 15 Jun 2021 21:25:41 +0000 (17:25 -0400)
[WHY]
DP 2.0 SCR specifies that
"A DPTX shall distinguish I2C_DEFER|AUX_ACK from AUX_DEFER. AUX retries
due to
I2C_DEFER are not counted as part of minimum 7 retires (sic) upon
AUX_DEFER’s"

Signed-off-by: Wesley Chalmers <Wesley.Chalmers@amd.com>
Reviewed-by: Jun Lei <Jun.Lei@amd.com>
Acked-by: Anson Jacob <Anson.Jacob@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/dce/dce_aux.c

index 49cb4e6..2863171 100644 (file)
@@ -667,12 +667,13 @@ bool dce_aux_transfer_with_retries(struct ddc_service *ddc,
                        case AUX_TRANSACTION_REPLY_AUX_DEFER:
                                /* polling_timeout_period is in us */
                                defer_time_in_ms += aux110->polling_timeout_period / 1000;
+                               ++aux_defer_retries;
                                /* fall through */
                        case AUX_TRANSACTION_REPLY_I2C_OVER_AUX_DEFER:
                                retry_on_defer = true;
                                fallthrough;
                        case AUX_TRANSACTION_REPLY_I2C_OVER_AUX_NACK:
-                               if (++aux_defer_retries >= AUX_MIN_DEFER_RETRIES
+                               if (aux_defer_retries >= AUX_MIN_DEFER_RETRIES
                                                && defer_time_in_ms >= AUX_MAX_DEFER_TIMEOUT_MS) {
                                        goto fail;
                                } else {