summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJuha-Pekka Heikkila <juhapekka.heikkila@gmail.com>2021-01-24 16:40:02 +0200
committerJuha-Pekka Heikkila <juhapekka.heikkila@gmail.com>2021-01-26 20:09:33 +0200
commit7ae3d0d68e6bf4c5e404c87b570773d1b3173d47 (patch)
treeb1145693344bc1e47a3ec1284d69bf97ddc6cc64 /tests
parent82fa6021821edb5d9609f4cce213920e0936d6f3 (diff)
tests/kms_flip_scaled_crc: try to set mode to 1080p during test
Different default resolutions will affect test execution, try to normalize situation by always going to 1080p resolution. If this test will run on connector which doesn't have 1080p resolution, default resolution will be used. On gen<11 will be used 480p v2 (Stan): Use igt functions for modesetting. Change igt_warn to igt_debug because there's one ICL in intel CI with eDP that would show up warnings randomly depending which machine run which test. Signed-off-by: Juha-Pekka Heikkila <juhapekka.heikkila@gmail.com> Reviewed-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/kms_flip_scaled_crc.c85
1 files changed, 45 insertions, 40 deletions
diff --git a/tests/kms_flip_scaled_crc.c b/tests/kms_flip_scaled_crc.c
index 93d8031f..f7748406 100644
--- a/tests/kms_flip_scaled_crc.c
+++ b/tests/kms_flip_scaled_crc.c
@@ -35,6 +35,8 @@ typedef struct {
struct igt_fb small_fb;
struct igt_fb big_fb;
igt_pipe_crc_t *pipe_crc;
+ uint32_t attemptmodewidth;
+ uint32_t attemptmodeheight;
} data_t;
const struct {
@@ -133,8 +135,7 @@ static void test_flip_to_scaled(data_t *data, uint32_t index, enum pipe pipe,
{
igt_plane_t *primary;
igt_crc_t small_crc, big_crc;
-
- drmModeModeInfo *mode;
+ drmModeModeInfoPtr modetoset = NULL;
struct drm_event_vblank ev;
int ret;
@@ -142,41 +143,24 @@ static void test_flip_to_scaled(data_t *data, uint32_t index, enum pipe pipe,
igt_debug("running on output %s pipe %s\n", output->name,
kmstest_pipe_name(pipe));
+
if (data->big_fb.fb_id == 0) {
- mode = igt_output_get_mode(output);
-
- // big fb will be 4k unless running on older than ICL
- if (data->gen < 11) {
- setup_fb(data, &data->small_fb,
- min(mode->hdisplay, 640),
- min(mode->vdisplay, 480),
- flip_scenario_test[index].firstformat,
- flip_scenario_test[index].firstmodifier);
-
- setup_fb(data, &data->big_fb,
- 1280, 960,
- flip_scenario_test[index].secondformat,
- flip_scenario_test[index].secondmodifier);
- igt_debug("small fb %dx%d\n", data->small_fb.width,
- data->small_fb.height);
- igt_debug("big fb %dx%d\n", data->big_fb.width,
- data->big_fb.height);
- } else {
- setup_fb(data, &data->small_fb,
- min(mode->hdisplay, 1920),
- min(mode->vdisplay, 1080),
- flip_scenario_test[index].firstformat,
- flip_scenario_test[index].firstmodifier);
-
- setup_fb(data, &data->big_fb,
- 3840, 2160,
- flip_scenario_test[index].secondformat,
- flip_scenario_test[index].secondmodifier);
- igt_debug("small fb %dx%d\n", data->small_fb.width,
- data->small_fb.height);
- igt_debug("big fb %dx%d\n", data->big_fb.width,
- data->big_fb.height);
- }
+ setup_fb(data, &data->small_fb,
+ data->attemptmodewidth,
+ data->attemptmodeheight,
+ flip_scenario_test[index].firstformat,
+ flip_scenario_test[index].firstmodifier);
+
+ setup_fb(data, &data->big_fb,
+ data->attemptmodewidth * 2,
+ data->attemptmodeheight * 2,
+ flip_scenario_test[index].secondformat,
+ flip_scenario_test[index].secondmodifier);
+
+ igt_debug("small fb %dx%d\n", data->small_fb.width,
+ data->small_fb.height);
+ igt_debug("big fb %dx%d\n", data->big_fb.width,
+ data->big_fb.height);
}
igt_output_set_pipe(output, pipe);
@@ -186,13 +170,26 @@ static void test_flip_to_scaled(data_t *data, uint32_t index, enum pipe pipe,
NULL);
data->pipe_crc = igt_pipe_crc_new(data->drm_fd, pipe,
INTEL_PIPE_CRC_SOURCE_AUTO);
- igt_pipe_crc_start(data->pipe_crc);
+
+ for (int i = 0; i < output->config.connector->count_modes; i++) {
+ if (output->config.connector->modes[i].hdisplay == data->attemptmodewidth &&
+ output->config.connector->modes[i].vdisplay == data->attemptmodeheight) {
+ modetoset = &output->config.connector->modes[i];
+ break;
+ }
+ }
+
+ if (!modetoset)
+ igt_debug("%dp mode was not found from connector, will continue with default. This may cause cdclk to fail this test.\n",
+ data->attemptmodeheight);
+ else
+ igt_output_override_mode(output, modetoset);
igt_plane_set_position(primary, 0, 0);
igt_plane_set_fb(primary, &data->small_fb);
+ igt_display_commit_atomic(&data->display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
- igt_display_commit_atomic(&data->display,
- DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
+ igt_pipe_crc_start(data->pipe_crc);
igt_pipe_crc_get_current(data->drm_fd, data->pipe_crc, &small_crc);
igt_plane_set_fb(primary, &data->big_fb);
@@ -203,7 +200,7 @@ static void test_flip_to_scaled(data_t *data, uint32_t index, enum pipe pipe,
DRM_MODE_PAGE_FLIP_EVENT, NULL);
igt_require_f(ret != -ERANGE,
- "Platform scaling limits exceeded, skipping.");
+ "Platform scaling limits exceeded, skipping.\n");
igt_assert_eq(ret, 0);
igt_assert(read(data->drm_fd, &ev, sizeof(ev)) == sizeof(ev));
@@ -230,6 +227,14 @@ igt_main
igt_require(data.display.is_atomic);
igt_require_pipe_crc(data.drm_fd);
kmstest_set_vt_graphics_mode();
+
+ if (data.gen < 11) {
+ data.attemptmodewidth = 640;
+ data.attemptmodeheight = 480;
+ } else {
+ data.attemptmodewidth = 1920;
+ data.attemptmodeheight = 1080;
+ }
}
for (int index = 0; index < ARRAY_SIZE(flip_scenario_test); index++) {