drm/amd/display: Proper return of result when aux engine acquire fails

[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.Koo@amd.com>
Reviewed-by: Aric Cyr <Aric.Cyr@amd.com>
Acked-by: Leo Li <sunpeng.li@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
Anthony Koo 2019-10-02 12:22:29 -04:00 committed by Alex Deucher
parent 4d25a0d510
commit e9c93e5af3
3 changed files with 7 additions and 2 deletions

View File

@ -113,6 +113,7 @@ static ssize_t dm_dp_aux_transfer(struct drm_dp_aux *aux,
result = -EIO; result = -EIO;
break; break;
case AUX_CHANNEL_OPERATION_FAILED_INVALID_REPLY: case AUX_CHANNEL_OPERATION_FAILED_INVALID_REPLY:
case AUX_CHANNEL_OPERATION_FAILED_ENGINE_ACQUIRE:
result = -EBUSY; result = -EBUSY;
break; break;
case AUX_CHANNEL_OPERATION_FAILED_TIMEOUT: case AUX_CHANNEL_OPERATION_FAILED_TIMEOUT:

View File

@ -49,7 +49,8 @@ enum aux_channel_operation_result {
AUX_CHANNEL_OPERATION_FAILED_REASON_UNKNOWN, AUX_CHANNEL_OPERATION_FAILED_REASON_UNKNOWN,
AUX_CHANNEL_OPERATION_FAILED_INVALID_REPLY, AUX_CHANNEL_OPERATION_FAILED_INVALID_REPLY,
AUX_CHANNEL_OPERATION_FAILED_TIMEOUT, AUX_CHANNEL_OPERATION_FAILED_TIMEOUT,
AUX_CHANNEL_OPERATION_FAILED_HPD_DISCON AUX_CHANNEL_OPERATION_FAILED_HPD_DISCON,
AUX_CHANNEL_OPERATION_FAILED_ENGINE_ACQUIRE
}; };

View File

@ -538,8 +538,10 @@ int dce_aux_transfer_raw(struct ddc_service *ddc,
memset(&aux_rep, 0, sizeof(aux_rep)); memset(&aux_rep, 0, sizeof(aux_rep));
aux_engine = ddc->ctx->dc->res_pool->engines[ddc_pin->pin_data->en]; 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; return -1;
}
if (payload->i2c_over_aux) if (payload->i2c_over_aux)
aux_req.type = AUX_TRANSACTION_TYPE_I2C; aux_req.type = AUX_TRANSACTION_TYPE_I2C;
@ -663,6 +665,7 @@ bool dce_aux_transfer_with_retries(struct ddc_service *ddc,
break; break;
case AUX_CHANNEL_OPERATION_FAILED_HPD_DISCON: case AUX_CHANNEL_OPERATION_FAILED_HPD_DISCON:
case AUX_CHANNEL_OPERATION_FAILED_ENGINE_ACQUIRE:
case AUX_CHANNEL_OPERATION_FAILED_REASON_UNKNOWN: case AUX_CHANNEL_OPERATION_FAILED_REASON_UNKNOWN:
default: default:
goto fail; goto fail;