Message ID | 1491307160-16624-1-git-send-email-mika.kahola@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hey, Op 04-04-17 om 13:59 schreef Mika Kahola: > When doing a full atomic modeset, kernel should fail if the flag > DRM_MODE_ATOMIC_ALLOW_MODESET is not set. Let's add this test as part of > Intel-GPU-Tools. The test procedure is the following: > > - Try to do atomic commit without DRM_MODE_ATOMIC_ALLOW_MODESET flag. > Kernel should reject this request. > - Do full modeset > - Enable DRM_MODE_ATOMIC_ALLOW_MODESET and try to do atmic commit. > Kernel should now allow atomic modeset. > > For: VIZ-6955 > > Signed-off-by: Mika Kahola <mika.kahola@intel.com> > --- > tests/Makefile.sources | 1 + > tests/kms_atomic_allow_modeset.c | 133 +++++++++++++++++++++++++++++++++++++++ > 2 files changed, 134 insertions(+) > create mode 100644 tests/kms_atomic_allow_modeset.c > > diff --git a/tests/Makefile.sources b/tests/Makefile.sources > index 45c21a0..d3ee629 100644 > --- a/tests/Makefile.sources > +++ b/tests/Makefile.sources > @@ -94,6 +94,7 @@ TESTS_progs_M = \ > kms_addfb_basic \ > kms_atomic \ > kms_atomic_transition \ > + kms_atomic_allow_modeset \ > kms_busy \ > kms_ccs \ > kms_chv_cursor_fail \ > diff --git a/tests/kms_atomic_allow_modeset.c b/tests/kms_atomic_allow_modeset.c > new file mode 100644 > index 0000000..b4d8c16 > --- /dev/null > +++ b/tests/kms_atomic_allow_modeset.c > @@ -0,0 +1,133 @@ > +/* > + * Copyright © 2017 Intel Corporation > + * > + * Permission is hereby granted, free of charge, to any person obtaining a > + * copy of this software and associated documentation files (the "Software"), > + * to deal in the Software without restriction, including without limitation > + * the rights to use, copy, modify, merge, publish, distribute, sublicense, > + * and/or sell copies of the Software, and to permit persons to whom the > + * Software is furnished to do so, subject to the following conditions: > + * > + * The above copyright notice and this permission notice (including the next > + * paragraph) shall be included in all copies or substantial portions of the > + * Software. > + * > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR > + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, > + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL > + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER > + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING > + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS > + * IN THE SOFTWARE. > + * > + */ > + > +#include "igt.h" > + > +IGT_TEST_DESCRIPTION("Test that kernel rejects atomic modeset if ALLOW_MODESET flag is not set"); > + > +static void > +test_init(igt_display_t *display, struct igt_fb *fb, igt_output_t *output) > +{ > + drmModeModeInfo *mode; > + igt_plane_t *primary; > + int id; > + > + mode = igt_output_get_mode(output); > + > + id = igt_create_pattern_fb(display->drm_fd, > + mode->hdisplay, mode->vdisplay, > + DRM_FORMAT_XRGB8888, > + LOCAL_I915_FORMAT_MOD_X_TILED, > + fb); > + igt_assert(id); > + > + primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY); > + igt_plane_set_fb(primary, fb); > +} > + > +static void > +test_finish(igt_display_t *display, struct igt_fb *fb, igt_output_t *output) > +{ > + igt_plane_t *primary; > + > + primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY); > + > + igt_remove_fb(display->drm_fd, fb); > + > + igt_plane_set_fb(primary, NULL); > + igt_output_set_pipe(output, PIPE_ANY); > + > + igt_display_commit2(display, COMMIT_ATOMIC); > +} > + > +static void > +test_allow_modeset(igt_display_t *display, enum pipe pipe, igt_output_t *output) > +{ > + struct igt_fb fb; > + int flags = DRM_MODE_ATOMIC_NONBLOCK; > + int ret; > + > + igt_output_set_pipe(output, pipe); > + > + test_init(display, &fb, output); > + > + /* > + * Try to do atomic commit without DRM_MODE_ATOMIC_ALLOW_MODESET flag. > + * Kernel should reject this request. > + */ > + ret = igt_display_try_commit_atomic(display, flags, NULL); > + igt_assert_eq(ret, -EINVAL); > + > + /* do modeset */ > + igt_output_set_pipe(output, pipe); > + > + /* > + * Try to do atomic commit with DRM_MODE_ATOMIC_ALLOW_MODESET flag set. > + * The kernel should now accept this request. > + */ > + flags |= DRM_MODE_ATOMIC_ALLOW_MODESET; > + ret = igt_display_try_commit_atomic(display, flags, NULL); > + igt_assert_eq(ret, 0); > + > + test_finish(display, &fb, output); > +} > + > +igt_simple_main > +{ > + igt_output_t *output; > + igt_display_t display; > + drmModeResPtr res; > + enum pipe pipe; > + > + igt_skip_on_simulation(); > + > + igt_fixture { > + int valid_outputs = 0; > + > + display.drm_fd = drm_open_driver_master(DRIVER_ANY); > + igt_enable_connectors(); > + kmstest_set_vt_graphics_mode(); > + igt_display_init(&display, display.drm_fd); > + igt_require(display.is_atomic); > + > + for_each_pipe_with_valid_output(&display, pipe, output) > + valid_outputs++; > + > + igt_require_f(valid_outputs, "no valid crtc/connector combinations found\n"); > + } > + > + res = drmModeGetResources(display.drm_fd); > + kmstest_unset_all_crtcs(display.drm_fd, res); ^Why is either needed? And why outside fixture? > + > + for_each_pipe_with_valid_output(&display, pipe, output) > + test_allow_modeset(&display, pipe, output); > + > + igt_fixture { > + igt_display_fini(&display); > + igt_reset_connectors(); > + drmModeFreeResources(res); > + } > + > + igt_exit(); > +} This tests one source of allow_modeset. There are 2 more: Changing only the active property, which is similar to toggling dpms. Assigning a different connector to the current crtc I think the active property should be tested too at least. ~Maarten
On Tue, 2017-04-04 at 14:28 +0200, Maarten Lankhorst wrote: > Hey, > > Op 04-04-17 om 13:59 schreef Mika Kahola: > > > > When doing a full atomic modeset, kernel should fail if the flag > > DRM_MODE_ATOMIC_ALLOW_MODESET is not set. Let's add this test as > > part of > > Intel-GPU-Tools. The test procedure is the following: > > > > - Try to do atomic commit without DRM_MODE_ATOMIC_ALLOW_MODESET > > flag. > > Kernel should reject this request. > > - Do full modeset > > - Enable DRM_MODE_ATOMIC_ALLOW_MODESET and try to do atmic commit. > > Kernel should now allow atomic modeset. > > > > For: VIZ-6955 > > > > Signed-off-by: Mika Kahola <mika.kahola@intel.com> > > --- > > tests/Makefile.sources | 1 + > > tests/kms_atomic_allow_modeset.c | 133 > > +++++++++++++++++++++++++++++++++++++++ > > 2 files changed, 134 insertions(+) > > create mode 100644 tests/kms_atomic_allow_modeset.c > > > > diff --git a/tests/Makefile.sources b/tests/Makefile.sources > > index 45c21a0..d3ee629 100644 > > --- a/tests/Makefile.sources > > +++ b/tests/Makefile.sources > > @@ -94,6 +94,7 @@ TESTS_progs_M = \ > > kms_addfb_basic \ > > kms_atomic \ > > kms_atomic_transition \ > > + kms_atomic_allow_modeset \ > > kms_busy \ > > kms_ccs \ > > kms_chv_cursor_fail \ > > diff --git a/tests/kms_atomic_allow_modeset.c > > b/tests/kms_atomic_allow_modeset.c > > new file mode 100644 > > index 0000000..b4d8c16 > > --- /dev/null > > +++ b/tests/kms_atomic_allow_modeset.c > > @@ -0,0 +1,133 @@ > > +/* > > + * Copyright © 2017 Intel Corporation > > + * > > + * Permission is hereby granted, free of charge, to any person > > obtaining a > > + * copy of this software and associated documentation files (the > > "Software"), > > + * to deal in the Software without restriction, including without > > limitation > > + * the rights to use, copy, modify, merge, publish, distribute, > > sublicense, > > + * and/or sell copies of the Software, and to permit persons to > > whom the > > + * Software is furnished to do so, subject to the following > > conditions: > > + * > > + * The above copyright notice and this permission notice > > (including the next > > + * paragraph) shall be included in all copies or substantial > > portions of the > > + * Software. > > + * > > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, > > EXPRESS OR > > + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF > > MERCHANTABILITY, > > + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO > > EVENT SHALL > > + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, > > DAMAGES OR OTHER > > + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, > > ARISING > > + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR > > OTHER DEALINGS > > + * IN THE SOFTWARE. > > + * > > + */ > > + > > +#include "igt.h" > > + > > +IGT_TEST_DESCRIPTION("Test that kernel rejects atomic modeset if > > ALLOW_MODESET flag is not set"); > > + > > +static void > > +test_init(igt_display_t *display, struct igt_fb *fb, igt_output_t > > *output) > > +{ > > + drmModeModeInfo *mode; > > + igt_plane_t *primary; > > + int id; > > + > > + mode = igt_output_get_mode(output); > > + > > + id = igt_create_pattern_fb(display->drm_fd, > > + mode->hdisplay, mode->vdisplay, > > + DRM_FORMAT_XRGB8888, > > + LOCAL_I915_FORMAT_MOD_X_TILED, > > + fb); > > + igt_assert(id); > > + > > + primary = igt_output_get_plane_type(output, > > DRM_PLANE_TYPE_PRIMARY); > > + igt_plane_set_fb(primary, fb); > > +} > > + > > +static void > > +test_finish(igt_display_t *display, struct igt_fb *fb, > > igt_output_t *output) > > +{ > > + igt_plane_t *primary; > > + > > + primary = igt_output_get_plane_type(output, > > DRM_PLANE_TYPE_PRIMARY); > > + > > + igt_remove_fb(display->drm_fd, fb); > > + > > + igt_plane_set_fb(primary, NULL); > > + igt_output_set_pipe(output, PIPE_ANY); > > + > > + igt_display_commit2(display, COMMIT_ATOMIC); > > +} > > + > > +static void > > +test_allow_modeset(igt_display_t *display, enum pipe pipe, > > igt_output_t *output) > > +{ > > + struct igt_fb fb; > > + int flags = DRM_MODE_ATOMIC_NONBLOCK; > > + int ret; > > + > > + igt_output_set_pipe(output, pipe); > > + > > + test_init(display, &fb, output); > > + > > + /* > > + * Try to do atomic commit without > > DRM_MODE_ATOMIC_ALLOW_MODESET flag. > > + * Kernel should reject this request. > > + */ > > + ret = igt_display_try_commit_atomic(display, flags, NULL); > > + igt_assert_eq(ret, -EINVAL); > > + > > + /* do modeset */ > > + igt_output_set_pipe(output, pipe); > > + > > + /* > > + * Try to do atomic commit with > > DRM_MODE_ATOMIC_ALLOW_MODESET flag set. > > + * The kernel should now accept this request. > > + */ > > + flags |= DRM_MODE_ATOMIC_ALLOW_MODESET; > > + ret = igt_display_try_commit_atomic(display, flags, NULL); > > + igt_assert_eq(ret, 0); > > + > > + test_finish(display, &fb, output); > > +} > > + > > +igt_simple_main > > +{ > > + igt_output_t *output; > > + igt_display_t display; > > + drmModeResPtr res; > > + enum pipe pipe; > > + > > + igt_skip_on_simulation(); > > + > > + igt_fixture { > > + int valid_outputs = 0; > > + > > + display.drm_fd = > > drm_open_driver_master(DRIVER_ANY); > > + igt_enable_connectors(); > > + kmstest_set_vt_graphics_mode(); > > + igt_display_init(&display, display.drm_fd); > > + igt_require(display.is_atomic); > > + > > + for_each_pipe_with_valid_output(&display, pipe, > > output) > > + valid_outputs++; > > + > > + igt_require_f(valid_outputs, "no valid > > crtc/connector combinations found\n"); > > + } > > + > > + res = drmModeGetResources(display.drm_fd); > > + kmstest_unset_all_crtcs(display.drm_fd, res); > ^Why is either needed? And why outside fixture? Connector testing seems to need this. I'll move this inside igt_fixture as that is the better place for these. > > > > + > > + for_each_pipe_with_valid_output(&display, pipe, output) > > + test_allow_modeset(&display, pipe, output); > > + > > + igt_fixture { > > + igt_display_fini(&display); > > + igt_reset_connectors(); > > + drmModeFreeResources(res); > > + } > > + > > + igt_exit(); > > +} > This tests one source of allow_modeset. There are 2 more: > Changing only the active property, which is similar to toggling dpms. > Assigning a different connector to the current crtc > > I think the active property should be tested too at least. Ok. I'll add active property testing as one of the subtests. > > ~Maarten >
diff --git a/tests/Makefile.sources b/tests/Makefile.sources index 45c21a0..d3ee629 100644 --- a/tests/Makefile.sources +++ b/tests/Makefile.sources @@ -94,6 +94,7 @@ TESTS_progs_M = \ kms_addfb_basic \ kms_atomic \ kms_atomic_transition \ + kms_atomic_allow_modeset \ kms_busy \ kms_ccs \ kms_chv_cursor_fail \ diff --git a/tests/kms_atomic_allow_modeset.c b/tests/kms_atomic_allow_modeset.c new file mode 100644 index 0000000..b4d8c16 --- /dev/null +++ b/tests/kms_atomic_allow_modeset.c @@ -0,0 +1,133 @@ +/* + * Copyright © 2017 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + */ + +#include "igt.h" + +IGT_TEST_DESCRIPTION("Test that kernel rejects atomic modeset if ALLOW_MODESET flag is not set"); + +static void +test_init(igt_display_t *display, struct igt_fb *fb, igt_output_t *output) +{ + drmModeModeInfo *mode; + igt_plane_t *primary; + int id; + + mode = igt_output_get_mode(output); + + id = igt_create_pattern_fb(display->drm_fd, + mode->hdisplay, mode->vdisplay, + DRM_FORMAT_XRGB8888, + LOCAL_I915_FORMAT_MOD_X_TILED, + fb); + igt_assert(id); + + primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY); + igt_plane_set_fb(primary, fb); +} + +static void +test_finish(igt_display_t *display, struct igt_fb *fb, igt_output_t *output) +{ + igt_plane_t *primary; + + primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY); + + igt_remove_fb(display->drm_fd, fb); + + igt_plane_set_fb(primary, NULL); + igt_output_set_pipe(output, PIPE_ANY); + + igt_display_commit2(display, COMMIT_ATOMIC); +} + +static void +test_allow_modeset(igt_display_t *display, enum pipe pipe, igt_output_t *output) +{ + struct igt_fb fb; + int flags = DRM_MODE_ATOMIC_NONBLOCK; + int ret; + + igt_output_set_pipe(output, pipe); + + test_init(display, &fb, output); + + /* + * Try to do atomic commit without DRM_MODE_ATOMIC_ALLOW_MODESET flag. + * Kernel should reject this request. + */ + ret = igt_display_try_commit_atomic(display, flags, NULL); + igt_assert_eq(ret, -EINVAL); + + /* do modeset */ + igt_output_set_pipe(output, pipe); + + /* + * Try to do atomic commit with DRM_MODE_ATOMIC_ALLOW_MODESET flag set. + * The kernel should now accept this request. + */ + flags |= DRM_MODE_ATOMIC_ALLOW_MODESET; + ret = igt_display_try_commit_atomic(display, flags, NULL); + igt_assert_eq(ret, 0); + + test_finish(display, &fb, output); +} + +igt_simple_main +{ + igt_output_t *output; + igt_display_t display; + drmModeResPtr res; + enum pipe pipe; + + igt_skip_on_simulation(); + + igt_fixture { + int valid_outputs = 0; + + display.drm_fd = drm_open_driver_master(DRIVER_ANY); + igt_enable_connectors(); + kmstest_set_vt_graphics_mode(); + igt_display_init(&display, display.drm_fd); + igt_require(display.is_atomic); + + for_each_pipe_with_valid_output(&display, pipe, output) + valid_outputs++; + + igt_require_f(valid_outputs, "no valid crtc/connector combinations found\n"); + } + + res = drmModeGetResources(display.drm_fd); + kmstest_unset_all_crtcs(display.drm_fd, res); + + for_each_pipe_with_valid_output(&display, pipe, output) + test_allow_modeset(&display, pipe, output); + + igt_fixture { + igt_display_fini(&display); + igt_reset_connectors(); + drmModeFreeResources(res); + } + + igt_exit(); +}
When doing a full atomic modeset, kernel should fail if the flag DRM_MODE_ATOMIC_ALLOW_MODESET is not set. Let's add this test as part of Intel-GPU-Tools. The test procedure is the following: - Try to do atomic commit without DRM_MODE_ATOMIC_ALLOW_MODESET flag. Kernel should reject this request. - Do full modeset - Enable DRM_MODE_ATOMIC_ALLOW_MODESET and try to do atmic commit. Kernel should now allow atomic modeset. For: VIZ-6955 Signed-off-by: Mika Kahola <mika.kahola@intel.com> --- tests/Makefile.sources | 1 + tests/kms_atomic_allow_modeset.c | 133 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 134 insertions(+) create mode 100644 tests/kms_atomic_allow_modeset.c