Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

drm/amd/display: Increase EDID read retries

[WHY]
When monitor is still booting EDID read can fail while DPCD read
is successful. In this case no EDID data will be returned, and this
could happen for a while.

[HOW]
Increase number of attempts to read EDID in dm_helpers_read_local_edid()
to 25.

Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4672
Cc: Mario Limonciello <mario.limonciello@amd.com>
Cc: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Alex Hung <alex.hung@amd.com>
Signed-off-by: Mario Limonciello (AMD) <superm1@kernel.org>
Signed-off-by: Alex Hung <alex.hung@amd.com>
Tested-by: Dan Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Mario Limonciello (AMD) and committed by
Alex Deucher
a76d6f2c 0563d172

+4 -4
+4 -4
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c
··· 998 998 struct amdgpu_dm_connector *aconnector = link->priv; 999 999 struct drm_connector *connector = &aconnector->base; 1000 1000 struct i2c_adapter *ddc; 1001 - int retry = 3; 1002 - enum dc_edid_status edid_status; 1001 + int retry = 25; 1002 + enum dc_edid_status edid_status = EDID_NO_RESPONSE; 1003 1003 const struct drm_edid *drm_edid; 1004 1004 const struct edid *edid; 1005 1005 ··· 1029 1029 } 1030 1030 1031 1031 if (!drm_edid) 1032 - return EDID_NO_RESPONSE; 1032 + continue; 1033 1033 1034 1034 edid = drm_edid_raw(drm_edid); // FIXME: Get rid of drm_edid_raw() 1035 1035 if (!edid || ··· 1047 1047 &sink->dc_edid, 1048 1048 &sink->edid_caps); 1049 1049 1050 - } while (edid_status == EDID_BAD_CHECKSUM && --retry > 0); 1050 + } while ((edid_status == EDID_BAD_CHECKSUM || edid_status == EDID_NO_RESPONSE) && --retry > 0); 1051 1051 1052 1052 if (edid_status != EDID_OK) 1053 1053 DRM_ERROR("EDID err: %d, on connector: %s",