If we do a shallow probe of the connector and it reports the link failed previous (link-status != GOOD), force a full probe of the connector to give the kernel a chance to validate the mode list. Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> --- lib/igt_kms.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/lib/igt_kms.c b/lib/igt_kms.c index f7758458..5f2adbdb 100644 --- a/lib/igt_kms.c +++ b/lib/igt_kms.c @@ -852,6 +852,26 @@ _kmstest_connector_config_find_encoder(int drm_fd, drmModeConnector *connector, return NULL; } +static bool connector_check_link_status(int fd, drmModeConnector *connector) +{ + for (int i = 0; i < connector->count_props; i++) { + struct drm_mode_get_property prop; + + prop.prop_id = connector->props[i]; + prop.count_values = 0; + prop.count_enum_blobs = 0; + if (drmIoctl(fd, DRM_IOCTL_MODE_GETPROPERTY, &prop)) + continue; + + if (strcmp(prop.name, "link-status")) + continue; + + return connector->prop_values[i] == 0; + } + + return true; +} + /** * _kmstest_connector_config: * @drm_fd: DRM fd @@ -894,6 +914,15 @@ static bool _kmstest_connector_config(int drm_fd, uint32_t connector_id, goto err3; } + if (!probe && !connector_check_link_status(drm_fd, connector)) { + drmModeFreeConnector(connector); + connector = drmModeGetConnector(drm_fd, connector_id); + if (!connector) + goto err2; + + igt_assert(connector->connector_id == connector_id); + } + /* * Find given CRTC if crtc_id != 0 or else the first CRTC not in use. * In both cases find the first compatible encoder and skip the CRTC -- 2.11.0 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx