* [igt-dev] [PATCH i-g-t 0/2] test/kms: Add support for display with non-contiguous pipes @ 2020-06-03 20:55 Mohammed Khajapasha 2020-06-03 20:55 ` [igt-dev] [PATCH i-g-t 1/2] lib/igt_kms: Set pipe enum name to a pipe from drm pipe Mohammed Khajapasha 2020-06-03 20:55 ` [igt-dev] [PATCH i-g-t 2/2] test/kms: In static iteration skip the testcases for disable pipes Mohammed Khajapasha 0 siblings, 2 replies; 5+ messages in thread From: Mohammed Khajapasha @ 2020-06-03 20:55 UTC (permalink / raw) To: suresh.kumar.kurmi, kishore.kunche, petri.latvala, mohammed.khajapasha, igt-dev add support for display with non-contiguous pipes. Mohammed Khajapasha (2): lib/igt_kms: Set pipe enum name to a pipe from drm pipe test/kms: In static iteration skip the testcases for disable pipes lib/igt_core.h | 22 ++++++++++++++++++++++ lib/igt_kms.c | 13 +++++++++---- tests/kms_color.c | 2 +- tests/kms_color_chamelium.c | 2 +- tests/kms_concurrent.c | 2 +- tests/kms_cursor_legacy.c | 2 +- tests/kms_pipe_crc_basic.c | 2 +- tests/kms_plane.c | 2 +- tests/kms_plane_cursor.c | 3 +++ tests/kms_plane_lowres.c | 2 +- tests/kms_plane_multiple.c | 2 +- tests/kms_universal_plane.c | 2 +- 12 files changed, 43 insertions(+), 13 deletions(-) -- 2.24.1 _______________________________________________ igt-dev mailing list igt-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/igt-dev ^ permalink raw reply [flat|nested] 5+ messages in thread
* [igt-dev] [PATCH i-g-t 1/2] lib/igt_kms: Set pipe enum name to a pipe from drm pipe 2020-06-03 20:55 [igt-dev] [PATCH i-g-t 0/2] test/kms: Add support for display with non-contiguous pipes Mohammed Khajapasha @ 2020-06-03 20:55 ` Mohammed Khajapasha 2020-06-03 20:55 ` [igt-dev] [PATCH i-g-t 2/2] test/kms: In static iteration skip the testcases for disable pipes Mohammed Khajapasha 1 sibling, 0 replies; 5+ messages in thread From: Mohammed Khajapasha @ 2020-06-03 20:55 UTC (permalink / raw) To: suresh.kumar.kurmi, kishore.kunche, petri.latvala, mohammed.khajapasha, igt-dev set the pipe enum name to igt pipe from drm pipe, in case of non-contiguous pipes in display, the igt pipes cann't be same as enabled pipes in kernel. Signed-off-by: Mohammed Khajapasha <mohammed.khajapasha@intel.com> --- lib/igt_kms.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/igt_kms.c b/lib/igt_kms.c index afef5939..a42a44c5 100644 --- a/lib/igt_kms.c +++ b/lib/igt_kms.c @@ -1958,10 +1958,16 @@ void igt_display_require(igt_display_t *display, int drm_fd) int p = 1; int j, type; uint8_t last_plane = 0, n_planes = 0; + struct drm_i915_get_pipe_from_crtc_id get_pipe; pipe->crtc_id = resources->crtcs[i]; pipe->display = display; - pipe->pipe = i; + /* Get right pipe enum from kernel for a pipe */ + get_pipe.pipe = 0; + get_pipe.crtc_id = pipe->crtc_id; + do_ioctl(display->drm_fd, + DRM_IOCTL_I915_GET_PIPE_FROM_CRTC_ID, &get_pipe); + pipe->pipe = get_pipe.pipe; pipe->plane_cursor = -1; pipe->plane_primary = -1; pipe->planes = NULL; -- 2.24.1 _______________________________________________ igt-dev mailing list igt-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/igt-dev ^ permalink raw reply related [flat|nested] 5+ messages in thread
* [igt-dev] [PATCH i-g-t 2/2] test/kms: In static iteration skip the testcases for disable pipes 2020-06-03 20:55 [igt-dev] [PATCH i-g-t 0/2] test/kms: Add support for display with non-contiguous pipes Mohammed Khajapasha 2020-06-03 20:55 ` [igt-dev] [PATCH i-g-t 1/2] lib/igt_kms: Set pipe enum name to a pipe from drm pipe Mohammed Khajapasha @ 2020-06-03 20:55 ` Mohammed Khajapasha 1 sibling, 0 replies; 5+ messages in thread From: Mohammed Khajapasha @ 2020-06-03 20:55 UTC (permalink / raw) To: suresh.kumar.kurmi, kishore.kunche, petri.latvala, mohammed.khajapasha, igt-dev In non-contiguous display pipes, the static iteration of pipes in the testcases can cause iteration over disabled pipes and segmentation fault, hence skip the testcase for disable pipes. Signed-off-by: Mohammed Khajapasha <mohammed.khajapasha@intel.com> --- lib/igt_core.h | 22 ++++++++++++++++++++++ lib/igt_kms.c | 5 ++--- tests/kms_color.c | 2 +- tests/kms_color_chamelium.c | 2 +- tests/kms_concurrent.c | 2 +- tests/kms_cursor_legacy.c | 2 +- tests/kms_pipe_crc_basic.c | 2 +- tests/kms_plane.c | 2 +- tests/kms_plane_cursor.c | 3 +++ tests/kms_plane_lowres.c | 2 +- tests/kms_plane_multiple.c | 2 +- tests/kms_universal_plane.c | 2 +- 12 files changed, 36 insertions(+), 12 deletions(-) diff --git a/lib/igt_core.h b/lib/igt_core.h index c5871520..2cd483e8 100644 --- a/lib/igt_core.h +++ b/lib/igt_core.h @@ -987,6 +987,28 @@ void igt_describe_f(const char *fmt, ...); else igt_debug("Test requirement passed: %s\n", #expr); \ } while (0) +/** +* igt_require_pipe: +* @display: pointer to igt_display_t +* @pipe: pipe which need to check +* +* Skip a (sub-)test if the pipe not enabled. +* +* Should be used everywhere where a test checks pipe and skip +* test when pipe is not enabled. +*/ +#define igt_require_pipe(display, p) \ + do { \ + bool expr = 0; \ + for (int n = 0; n < igt_display_get_n_pipes(display); n++) { \ + if (((display)->pipes[(n)].pipe) == p) { \ + expr = true; \ + break; \ + } \ + } \ + igt_skip_on_f(!expr, "Pipe %s does not exist.\n", kmstest_pipe_name(p)); \ + } while (0) + /** * igt_skip_on: * @expr: condition to test diff --git a/lib/igt_kms.c b/lib/igt_kms.c index a42a44c5..397127e0 100644 --- a/lib/igt_kms.c +++ b/lib/igt_kms.c @@ -2136,8 +2136,7 @@ void igt_display_require_output_on_pipe(igt_display_t *display, enum pipe pipe) { igt_output_t *output; - igt_skip_on_f(pipe >= igt_display_get_n_pipes(display), - "Pipe %s does not exist.\n", kmstest_pipe_name(pipe)); + igt_require_pipe(display, pipe); for_each_valid_output_on_pipe(display, pipe, output) return; @@ -2486,7 +2485,7 @@ igt_output_t *igt_get_single_output_for_pipe(igt_display_t *display, enum pipe p igt_output_t *chosen_outputs[display->n_pipes]; igt_assert(pipe != PIPE_NONE); - igt_require(pipe < display->n_pipes); + igt_require_pipe(display, pipe); __igt_pipe_populate_outputs(display, chosen_outputs); diff --git a/tests/kms_color.c b/tests/kms_color.c index 7f2fbd4a..8c50ee66 100644 --- a/tests/kms_color.c +++ b/tests/kms_color.c @@ -628,7 +628,7 @@ run_tests_for_pipe(data_t *data, enum pipe p) igt_fixture { igt_require_pipe_crc(data->drm_fd); - igt_require(p < data->display.n_pipes); + igt_require_pipe(&data->display, p); pipe = &data->display.pipes[p]; igt_require(pipe->n_planes >= 0); diff --git a/tests/kms_color_chamelium.c b/tests/kms_color_chamelium.c index 7f5a911c..310c021a 100644 --- a/tests/kms_color_chamelium.c +++ b/tests/kms_color_chamelium.c @@ -519,7 +519,7 @@ run_tests_for_pipe(data_t *data, enum pipe p) igt_fixture { - igt_require(p < data->display.n_pipes); + igt_require_pipe(&data->display, p); pipe = &data->display.pipes[p]; igt_require(pipe->n_planes >= 0); diff --git a/tests/kms_concurrent.c b/tests/kms_concurrent.c index 89016563..f332d332 100644 --- a/tests/kms_concurrent.c +++ b/tests/kms_concurrent.c @@ -320,7 +320,7 @@ run_tests_for_pipe(data_t *data, enum pipe pipe) igt_fixture { int valid_tests = 0; - igt_skip_on(pipe >= data->display.n_pipes); + igt_require_pipe(&data->display, pipe); igt_require(data->display.pipes[pipe].n_planes > 0); for_each_valid_output_on_pipe(&data->display, pipe, output) diff --git a/tests/kms_cursor_legacy.c b/tests/kms_cursor_legacy.c index 9306e54b..f544a6c9 100644 --- a/tests/kms_cursor_legacy.c +++ b/tests/kms_cursor_legacy.c @@ -1389,7 +1389,7 @@ igt_main errno = 0; igt_fixture { - igt_skip_on(n >= display.n_pipes); + igt_require_pipe(&display, n); } igt_subtest_f("pipe-%s-single-bo", kmstest_pipe_name(n)) diff --git a/tests/kms_pipe_crc_basic.c b/tests/kms_pipe_crc_basic.c index d169b7bd..ae6cb3e9 100644 --- a/tests/kms_pipe_crc_basic.c +++ b/tests/kms_pipe_crc_basic.c @@ -71,7 +71,7 @@ static void test_read_crc(data_t *data, enum pipe pipe, unsigned flags) igt_crc_t *crcs = NULL; int c, j; - igt_skip_on(pipe >= data->display.n_pipes); + igt_require_pipe(display, pipe); igt_require_f(output, "No connector found for pipe %s\n", kmstest_pipe_name(pipe)); diff --git a/tests/kms_plane.c b/tests/kms_plane.c index c6ead813..7d3f95d1 100644 --- a/tests/kms_plane.c +++ b/tests/kms_plane.c @@ -940,7 +940,7 @@ static void run_tests_for_pipe_plane(data_t *data, enum pipe pipe) { igt_fixture { - igt_skip_on(pipe >= data->display.n_pipes); + igt_require_pipe(&data->display, pipe); igt_require(data->display.pipes[pipe].n_planes > 0); } diff --git a/tests/kms_plane_cursor.c b/tests/kms_plane_cursor.c index adcdf5e8..4ab10204 100644 --- a/tests/kms_plane_cursor.c +++ b/tests/kms_plane_cursor.c @@ -317,6 +317,9 @@ igt_main } for_each_pipe_static(pipe) + igt_fixture { + igt_require_pipe(&data.display, pipe); + } for (i = 0; i < ARRAY_SIZE(cursor_sizes); ++i) { int size = cursor_sizes[i]; diff --git a/tests/kms_plane_lowres.c b/tests/kms_plane_lowres.c index 012b25e3..a1f1fade 100644 --- a/tests/kms_plane_lowres.c +++ b/tests/kms_plane_lowres.c @@ -259,7 +259,7 @@ test_planes_on_pipe(data_t *data, uint64_t modifier) igt_plane_t *plane; unsigned tested = 0; - igt_skip_on(data->pipe >= data->display.n_pipes); + igt_require_pipe(&data->display, data->pipe); igt_display_require_output_on_pipe(&data->display, data->pipe); igt_skip_on(!igt_display_has_format_mod(&data->display, DRM_FORMAT_XRGB8888, modifier)); diff --git a/tests/kms_plane_multiple.c b/tests/kms_plane_multiple.c index 6cf060b3..520ec1fe 100644 --- a/tests/kms_plane_multiple.c +++ b/tests/kms_plane_multiple.c @@ -378,7 +378,7 @@ static void run_tests_for_pipe(data_t *data, enum pipe pipe) { igt_fixture { - igt_skip_on(pipe >= data->display.n_pipes); + igt_require_pipe(&data->display, pipe); igt_require(data->display.pipes[pipe].n_planes > 0); } diff --git a/tests/kms_universal_plane.c b/tests/kms_universal_plane.c index 676be633..cba54c4c 100644 --- a/tests/kms_universal_plane.c +++ b/tests/kms_universal_plane.c @@ -750,7 +750,7 @@ run_tests_for_pipe(data_t *data, enum pipe pipe) igt_fixture { int valid_tests = 0; - igt_skip_on(pipe >= data->display.n_pipes); + igt_require_pipe(&data->display, pipe); for_each_valid_output_on_pipe(&data->display, pipe, output) valid_tests++; -- 2.24.1 _______________________________________________ igt-dev mailing list igt-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/igt-dev ^ permalink raw reply related [flat|nested] 5+ messages in thread
* [igt-dev] [PATCH i-g-t 0/2] test/kms: Add support for display with non-contiguous pipes @ 2020-06-03 21:05 Mohammed Khajapasha 2020-06-03 21:05 ` [igt-dev] [PATCH i-g-t 1/2] lib/igt_kms: Set pipe enum name to a pipe from drm pipe Mohammed Khajapasha 0 siblings, 1 reply; 5+ messages in thread From: Mohammed Khajapasha @ 2020-06-03 21:05 UTC (permalink / raw) To: igt-dev, suresh.kumar.kurmi, kishore.kunche, petri.latvala, mohammed.khajapasha, arkadiusz.hiler add support for display with non-contiguous pipes. Mohammed Khajapasha (2): lib/igt_kms: Set pipe enum name to a pipe from drm pipe test/kms: In static iteration skip the testcases for disable pipes lib/igt_core.h | 22 ++++++++++++++++++++++ lib/igt_kms.c | 13 +++++++++---- tests/kms_color.c | 2 +- tests/kms_color_chamelium.c | 2 +- tests/kms_concurrent.c | 2 +- tests/kms_cursor_legacy.c | 2 +- tests/kms_pipe_crc_basic.c | 2 +- tests/kms_plane.c | 2 +- tests/kms_plane_cursor.c | 3 +++ tests/kms_plane_lowres.c | 2 +- tests/kms_plane_multiple.c | 2 +- tests/kms_universal_plane.c | 2 +- 12 files changed, 43 insertions(+), 13 deletions(-) -- 2.24.1 _______________________________________________ igt-dev mailing list igt-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/igt-dev ^ permalink raw reply [flat|nested] 5+ messages in thread
* [igt-dev] [PATCH i-g-t 1/2] lib/igt_kms: Set pipe enum name to a pipe from drm pipe 2020-06-03 21:05 [igt-dev] [PATCH i-g-t 0/2] test/kms: Add support for display with non-contiguous pipes Mohammed Khajapasha @ 2020-06-03 21:05 ` Mohammed Khajapasha 2020-06-04 14:50 ` Ville Syrjälä 0 siblings, 1 reply; 5+ messages in thread From: Mohammed Khajapasha @ 2020-06-03 21:05 UTC (permalink / raw) To: igt-dev, suresh.kumar.kurmi, kishore.kunche, petri.latvala, mohammed.khajapasha, arkadiusz.hiler set the pipe enum name to igt pipe from drm pipe, in case of non-contiguous pipes in display, the igt pipes cann't be same as enabled pipes in kernel. Signed-off-by: Mohammed Khajapasha <mohammed.khajapasha@intel.com> --- lib/igt_kms.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/igt_kms.c b/lib/igt_kms.c index afef5939..a42a44c5 100644 --- a/lib/igt_kms.c +++ b/lib/igt_kms.c @@ -1958,10 +1958,16 @@ void igt_display_require(igt_display_t *display, int drm_fd) int p = 1; int j, type; uint8_t last_plane = 0, n_planes = 0; + struct drm_i915_get_pipe_from_crtc_id get_pipe; pipe->crtc_id = resources->crtcs[i]; pipe->display = display; - pipe->pipe = i; + /* Get right pipe enum from kernel for a pipe */ + get_pipe.pipe = 0; + get_pipe.crtc_id = pipe->crtc_id; + do_ioctl(display->drm_fd, + DRM_IOCTL_I915_GET_PIPE_FROM_CRTC_ID, &get_pipe); + pipe->pipe = get_pipe.pipe; pipe->plane_cursor = -1; pipe->plane_primary = -1; pipe->planes = NULL; -- 2.24.1 _______________________________________________ igt-dev mailing list igt-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/igt-dev ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [igt-dev] [PATCH i-g-t 1/2] lib/igt_kms: Set pipe enum name to a pipe from drm pipe 2020-06-03 21:05 ` [igt-dev] [PATCH i-g-t 1/2] lib/igt_kms: Set pipe enum name to a pipe from drm pipe Mohammed Khajapasha @ 2020-06-04 14:50 ` Ville Syrjälä 0 siblings, 0 replies; 5+ messages in thread From: Ville Syrjälä @ 2020-06-04 14:50 UTC (permalink / raw) To: Mohammed Khajapasha Cc: igt-dev, petri.latvala, kishore.kunche, suresh.kumar.kurmi On Thu, Jun 04, 2020 at 02:35:05AM +0530, Mohammed Khajapasha wrote: > set the pipe enum name to igt pipe from drm pipe, > in case of non-contiguous pipes in display, the igt pipes cann't > be same as enabled pipes in kernel. > > Signed-off-by: Mohammed Khajapasha <mohammed.khajapasha@intel.com> > --- > lib/igt_kms.c | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/lib/igt_kms.c b/lib/igt_kms.c > index afef5939..a42a44c5 100644 > --- a/lib/igt_kms.c > +++ b/lib/igt_kms.c > @@ -1958,10 +1958,16 @@ void igt_display_require(igt_display_t *display, int drm_fd) > int p = 1; > int j, type; > uint8_t last_plane = 0, n_planes = 0; > + struct drm_i915_get_pipe_from_crtc_id get_pipe; > > pipe->crtc_id = resources->crtcs[i]; > pipe->display = display; > - pipe->pipe = i; > + /* Get right pipe enum from kernel for a pipe */ > + get_pipe.pipe = 0; > + get_pipe.crtc_id = pipe->crtc_id; > + do_ioctl(display->drm_fd, > + DRM_IOCTL_I915_GET_PIPE_FROM_CRTC_ID, &get_pipe); > + pipe->pipe = get_pipe.pipe; This looks like it would break everything that currently assumes pipe->pipe will match the index. I have a feeling that if we aren't going to do the rename from pipe to crtc (or whatever) then we should just add a .hw_pipe which reflects the actual hardware pipe used. Then any test which relies on hw specific things can examine that instead. Also reviewing all the tests for such usages of pipe is going to be some amount of work I imagine. And this still wouldn't fix the problem of the logs saying eg. pipe B when in fact it's hw pipe C. But I don't know if there's any trivial solution for that. As for the implementation, this needs an i915 check so we don't blow up on other drivers when using that i915 specific ioctl. > pipe->plane_cursor = -1; > pipe->plane_primary = -1; > pipe->planes = NULL; > -- > 2.24.1 > > _______________________________________________ > igt-dev mailing list > igt-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/igt-dev -- Ville Syrjälä Intel _______________________________________________ igt-dev mailing list igt-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/igt-dev ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2020-06-04 14:50 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2020-06-03 20:55 [igt-dev] [PATCH i-g-t 0/2] test/kms: Add support for display with non-contiguous pipes Mohammed Khajapasha 2020-06-03 20:55 ` [igt-dev] [PATCH i-g-t 1/2] lib/igt_kms: Set pipe enum name to a pipe from drm pipe Mohammed Khajapasha 2020-06-03 20:55 ` [igt-dev] [PATCH i-g-t 2/2] test/kms: In static iteration skip the testcases for disable pipes Mohammed Khajapasha -- strict thread matches above, loose matches on Subject: below -- 2020-06-03 21:05 [igt-dev] [PATCH i-g-t 0/2] test/kms: Add support for display with non-contiguous pipes Mohammed Khajapasha 2020-06-03 21:05 ` [igt-dev] [PATCH i-g-t 1/2] lib/igt_kms: Set pipe enum name to a pipe from drm pipe Mohammed Khajapasha 2020-06-04 14:50 ` Ville Syrjälä
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox