From: Anthony Koo <anthony....@amd.com>

[Why]
When aux engine acquire fails, we missed populating the operation_result
that describes the failure reason.

[How]
Set operation_result to new type:
AUX_CHANNEL_OPERATION_FAILED_ENGINE_ACQUIRE
in the case aux engine acquire has failed.

Signed-off-by: Anthony Koo <anthony....@amd.com>
Reviewed-by: Aric Cyr <aric....@amd.com>
Acked-by: Leo Li <sunpeng...@amd.com>
---
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c | 1 +
 drivers/gpu/drm/amd/display/dc/dc_ddc_types.h               | 3 ++-
 drivers/gpu/drm/amd/display/dc/dce/dce_aux.c                | 5 ++++-
 3 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c 
b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
index 3af2b429ff1b..779d0b60cac9 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
@@ -113,6 +113,7 @@ static ssize_t dm_dp_aux_transfer(struct drm_dp_aux *aux,
                        result = -EIO;
                        break;
                case AUX_CHANNEL_OPERATION_FAILED_INVALID_REPLY:
+               case AUX_CHANNEL_OPERATION_FAILED_ENGINE_ACQUIRE:
                        result = -EBUSY;
                        break;
                case AUX_CHANNEL_OPERATION_FAILED_TIMEOUT:
diff --git a/drivers/gpu/drm/amd/display/dc/dc_ddc_types.h 
b/drivers/gpu/drm/amd/display/dc/dc_ddc_types.h
index 4ef97f65e55d..4f8f576d5fcf 100644
--- a/drivers/gpu/drm/amd/display/dc/dc_ddc_types.h
+++ b/drivers/gpu/drm/amd/display/dc/dc_ddc_types.h
@@ -49,7 +49,8 @@ enum aux_channel_operation_result {
        AUX_CHANNEL_OPERATION_FAILED_REASON_UNKNOWN,
        AUX_CHANNEL_OPERATION_FAILED_INVALID_REPLY,
        AUX_CHANNEL_OPERATION_FAILED_TIMEOUT,
-       AUX_CHANNEL_OPERATION_FAILED_HPD_DISCON
+       AUX_CHANNEL_OPERATION_FAILED_HPD_DISCON,
+       AUX_CHANNEL_OPERATION_FAILED_ENGINE_ACQUIRE
 };
 
 
diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_aux.c 
b/drivers/gpu/drm/amd/display/dc/dce/dce_aux.c
index 976bd4987a28..22abb345ddc1 100644
--- a/drivers/gpu/drm/amd/display/dc/dce/dce_aux.c
+++ b/drivers/gpu/drm/amd/display/dc/dce/dce_aux.c
@@ -538,8 +538,10 @@ int dce_aux_transfer_raw(struct ddc_service *ddc,
        memset(&aux_rep, 0, sizeof(aux_rep));
 
        aux_engine = ddc->ctx->dc->res_pool->engines[ddc_pin->pin_data->en];
-       if (!acquire(aux_engine, ddc_pin))
+       if (!acquire(aux_engine, ddc_pin)) {
+               *operation_result = AUX_CHANNEL_OPERATION_FAILED_ENGINE_ACQUIRE;
                return -1;
+       }
 
        if (payload->i2c_over_aux)
                aux_req.type = AUX_TRANSACTION_TYPE_I2C;
@@ -663,6 +665,7 @@ bool dce_aux_transfer_with_retries(struct ddc_service *ddc,
                        break;
 
                case AUX_CHANNEL_OPERATION_FAILED_HPD_DISCON:
+               case AUX_CHANNEL_OPERATION_FAILED_ENGINE_ACQUIRE:
                case AUX_CHANNEL_OPERATION_FAILED_REASON_UNKNOWN:
                default:
                        goto fail;
-- 
2.23.0

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to