Commit 669dca37 authored by Mario Limonciello (AMD)'s avatar Mario Limonciello (AMD) Committed by Alex Deucher
Browse files

drm/amd/display: Move sleep into each retry for retrieve_link_cap()

[Why]
When a monitor is booting it's possible that it isn't ready to retrieve
link caps and this can lead to an EDID read failure:

```
[drm:retrieve_link_cap [amdgpu]] *ERROR* retrieve_link_cap: Read receiver caps dpcd data failed.
amdgpu 0000:c5:00.0: [drm] *ERROR* No EDID read.
```

[How]
Rather than msleep once and try a few times, msleep each time.  Should
be no changes for existing working monitors, but should correct reading
caps on a monitor that is slow to boot.

Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4672


Reviewed-by: default avatarAlex Hung <alex.hung@amd.com>
Signed-off-by: default avatarMario Limonciello (AMD) <superm1@kernel.org>
Signed-off-by: default avatarIvan Lipski <ivan.lipski@amd.com>
Tested-by: default avatarDan Wheeler <daniel.wheeler@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent d24203bb
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -1756,12 +1756,13 @@ static bool retrieve_link_cap(struct dc_link *link)
	}

	dpcd_set_source_specific_data(link);
	/* Sink may need to configure internals based on vendor, so allow some

	for (i = 0; i < read_dpcd_retry_cnt; i++) {
		/*
		 * Sink may need to configure internals based on vendor, so allow some
		 * time before proceeding with possibly vendor specific transactions
		 */
		msleep(post_oui_delay);

	for (i = 0; i < read_dpcd_retry_cnt; i++) {
		status = core_link_read_dpcd(
				link,
				DP_DPCD_REV,