[igt-dev] [i-g-t v5 39/52] tests/i915/kms_busy: Add support for Bigjoiner

Gupta, Nidhi1 nidhi1.gupta at intel.com
Wed Dec 28 04:10:19 UTC 2022


On Tue, 2022-11-15 at 08:43 +0530, Bhanuprakash Modem wrote:
>This patch will add a check to Skip the subtest if a selected pipe/output
>combo won't support Bigjoiner or 8K mode.
>
>Example:
>* Pipe-D wont support a mode > 5K
>* To use 8K mode on a pipe then consecutive pipe must be available & free.
>
>V2: - Use updated helper name
>
>Signed-off-by: Bhanuprakash Modem <bhanuprakash.modem at intel.com<mailto:bhanuprakash.modem at intel.com>>
Reviewed-by: Nidhi Gupta <nidhi1.gupta at intel.com>
>---
>tests/i915/kms_busy.c | 106 ++++++++++++++++++++++++++++--------------
> 1 file changed, 71 insertions(+), 35 deletions(-)
>diff --git a/tests/i915/kms_busy.c b/tests/i915/kms_busy.c
>index b0642612..20d3058f 100644
>--- a/tests/i915/kms_busy.c
>+++ b/tests/i915/kms_busy.c
>@@ -32,15 +32,12 @@  IGT_TEST_DESCRIPTION("Basic check of KMS ABI with busy framebuffers.");
>
>static bool all_pipes = false;
>
>-static igt_output_t *
>-set_fb_on_crtc(igt_display_t *dpy, int pipe, struct igt_fb *fb)
>+static void
>+set_fb_on_crtc(igt_display_t *dpy, int pipe,
>+                  igt_output_t *output, struct igt_fb *fb)
> {
>             drmModeModeInfoPtr mode;
>             igt_plane_t *primary;
>-           igt_output_t *output;
>-
>-           output = igt_get_single_output_for_pipe(dpy, pipe);
>-           igt_require(output);
>
>             igt_output_set_pipe(output, pipe);
>             mode = igt_output_get_mode(output);
>@@ -51,8 +48,6 @@  set_fb_on_crtc(igt_display_t *dpy, int pipe, struct igt_fb *fb)
>
>             primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
>             igt_plane_set_fb(primary, fb);
>-
>-           return output;
> }
>
> static void do_cleanup_display(igt_display_t *dpy)
>@@ -136,18 +131,23 @@  static void flip_to_fb(igt_display_t *dpy, int pipe,
>             put_ahnd(ahnd);
> }
>
>-static void test_flip(igt_display_t *dpy, int pipe, bool modeset)
>+static void test_flip(igt_display_t *dpy, int pipe,
>+                                igt_output_t *output, bool modeset)
>{
>             struct igt_fb fb[2];
>             int warmup[] = { 0, 1, 0, -1 };
>             struct timespec tv = {};
>-           igt_output_t *output;
>             int timeout;
>
>             if (modeset)
>                            igt_require(dpy->is_atomic);
>
>-           output = set_fb_on_crtc(dpy, pipe, &fb[0]);
>+           igt_info("Using (pipe %s + %s) to run the subtest.\n",
>+                          kmstest_pipe_name(pipe), igt_output_name(output));
>+
>+           igt_display_reset(dpy);
>+
>+           set_fb_on_crtc(dpy, pipe, output, &fb[0]);
>             igt_display_commit2(dpy, COMMIT_LEGACY);
>
>             igt_create_pattern_fb(dpy->drm_fd,
>@@ -224,13 +224,18 @@  static void test_atomic_commit_hang(igt_display_t *dpy, igt_plane_t *primary,
> }
>
> static void test_hang(igt_display_t *dpy,
>-                                enum pipe pipe, bool modeset, bool hang_newfb)
>+                                enum pipe pipe, igt_output_t *output,
>+                               bool modeset, bool hang_newfb)
> {
>             struct igt_fb fb[2];
>-           igt_output_t *output;
>             igt_plane_t *primary;
>
>-           output = set_fb_on_crtc(dpy, pipe, &fb[0]);
>+           igt_info("Using (pipe %s + %s) to run the subtest.\n",
>+                          kmstest_pipe_name(pipe), igt_output_name(output));
>+
>+           igt_display_reset(dpy);
>+
>+           set_fb_on_crtc(dpy, pipe, output, &fb[0]);
>             igt_display_commit2(dpy, COMMIT_ATOMIC);
>             primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
>
>@@ -265,16 +270,22 @@  static void test_hang(igt_display_t *dpy,
>             igt_remove_fb(dpy->drm_fd, &fb[0]);
> }
>
>-static void test_pageflip_modeset_hang(igt_display_t *dpy, enum pipe pipe)
>+static void
>+test_pageflip_modeset_hang(igt_display_t *dpy,
>+                                            igt_output_t *output, enum pipe pipe)
> {
>             struct igt_fb fb;
>             struct drm_event_vblank ev;
>-           igt_output_t *output;
>             igt_plane_t *primary;
>             igt_spin_t *t;
>             uint64_t ahnd = get_reloc_ahnd(dpy->drm_fd, 0);
>
>-           output = set_fb_on_crtc(dpy, pipe, &fb);
>+           igt_info("Using (pipe %s + %s) to run the subtest.\n",
>+                          kmstest_pipe_name(pipe), igt_output_name(output));
>+
>+           igt_display_reset(dpy);
>+
>+           set_fb_on_crtc(dpy, pipe, output, &fb);
>             primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
>
>             igt_display_commit2(dpy, dpy->is_atomic ? COMMIT_ATOMIC : COMMIT_LEGACY);
>@@ -299,6 +310,22 @@  static void test_pageflip_modeset_hang(igt_display_t *dpy, enum pipe pipe)
>             igt_remove_fb(dpy->drm_fd, &fb);
> }
>
>+static bool
>+pipe_output_combo_valid(igt_display_t *dpy,
>+                                         igt_output_t *output, enum pipe pipe)
>+{
>+           bool ret = true;
>+
>+           igt_display_reset(dpy);
>+
>+           igt_output_set_pipe(output, pipe);
>+           if (!i915_pipe_output_combo_valid(dpy))
>+                          ret = false;
>+           igt_output_set_pipe(output, PIPE_NONE);
>+
>+           return ret;
>+}
>+
> static int opt_handler(int opt, int opt_index, void *data)
> {
>             switch (opt) {
>@@ -346,7 +373,8 @@  igt_main_args("e", NULL, help_str, opt_handler, NULL)
> {
>             igt_display_t display = { .drm_fd = -1, .n_pipes = IGT_MAX_PIPES };
>
>-           enum pipe active_pipes[IGT_MAX_PIPES];
>+           enum pipe pipe, active_pipes[IGT_MAX_PIPES];
>+           igt_output_t *output;
>             uint32_t last_pipe = 0;
>             int i;
>             struct {
>@@ -367,8 +395,6 @@  igt_main_args("e", NULL, help_str, opt_handler, NULL)
>             int fd;
>
>             igt_fixture {
>-                          enum pipe pipe;
>-
>                            fd = drm_open_driver_master(DRIVER_INTEL);
>
>                            igt_require_gem(fd);
>@@ -391,63 +417,72 @@  igt_main_args("e", NULL, help_str, opt_handler, NULL)
>
>             igt_describe("Test for basic check of KMS ABI with busy framebuffers.");
>             igt_subtest_with_dynamic("basic") { /* just run on the first pipe */
>-                          enum pipe pipe;
>+                          for_each_pipe_with_single_output(&display, pipe, output) {
>+                                         if (!pipe_output_combo_valid(&display, output, pipe))
>+                                                        continue;
>
>-                          for_each_pipe(&display, pipe) {
>                                           igt_dynamic("flip")
>-                                                        test_flip(&display, pipe, false);
>+                                                        test_flip(&display, pipe, output, false);
>                                           igt_dynamic("modeset")
>-                                                        test_flip(&display, pipe, true);
>+                                                        test_flip(&display, pipe, output, true);
>                                           break;
>                            }
>             }
>
>             igt_subtest_with_dynamic("basic-hang") {
>-                          enum pipe pipe;
>                            igt_hang_t hang = igt_allow_hang(display.drm_fd, 0, 0);
>                            errno = 0;
>
>-                          for_each_pipe(&display, pipe) {
>+                          for_each_pipe_with_single_output(&display, pipe, output) {
>+                                         if (!pipe_output_combo_valid(&display, output, pipe))
>+                                                        continue;
>+
>                                           if (!all_pipes && pipe != active_pipes[0] &&
>                                                                           pipe != active_pipes[last_pipe])
>                                                          continue;
>
>                                           igt_dynamic_f("flip-pipe-%s", kmstest_pipe_name(pipe))
>-                                                        test_flip(&display, pipe, false);
>+                                                        test_flip(&display, pipe, output, false);
>                                           igt_dynamic_f("modeset-pipe-%s", kmstest_pipe_name(pipe))
>-                                                        test_flip(&display, pipe, true);
>+                                                        test_flip(&display, pipe, output, true);
>                            }
>
>                            igt_disallow_hang(display.drm_fd, hang);
>             }
>
>             igt_subtest_with_dynamic("extended-pageflip-modeset-hang-oldfb") {
>-                          enum pipe pipe;
>                            igt_hang_t hang = igt_allow_hang(display.drm_fd, 0, 0);
>                            errno = 0;
>
>-                          for_each_pipe(&display, pipe) {
>+                          for_each_pipe_with_single_output(&display, pipe, output) {
>+                                         if (!pipe_output_combo_valid(&display, output, pipe))
>+                                                        continue;
>+
>                                           if (!all_pipes && pipe != active_pipes[0] &&
>                                                                           pipe != active_pipes[last_pipe])
>                                                          continue;
>
>                                           igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe))
>-                                                        test_pageflip_modeset_hang(&display, pipe);
>+                                                        test_pageflip_modeset_hang(&display, output, pipe);
>                            }
>
>                            igt_disallow_hang(display.drm_fd, hang);
>             }
>
>             for (i = 0; i < sizeof(tests) / sizeof (tests[0]); i++) {
>+                          igt_fixture
>+                                         igt_require(display.is_atomic);
>+
>                            igt_subtest_with_dynamic(tests[i].name) {
>-                                         enum pipe pipe;
>                                           igt_hang_t hang;
>                                           errno = 0;
>
>-                                         igt_require(display.is_atomic);
>                                           hang = igt_allow_hang(display.drm_fd, 0, 0);
>
>-                                         for_each_pipe(&display, pipe) {
>+                                         for_each_pipe_with_single_output(&display, pipe, output) {
>+                                                        if (!pipe_output_combo_valid(&display, output, pipe))
>+                                                                       continue;
>+
>                                                          if (!all_pipes && pipe != active_pipes[0] &&
>                                                                                          pipe != active_pipes[last_pipe])
>                                                                         continue;
>@@ -456,7 +491,8 @@  igt_main_args("e", NULL, help_str, opt_handler, NULL)
>                                                                         if (tests[i].reset)
>                                                                                        igt_set_module_param_int(display.drm_fd, "force_reset_modeset_test", 1);
>
>-                                                                       test_hang(&display, pipe, tests[i].modeset, tests[i].hang_newfb);
>+                                                                       test_hang(&display, pipe, output,
>+                                                                                        tests[i].modeset, tests[i].hang_newfb);
>
>                                                                         if (tests[i].reset)
>                                                                                        igt_set_module_param_int(display.drm_fd, "force_reset_modeset_test", 0);
>


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/igt-dev/attachments/20221228/b2d003ff/attachment-0001.htm>


More information about the igt-dev mailing list