summaryrefslogtreecommitdiff
path: root/tests/kms_plane.c
diff options
context:
space:
mode:
authorPatnana Venkata Sai <venkata.sai.patnana@intel.com>2021-05-11 16:04:45 +0530
committerKunal Joshi <kunal1.joshi@intel.com>2021-05-12 12:14:17 +0530
commitd28aee5c5f528aa6c352c3339f20aaed4d698ffa (patch)
tree73391e6e22ffa1f598cdcf23e3d41103337a1839 /tests/kms_plane.c
parent355269577baef0c5d8114e8851acaeac657e4fe6 (diff)
tests/kms_plane: Restrict the test execution to two pipes
v2: Moved to igt tests to dynamic (petri) v3: Implemented clamping in the tests directly with an open-coded counting (petri) v4: Updated subtest names as suggested(petri) Updated Help string (Bhanu) v5: Updated subtests names as suggested and addressed other review comments. (Bhanu) Cc: Uma Shankar <uma.shankar@intel.com> Cc: Modem Bhanuprakash <bhanuprakash.modem@intel.com> Cc: Karthik B S <karthik.b.s@intel.com> Cc: Petri Latvala <petri.latvala@intel.com> Signed-off-by: Patnana Venkata Sai <venkata.sai.patnana@intel.com> Reviewed-by: Bhanuprakash Modem <bhanuprakash.modem@intel.com>
Diffstat (limited to 'tests/kms_plane.c')
-rw-r--r--tests/kms_plane.c132
1 files changed, 96 insertions, 36 deletions
diff --git a/tests/kms_plane.c b/tests/kms_plane.c
index 9fe253a8..3511efa7 100644
--- a/tests/kms_plane.c
+++ b/tests/kms_plane.c
@@ -39,6 +39,9 @@
*/
#define LUT_MASK 0xf800
+/* restricted pipe count */
+#define CRTC_RESTRICT_CNT 2
+
typedef struct {
float red;
float green;
@@ -60,6 +63,8 @@ typedef struct {
bool extended;
} data_t;
+static bool all_pipes;
+
static color_t red = { 1.0f, 0.0f, 0.0f };
static color_t green = { 0.0f, 1.0f, 0.0f };
static color_t blue = { 0.0f, 0.0f, 1.0f };
@@ -1057,62 +1062,115 @@ test_pixel_formats(data_t *data, enum pipe pipe)
igt_assert_f(result, "At least one CRC mismatch happened\n");
}
+static bool is_pipe_limit_reached(int count) {
+ return count >= CRTC_RESTRICT_CNT && !all_pipes;
+}
+
static void
-run_tests_for_pipe_plane(data_t *data, enum pipe pipe)
+run_tests_for_pipe_plane(data_t *data)
{
+ enum pipe pipe;
+ int count;
igt_fixture {
igt_require_pipe(&data->display, pipe);
igt_require(data->display.pipes[pipe].n_planes > 0);
}
igt_describe("verify the pixel formats for given plane and pipe");
- igt_subtest_f("pixel-format-pipe-%s-planes",
- kmstest_pipe_name(pipe))
- test_pixel_formats(data, pipe);
-
+ igt_subtest_with_dynamic_f("pixel-format") {
+ count = 0;
+ for_each_pipe(&data->display, pipe) {
+ igt_dynamic_f("pipe-%s-planes", kmstest_pipe_name(pipe))
+ test_pixel_formats(data, pipe);
+ if (is_pipe_limit_reached(++count))
+ break;
+ }
+ }
igt_describe("verify the pixel formats for given plane and pipe with source clamping");
- igt_subtest_f("pixel-format-pipe-%s-planes-source-clamping",
- kmstest_pipe_name(pipe)) {
- data->crop = 4;
- test_pixel_formats(data, pipe);
+ igt_subtest_with_dynamic_f("pixel-format-source-clamping") {
+ count = 0;
+ for_each_pipe(&data->display, pipe) {
+ igt_dynamic_f("pipe-%s-planes", kmstest_pipe_name(pipe)) {
+ data->crop = 4;
+ test_pixel_formats(data, pipe);
+ }
+ if (is_pipe_limit_reached(++count))
+ break;
+ }
}
data->crop = 0;
igt_describe("verify plane position using two planes to create a fully covered screen");
- igt_subtest_f("plane-position-covered-pipe-%s-planes",
- kmstest_pipe_name(pipe))
- test_plane_position(data, pipe, 0);
+ igt_subtest_with_dynamic_f("plane-position-covered") {
+ count = 0;
+ for_each_pipe(&data->display, pipe) {
+ igt_dynamic_f("pipe-%s-planes", kmstest_pipe_name(pipe))
+ test_plane_position(data, pipe, 0);
+ if (is_pipe_limit_reached(++count))
+ break;
+ }
+ }
igt_describe("verify plane position using two planes to create a partially covered screen");
- igt_subtest_f("plane-position-hole-pipe-%s-planes",
- kmstest_pipe_name(pipe))
- test_plane_position(data, pipe,
- TEST_POSITION_PARTIALLY_COVERED);
+ igt_subtest_with_dynamic_f("plane-position-hole") {
+ count = 0;
+ for_each_pipe(&data->display, pipe) {
+ igt_dynamic_f("pipe-%s-planes", kmstest_pipe_name(pipe))
+ test_plane_position(data, pipe,
+ TEST_POSITION_PARTIALLY_COVERED);
+ if (is_pipe_limit_reached(++count))
+ break;
+ }
+ }
igt_describe("verify plane position using two planes to create a partially covered screen and"
"check for DPMS");
- igt_subtest_f("plane-position-hole-dpms-pipe-%s-planes",
- kmstest_pipe_name(pipe))
- test_plane_position(data, pipe,
- TEST_POSITION_PARTIALLY_COVERED |
- TEST_DPMS);
+ igt_subtest_with_dynamic_f("plane-position-hole-dpms") {
+ count = 0;
+ for_each_pipe(&data->display, pipe) {
+ igt_dynamic_f("pipe-%s-planes", kmstest_pipe_name(pipe))
+ test_plane_position(data, pipe,
+ TEST_POSITION_PARTIALLY_COVERED | TEST_DPMS);
+ if (is_pipe_limit_reached(++count))
+ break;
+ }
+ }
igt_describe("verify plane panning at top-left position using primary plane");
- igt_subtest_f("plane-panning-top-left-pipe-%s-planes",
- kmstest_pipe_name(pipe))
- test_plane_panning(data, pipe, TEST_PANNING_TOP_LEFT);
+ igt_subtest_with_dynamic_f("plane-panning-top-left") {
+ count = 0;
+ for_each_pipe(&data->display, pipe) {
+ igt_dynamic_f("pipe-%s-planes", kmstest_pipe_name(pipe))
+ test_plane_panning(data, pipe, TEST_PANNING_TOP_LEFT);
+ if (is_pipe_limit_reached(++count))
+ break;
+ }
+ }
igt_describe("verify plane panning at bottom-right position using primary plane");
- igt_subtest_f("plane-panning-bottom-right-pipe-%s-planes",
- kmstest_pipe_name(pipe))
- test_plane_panning(data, pipe, TEST_PANNING_BOTTOM_RIGHT);
+ igt_subtest_with_dynamic_f("plane-panning-bottom-right") {
+ count = 0;
+ for_each_pipe(&data->display, pipe) {
+ igt_dynamic_f("pipe-%s-planes", kmstest_pipe_name(pipe))
+ test_plane_panning(data, pipe, TEST_PANNING_BOTTOM_RIGHT);
+ if (is_pipe_limit_reached(++count))
+ break;
+ }
+ }
igt_describe("verify plane panning at bottom-right position using primary plane and executes system"
"suspend cycles");
- igt_subtest_f("plane-panning-bottom-right-suspend-pipe-%s-planes",
- kmstest_pipe_name(pipe))
- test_plane_panning(data, pipe, TEST_PANNING_BOTTOM_RIGHT |
- TEST_SUSPEND_RESUME);
+ igt_subtest_with_dynamic_f("plane-panning-bottom-right-suspend") {
+ count = 0;
+ for_each_pipe(&data->display, pipe) {
+ igt_dynamic_f("pipe-%s-planes", kmstest_pipe_name(pipe))
+ test_plane_panning(data, pipe,
+ TEST_PANNING_BOTTOM_RIGHT |
+ TEST_SUSPEND_RESUME);
+ if (is_pipe_limit_reached(++count))
+ break;
+ }
+ }
}
static int opt_handler(int opt, int opt_index, void *_data)
@@ -1123,6 +1181,9 @@ static int opt_handler(int opt, int opt_index, void *_data)
case 'e':
data->extended = true;
break;
+ case 'p':
+ all_pipes = true;
+ break;
}
return IGT_OPT_HANDLER_SUCCESS;
@@ -1130,18 +1191,18 @@ static int opt_handler(int opt, int opt_index, void *_data)
static const struct option long_opts[] = {
{ .name = "extended", .has_arg = false, .val = 'e', },
+ { .name = "all-pipes", .has_arg = false, .val = 'p', },
{}
};
static const char help_str[] =
- " --extended\t\tRun the extended tests\n";
+ " --extended\t\tRun the extended tests\n"
+ " --all-pipes\t\tRun on all pipes.(Default it will Run only two pipes)\n";
static data_t data;
igt_main_args("", long_opts, help_str, opt_handler, &data)
{
- enum pipe pipe;
-
igt_fixture {
data.drm_fd = drm_open_driver_master(DRIVER_ANY);
@@ -1151,8 +1212,7 @@ igt_main_args("", long_opts, help_str, opt_handler, &data)
igt_display_require(&data.display, data.drm_fd);
}
- for_each_pipe_static(pipe)
- run_tests_for_pipe_plane(&data, pipe);
+ run_tests_for_pipe_plane(&data);
igt_fixture {
igt_display_fini(&data.display);