|
@@ -2278,6 +2278,8 @@ static bool retrieve_link_cap(struct dc_link *link)
|
|
|
union edp_configuration_cap edp_config_cap;
|
|
|
union dp_downstream_port_present ds_port = { 0 };
|
|
|
enum dc_status status = DC_ERROR_UNEXPECTED;
|
|
|
+ uint32_t read_dpcd_retry_cnt = 3;
|
|
|
+ int i;
|
|
|
|
|
|
memset(dpcd_data, '\0', sizeof(dpcd_data));
|
|
|
memset(&down_strm_port_count,
|
|
@@ -2285,11 +2287,15 @@ static bool retrieve_link_cap(struct dc_link *link)
|
|
|
memset(&edp_config_cap, '\0',
|
|
|
sizeof(union edp_configuration_cap));
|
|
|
|
|
|
- status = core_link_read_dpcd(
|
|
|
- link,
|
|
|
- DP_DPCD_REV,
|
|
|
- dpcd_data,
|
|
|
- sizeof(dpcd_data));
|
|
|
+ for (i = 0; i < read_dpcd_retry_cnt; i++) {
|
|
|
+ status = core_link_read_dpcd(
|
|
|
+ link,
|
|
|
+ DP_DPCD_REV,
|
|
|
+ dpcd_data,
|
|
|
+ sizeof(dpcd_data));
|
|
|
+ if (status == DC_OK)
|
|
|
+ break;
|
|
|
+ }
|
|
|
|
|
|
if (status != DC_OK) {
|
|
|
dm_error("%s: Read dpcd data failed.\n", __func__);
|