Commit 67ed0092 authored by Alex Deucher's avatar Alex Deucher

drm/amdgpu: retry dcpd fetch

Retry the dpcd fetch several times.  Some eDP panels
fail several times before the fetch is successful.

bug:
https://bugs.freedesktop.org/show_bug.cgi?id=73530

Ported from radeon.
Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 7af93b50
...@@ -358,19 +358,21 @@ int amdgpu_atombios_dp_get_dpcd(struct amdgpu_connector *amdgpu_connector) ...@@ -358,19 +358,21 @@ int amdgpu_atombios_dp_get_dpcd(struct amdgpu_connector *amdgpu_connector)
{ {
struct amdgpu_connector_atom_dig *dig_connector = amdgpu_connector->con_priv; struct amdgpu_connector_atom_dig *dig_connector = amdgpu_connector->con_priv;
u8 msg[DP_DPCD_SIZE]; u8 msg[DP_DPCD_SIZE];
int ret; int ret, i;
ret = drm_dp_dpcd_read(&amdgpu_connector->ddc_bus->aux, DP_DPCD_REV, msg, for (i = 0; i < 7; i++) {
DP_DPCD_SIZE); ret = drm_dp_dpcd_read(&amdgpu_connector->ddc_bus->aux, DP_DPCD_REV, msg,
if (ret > 0) { DP_DPCD_SIZE);
memcpy(dig_connector->dpcd, msg, DP_DPCD_SIZE); if (ret == DP_DPCD_SIZE) {
memcpy(dig_connector->dpcd, msg, DP_DPCD_SIZE);
DRM_DEBUG_KMS("DPCD: %*ph\n", (int)sizeof(dig_connector->dpcd), DRM_DEBUG_KMS("DPCD: %*ph\n", (int)sizeof(dig_connector->dpcd),
dig_connector->dpcd); dig_connector->dpcd);
amdgpu_atombios_dp_probe_oui(amdgpu_connector); amdgpu_atombios_dp_probe_oui(amdgpu_connector);
return 0; return 0;
}
} }
dig_connector->dpcd[0] = 0; dig_connector->dpcd[0] = 0;
return -EINVAL; return -EINVAL;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment