summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeevan B <jeevan.b@intel.com>2022-06-28 11:37:30 +0530
committerKunal Joshi <kunal1.joshi@intel.com>2022-06-28 11:46:18 +0530
commit7043ebd7313dbceb3d931aa2dbc0d67288982d40 (patch)
tree690ff23ecbf6b68378fa85dd86e20c19c634ae82
parent0463b607ed58ceede542f9bad6a9dad8d77d6f9c (diff)
tests/kms_flip: Skip test only for invalid combination
currently the entire test is skipping. adding this fix to skip test only for invalid cases and run on other valid display combination. v2: add RUN_PAIR check to avoid crash on single display. v3: add flag to check for valid display combination.(Karthik) v4: if no valid mode is found then flow should go to 'out'.(Karthik) v5: rebase. Signed-off-by: Jeevan B <jeevan.b@intel.com> Reviewed-by: Karthik B S <karthik.b.s@intel.com>
-rwxr-xr-xtests/kms_flip.c31
1 files changed, 17 insertions, 14 deletions
diff --git a/tests/kms_flip.c b/tests/kms_flip.c
index 2a57da02..0567edea 100755
--- a/tests/kms_flip.c
+++ b/tests/kms_flip.c
@@ -932,7 +932,7 @@ static bool mode_compatible(const drmModeModeInfo *a, const drmModeModeInfo *b)
return true;
}
-static void get_compatible_modes(drmModeModeInfo *a, drmModeModeInfo *b,
+static bool get_compatible_modes(drmModeModeInfo *a, drmModeModeInfo *b,
drmModeConnector *c1, drmModeConnector *c2)
{
int n, m;
@@ -946,14 +946,14 @@ static void get_compatible_modes(drmModeModeInfo *a, drmModeModeInfo *b,
for (m = 0; m < c2->count_modes; m++) {
*b = c2->modes[m];
if (mode_compatible(a, b))
- return;
+ return true;
}
}
- igt_skip("Compatible mode not found.\n");
+ return false;
}
- return;
+ return true;
}
static void connector_find_compatible_mode(int crtc_idx0, int crtc_idx1,
@@ -972,13 +972,12 @@ static void connector_find_compatible_mode(int crtc_idx0, int crtc_idx1,
return;
}
- get_compatible_modes(&mode[0], &mode[1],
- config[0].connector, config[1].connector);
+ o->mode_valid = get_compatible_modes(&mode[0], &mode[1],
+ config[0].connector, config[1].connector);
o->pipe = config[0].pipe;
o->fb_width = mode[0].hdisplay;
o->fb_height = mode[0].vdisplay;
- o->mode_valid = 1;
o->kconnector[0] = config[0].connector;
o->kencoder[0] = config[0].encoder;
@@ -1320,8 +1319,8 @@ static void get_suitable_modes(struct test_output *o)
igt_sort_connector_modes(o->kconnector[i],
sort_drm_modes_by_clk_asc);
- get_compatible_modes(&mode[0], &mode[1],
- o->kconnector[0], o->kconnector[1]);
+ o->mode_valid = get_compatible_modes(&mode[0], &mode[1],
+ o->kconnector[0], o->kconnector[1]);
o->fb_width = mode[0].hdisplay;
o->fb_height = mode[0].vdisplay;
@@ -1406,12 +1405,16 @@ retry:
get_suitable_modes(o);
- igt_remove_fb(drm_fd, &o->fb_info[2]);
- igt_remove_fb(drm_fd, &o->fb_info[1]);
- igt_remove_fb(drm_fd, &o->fb_info[0]);
+ if (o->mode_valid) {
+ igt_remove_fb(drm_fd, &o->fb_info[2]);
+ igt_remove_fb(drm_fd, &o->fb_info[1]);
+ igt_remove_fb(drm_fd, &o->fb_info[0]);
+
+ restart = true;
+ goto restart;
+ }
- restart = true;
- goto restart;
+ goto out;
}
igt_assert(!ret);