From 464424dcee9b22cf66bd33f5be5e93397aa15e24 Mon Sep 17 00:00:00 2001 From: Maarten Lankhorst Date: Thu, 12 Nov 2015 13:33:42 +0100 Subject: tests/kms_setmode: Handle MST correctly. There is a MST encoder for each crtc, and each MST connector will be connected to the encoder bound to that crtc. This breaks the kms_setmode assertion that is only 1 encoder per connector, so make an exception to that rule for displayport. Signed-off-by: Maarten Lankhorst --- tests/kms_setmode.c | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) (limited to 'tests/kms_setmode.c') diff --git a/tests/kms_setmode.c b/tests/kms_setmode.c index ce016ed4..cf06aabf 100644 --- a/tests/kms_setmode.c +++ b/tests/kms_setmode.c @@ -306,9 +306,17 @@ static void setup_crtcs(drmModeRes *resources, struct connector_config *cconf, connector = cconf[i + j].connector; /* Intel connectors have only a single encoder */ - igt_assert(connector->count_encoders == 1); - encoder = drmModeGetEncoder(drm_fd, - connector->encoders[0]); + if (connector->count_encoders == 1) { + encoder = drmModeGetEncoder(drm_fd, + connector->encoders[0]); + } else { + igt_assert_eq(connector->connector_type, + DRM_MODE_CONNECTOR_DisplayPort); + + igt_assert(connector->count_encoders >= crtc->crtc_idx); + encoder = drmModeGetEncoder(drm_fd, + connector->encoders[crtc_count]); + } igt_assert(encoder); config_valid &= !!(encoder->possible_crtcs & @@ -333,9 +341,13 @@ static void setup_crtcs(drmModeRes *resources, struct connector_config *cconf, for (i = 0; i < connector_count; i++) { drmModeConnector *connector = cconf[i].connector; drmModeEncoder *encoder; + int idx = 0; - igt_assert(connector->count_encoders == 1); - encoder = drmModeGetEncoder(drm_fd, connector->encoders[0]); + /* DP MST configs are presumed valid */ + if (connector->count_encoders > 1) + idx = cconf[i].crtc_idx; + + encoder = drmModeGetEncoder(drm_fd, connector->encoders[idx]); encoder_usage_count[get_encoder_idx(resources, encoder)]++; drmModeFreeEncoder(encoder); } @@ -417,7 +429,7 @@ static void test_crtc_config(const struct test_config *tconf, free(ids); if (ret < 0) { - igt_assert(errno == EINVAL); + igt_assert_eq(errno, EINVAL); config_failed = true; } @@ -534,7 +546,7 @@ static int get_connectors(drmModeRes *resources, int *connector_idxs, int connector_id; connector_idx = connector_idxs[i]; - igt_assert(connector_idx < resources->count_connectors); + igt_assert_lt(connector_idx, resources->count_connectors); connector_id = resources->connectors[connector_idx]; if (get_one_connector(resources, connector_id, &cconfs[i]) < 0) -- cgit v1.2.3