summaryrefslogtreecommitdiff
path: root/tests/kms_setmode.c
diff options
context:
space:
mode:
authorMaarten Lankhorst <maarten.lankhorst@linux.intel.com>2015-11-12 13:33:42 +0100
committerMaarten Lankhorst <maarten.lankhorst@linux.intel.com>2015-11-12 13:33:42 +0100
commit464424dcee9b22cf66bd33f5be5e93397aa15e24 (patch)
treee25fa7bde914b3b177be31bb7410232306cb55b7 /tests/kms_setmode.c
parent4c14aa18c18f578825253769e97901bc963b40d2 (diff)
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 <maarten.lankhorst@linux.intel.com>
Diffstat (limited to 'tests/kms_setmode.c')
-rw-r--r--tests/kms_setmode.c26
1 files changed, 19 insertions, 7 deletions
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)