mirror of https://gitee.com/openkylin/linux.git
drm/amd/display: retry 3 times before successfully reading
DPCD Extended Receiver Capability Field [Why] 1.dpcd extended receiver capability sometimes read fail, and corrupted data leads to sink caps is not correct. 2.sometimes sink reply ack with fewer data [How] check the return value of core_link_read_dpcd, try to read again when failure happens Signed-off-by: Xiaodong Yan <Xiaodong.Yan@amd.com> Reviewed-by: Wenjing Liu <Wenjing.Liu@amd.com> Acked-by: Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com> Acked-by: Tony Cheng <Tony.Cheng@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
a751341961
commit
818832bf2b
|
@ -2371,11 +2371,22 @@ static bool retrieve_link_cap(struct dc_link *link)
|
|||
dpcd_data[DP_TRAINING_AUX_RD_INTERVAL];
|
||||
|
||||
if (aux_rd_interval.bits.EXT_RECIEVER_CAP_FIELD_PRESENT == 1) {
|
||||
core_link_read_dpcd(
|
||||
uint8_t ext_cap_data[16];
|
||||
|
||||
memset(ext_cap_data, '\0', sizeof(ext_cap_data));
|
||||
for (i = 0; i < read_dpcd_retry_cnt; i++) {
|
||||
status = core_link_read_dpcd(
|
||||
link,
|
||||
DP_DP13_DPCD_REV,
|
||||
dpcd_data,
|
||||
sizeof(dpcd_data));
|
||||
ext_cap_data,
|
||||
sizeof(ext_cap_data));
|
||||
if (status == DC_OK) {
|
||||
memcpy(dpcd_data, ext_cap_data, sizeof(dpcd_data));
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (status != DC_OK)
|
||||
dm_error("%s: Read extend caps data failed, use cap from dpcd 0.\n", __func__);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue