* [PATCH i-g-t 0/4] revamp big joiner test
@ 2024-02-29 18:10 Kunal Joshi
2024-02-29 18:10 ` [PATCH i-g-t 1/4] lib/igt_kms: move bigjoiner_mode_found to lib Kunal Joshi
` (5 more replies)
0 siblings, 6 replies; 11+ messages in thread
From: Kunal Joshi @ 2024-02-29 18:10 UTC (permalink / raw)
To: igt-dev; +Cc: Kunal Joshi
big joiner outputs are statically assigned to pipe,
assign dynamically also add support for forcing
joiner, support for forcing joiner was introduced with
below kmd patch
drm/i915: Add bigjoiner force enable option to debugfs
Kunal Joshi (4):
lib/igt_kms: move bigjoiner_mode_found to lib
lib/igt_kms: add helpers to enable/disable force joiner
tests/intel/kms_big_joiner: revamp kms_big_joiner
tests/intel-ci/fast-feedback: HAX PATCH DO NOT MERGE
lib/igt_kms.c | 73 ++++
lib/igt_kms.h | 4 +
tests/intel-ci/fast-feedback.testlist | 5 +
tests/intel/kms_big_joiner.c | 503 ++++++++++++++------------
4 files changed, 351 insertions(+), 234 deletions(-)
--
2.25.1
^ permalink raw reply [flat|nested] 11+ messages in thread* [PATCH i-g-t 1/4] lib/igt_kms: move bigjoiner_mode_found to lib 2024-02-29 18:10 [PATCH i-g-t 0/4] revamp big joiner test Kunal Joshi @ 2024-02-29 18:10 ` Kunal Joshi 2024-02-29 18:10 ` [PATCH i-g-t 2/4] lib/igt_kms: add helpers to enable/disable force joiner Kunal Joshi ` (4 subsequent siblings) 5 siblings, 0 replies; 11+ messages in thread From: Kunal Joshi @ 2024-02-29 18:10 UTC (permalink / raw) To: igt-dev; +Cc: Kunal Joshi, Karthik B S, Bhanuprakash Modem move bigjoiner_mode_found to lib Cc: Karthik B S <karthik.b.s@intel.com> Cc: Bhanuprakash Modem <bhanuprakash.modem@intel.com> Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com> --- lib/igt_kms.c | 25 +++++++++++++++++++++++++ lib/igt_kms.h | 2 ++ tests/intel/kms_big_joiner.c | 14 +------------- 3 files changed, 28 insertions(+), 13 deletions(-) diff --git a/lib/igt_kms.c b/lib/igt_kms.c index 1b4d0d761..89956b9d5 100644 --- a/lib/igt_kms.c +++ b/lib/igt_kms.c @@ -6142,6 +6142,31 @@ bool igt_bigjoiner_possible(drmModeModeInfo *mode, int max_dotclock) mode->clock > max_dotclock); } +/** + * bigjoiner_mode_found: + * @connector: libdrm connector + * @sort_method: comparator method + * @mode: libdrm mode + * + * Bigjoiner will come in to the picture when the + * resolution > 5K or clock > max-dot-clock. + * + * Returns: True if big joiner found in connector modes + */ +bool bigjoiner_mode_found(int drm_fd, drmModeConnector *connector, + int max_dotclock) +{ + bool found = false; + + igt_sort_connector_modes(connector, sort_drm_modes_by_res_dsc); + found = igt_bigjoiner_possible(&connector->modes[0], max_dotclock); + if (!found) { + igt_sort_connector_modes(connector, sort_drm_modes_by_clk_dsc); + found = igt_bigjoiner_possible(&connector->modes[0], max_dotclock); + } + return found; +} + /** * igt_check_bigjoiner_support: * @display: a pointer to an #igt_display_t structure diff --git a/lib/igt_kms.h b/lib/igt_kms.h index b3882808b..bab8487d3 100644 --- a/lib/igt_kms.h +++ b/lib/igt_kms.h @@ -1212,6 +1212,8 @@ bool igt_max_bpc_constraint(igt_display_t *display, enum pipe pipe, igt_output_t *output, int bpc); int igt_get_max_dotclock(int fd); bool igt_bigjoiner_possible(drmModeModeInfo *mode, int max_dotclock); +bool bigjoiner_mode_found(int drm_fd, drmModeConnector *connector, + int max_dotclock); bool igt_check_bigjoiner_support(igt_display_t *display); bool igt_parse_mode_string(const char *mode_string, drmModeModeInfo *mode); bool intel_pipe_output_combo_valid(igt_display_t *display); diff --git a/tests/intel/kms_big_joiner.c b/tests/intel/kms_big_joiner.c index aba2adfbe..28678b958 100644 --- a/tests/intel/kms_big_joiner.c +++ b/tests/intel/kms_big_joiner.c @@ -199,16 +199,6 @@ static void test_dual_display(data_t *data) igt_display_commit2(display, COMMIT_ATOMIC); } -static bool bigjoiner_mode_found(drmModeConnector *connector, - int (*sort_method)(const void *, const void*), - drmModeModeInfo *mode) -{ - igt_sort_connector_modes(connector, sort_method); - *mode = connector->modes[0]; - - return igt_bigjoiner_possible(mode, max_dotclock); -} - igt_main { data_t data; @@ -235,9 +225,7 @@ igt_main * Bigjoiner will come in to the picture when the * resolution > 5K or clock > max-dot-clock. */ - found = (bigjoiner_mode_found(connector, sort_drm_modes_by_res_dsc, &mode) || - bigjoiner_mode_found(connector, sort_drm_modes_by_clk_dsc, &mode)) ? - true : false; + found = bigjoiner_mode_found(data.drm_fd, connector, max_dotclock); if (found) { data.output[count].output_id = output->id; -- 2.25.1 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH i-g-t 2/4] lib/igt_kms: add helpers to enable/disable force joiner 2024-02-29 18:10 [PATCH i-g-t 0/4] revamp big joiner test Kunal Joshi 2024-02-29 18:10 ` [PATCH i-g-t 1/4] lib/igt_kms: move bigjoiner_mode_found to lib Kunal Joshi @ 2024-02-29 18:10 ` Kunal Joshi 2024-02-29 18:10 ` [PATCH i-g-t 3/4] tests/intel/kms_big_joiner: revamp kms_big_joiner Kunal Joshi ` (3 subsequent siblings) 5 siblings, 0 replies; 11+ messages in thread From: Kunal Joshi @ 2024-02-29 18:10 UTC (permalink / raw) To: igt-dev; +Cc: Kunal Joshi, Karthik B S, Bhanuprakash Modem add helped to enable/disable force joiner and for checking current state enabled/disabled Cc: Karthik B S <karthik.b.s@intel.com> Cc: Bhanuprakash Modem <bhanuprakash.modem@intel.com> Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com> --- lib/igt_kms.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ lib/igt_kms.h | 2 ++ 2 files changed, 50 insertions(+) diff --git a/lib/igt_kms.c b/lib/igt_kms.c index 89956b9d5..e6952f56a 100644 --- a/lib/igt_kms.c +++ b/lib/igt_kms.c @@ -6242,6 +6242,54 @@ bool igt_check_bigjoiner_support(igt_display_t *display) return true; } +/** + * Checks if the force big joiner is enabled for a specific connector. + * + * @param drmfd The file descriptor of the DRM device. + * @param connector_name The name of the connector. + * Returns: + * 1 if the force big joiner is enabled, 0 if disabled, and -1 on error. + */ +int igt_check_force_bigjoiner_status(int drmfd, char *connector_name) +{ + char buf[512]; + int debugfs_fd, ret; + + debugfs_fd = igt_debugfs_connector_dir(drmfd, connector_name, O_RDONLY); + ret = igt_debugfs_simple_read(debugfs_fd, "i915_bigjoiner_force_enable", + buf, sizeof(buf)); + if (ret < 0) { + igt_info("Could not read debugfs %s\n", + strerror(-ret)); + return -1; + } + if (strstr(buf, "Bigjoiner enable: 1")) + return 1; + else if (strstr(buf, "Bigjoiner enable: 0")) + return 0; + else + return -1; +} + +/** + * Forces the enable/disable state of big joiner for a specific connector. + * + * @param drmfd The file descriptor of the DRM device. + * @param connector_name The name of the connector. + * @param enable The desired state of big joiner (true for enable, false for disable). + * Returns: + * >=0 on success, otherwise an error code. + */ +int igt_force_bigjoiner_enable(int drmfd, char *connector_name, bool enable) +{ + int debugfs_fd, ret; + + debugfs_fd = igt_debugfs_connector_dir(drmfd, connector_name, O_DIRECTORY); + ret = igt_sysfs_write(debugfs_fd, "i915_bigjoiner_force_enable", enable ? "1" : "0", 1); + close(debugfs_fd); + return ret; +} + /** * igt_parse_mode_string: * @mode_string: modeline string diff --git a/lib/igt_kms.h b/lib/igt_kms.h index bab8487d3..b28022db4 100644 --- a/lib/igt_kms.h +++ b/lib/igt_kms.h @@ -1215,6 +1215,8 @@ bool igt_bigjoiner_possible(drmModeModeInfo *mode, int max_dotclock); bool bigjoiner_mode_found(int drm_fd, drmModeConnector *connector, int max_dotclock); bool igt_check_bigjoiner_support(igt_display_t *display); +int igt_check_force_bigjoiner_status(int drmfd, char *connector_name); +int igt_force_bigjoiner_enable(int drmfd, char *connector_name, bool enable); bool igt_parse_mode_string(const char *mode_string, drmModeModeInfo *mode); bool intel_pipe_output_combo_valid(igt_display_t *display); bool igt_check_output_is_dp_mst(igt_output_t *output); -- 2.25.1 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH i-g-t 3/4] tests/intel/kms_big_joiner: revamp kms_big_joiner 2024-02-29 18:10 [PATCH i-g-t 0/4] revamp big joiner test Kunal Joshi 2024-02-29 18:10 ` [PATCH i-g-t 1/4] lib/igt_kms: move bigjoiner_mode_found to lib Kunal Joshi 2024-02-29 18:10 ` [PATCH i-g-t 2/4] lib/igt_kms: add helpers to enable/disable force joiner Kunal Joshi @ 2024-02-29 18:10 ` Kunal Joshi 2024-02-29 18:10 ` [PATCH i-g-t 4/4] tests/intel-ci/fast-feedback: HAX PATCH DO NOT MERGE Kunal Joshi ` (2 subsequent siblings) 5 siblings, 0 replies; 11+ messages in thread From: Kunal Joshi @ 2024-02-29 18:10 UTC (permalink / raw) To: igt-dev; +Cc: Kunal Joshi, Karthik B S, Bhanuprakash Modem big joiner outputs are statically assigned to pipe, assign dynamically also add support for forcing joiner, support for forcing joiner was introduced with below kmd patch drm/i915: Add bigjoiner force enable option to debugfs Cc: Karthik B S <karthik.b.s@intel.com> Cc: Bhanuprakash Modem <bhanuprakash.modem@intel.com> Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com> --- tests/intel/kms_big_joiner.c | 493 +++++++++++++++++++---------------- 1 file changed, 270 insertions(+), 223 deletions(-) diff --git a/tests/intel/kms_big_joiner.c b/tests/intel/kms_big_joiner.c index 28678b958..5f5f6f6b4 100644 --- a/tests/intel/kms_big_joiner.c +++ b/tests/intel/kms_big_joiner.c @@ -1,27 +1,6 @@ +/* SPDX-License-Identifier: MIT */ /* - * Copyright © 2020 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. - * - * Author: - * Karthik B S <karthik.b.s@intel.com> + * Copyright © 2024 Intel Corporation */ /** @@ -37,22 +16,36 @@ #include "igt.h" /** - * SUBTEST: invalid-modeset - * Description: Verify if the modeset on the adjoining pipe is rejected when - * the pipe is active with a big joiner modeset - * * SUBTEST: basic * Description: Verify the basic modeset on big joiner mode on all pipes * - * SUBTEST: 2x-modeset - * Description: Verify simultaneous modeset on 2 big joiner outputs + * SUBTEST: force-joiner-basic + * Description: Verify the basic modeset on force joiner mode on all pipes + * + * SUBTEST: invalid-modeset + * Description: Verify the invalid modeset on big joiner mode on all pipes + * + * SUBTEST: force-joiner-invalid-modeset + * Description: Verify the invalid modeset on force joiner mode on all pipes */ +IGT_TEST_DESCRIPTION("Test big joiner / force joiner"); -IGT_TEST_DESCRIPTION("Test big joiner"); +#define MAX_OUTPUTS 256 +#define MAX_COMBINATIONS 1000 +#define INVALID_TEST_OUTPUT 2 +typedef struct { + int combination[MAX_OUTPUTS]; +} Combination; -struct bigjoiner_output { - uint32_t output_id; - drmModeModeInfo mode; +enum tests { + BASIC, + INVALID_MODESET, + INVALID, +}; + +enum joiner_type { + BIG_JOINER = 1 << 1, + INVALID_JOINER = -1, }; typedef struct { @@ -60,273 +53,327 @@ typedef struct { igt_display_t display; struct igt_fb fb; int n_pipes; - enum pipe pipe1; - enum pipe pipe2; - struct bigjoiner_output output[2]; + uint64_t big_joiner_outputs[IGT_MAX_PIPES]; + uint64_t non_big_joiner_outputs[IGT_MAX_PIPES]; + uint64_t combined_outputs[IGT_MAX_PIPES]; + int big_joiner_output_count; + int non_big_joiner_output_count; + int combined_output_count; + int output_count; + enum pipe pipe_seq[IGT_MAX_PIPES]; } data_t; static int max_dotclock; -static void test_invalid_modeset(data_t *data) +static bool output_supports_force_joiner(igt_output_t *output) { - igt_output_t *output; - igt_display_t *display = &data->display; - int ret; + return output->config.connector->connector_type == + DRM_MODE_CONNECTOR_DisplayPort || + output->config.connector->connector_type == + DRM_MODE_CONNECTOR_eDP; +} - igt_info("Bigjoiner test on "); - for_each_connected_output(display, output){ - enum pipe p = output->pending_pipe; - drmModeModeInfo *mode; - igt_pipe_t *pipe; - igt_plane_t *plane; +static void generate_combinations(int output_count, int pipe_count, + int pipes_per_output, + Combination combinations[MAX_COMBINATIONS], + uint64_t *num_combinations) +{ + int i, index; + int current_combination[MAX_OUTPUTS]; - if (p == PIPE_NONE) - continue; + for (i = 0; i < output_count; ++i) + current_combination[i] = i * pipes_per_output; - mode = igt_output_get_mode(output); - igt_info("pipe:%s, output:%s, mode:", kmstest_pipe_name(p), igt_output_name(output)); - kmstest_dump_mode(mode); + while (current_combination[0] <= pipe_count - output_count * pipes_per_output) { + for (i = 0; i < output_count; ++i) + combinations[*num_combinations].combination[i] = current_combination[i]; - pipe = &display->pipes[p]; - plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY); + (*num_combinations)++; - igt_plane_set_fb(plane, &data->fb); - igt_fb_set_size(&data->fb, plane, mode->hdisplay, mode->vdisplay); - igt_plane_set_size(plane, mode->hdisplay, mode->vdisplay); - } + index = output_count - 1; + while (index >= 0 && current_combination[index] == pipe_count - (output_count - index) * pipes_per_output) + index--; - igt_assert(!igt_check_bigjoiner_support(display)); + if (index < 0) + break; - /* This commit is expectd to fail as this pipe is being used for big joiner */ - ret = igt_display_try_commit_atomic(display, DRM_MODE_ATOMIC_TEST_ONLY | - DRM_MODE_ATOMIC_ALLOW_MODESET, NULL); + current_combination[index]++; + for (i = index + 1; i < output_count; ++i) + current_combination[i] = current_combination[i - 1] + pipes_per_output; + } +} - igt_display_reset(&data->display); - igt_display_commit2(display, COMMIT_ATOMIC); +static igt_output_t *get_output_by_id(data_t *data, uint64_t output_id) +{ + igt_output_t *output; - igt_assert_lt(ret, 0); + for_each_connected_output(&data->display, output) { + if (output->id == output_id) + return output; + } + igt_assert("Output not found\n"); + return NULL; } -static void test_basic_modeset(data_t *data) +static void test_invalid_modeset_two_joiner(data_t *data, bool force_joiner, + bool combined) { + int i, j, ret; + igt_output_t *output; + uint64_t *outputs; + igt_plane_t *primary[INVALID_TEST_OUTPUT]; + igt_fb_t fb[INVALID_TEST_OUTPUT]; drmModeModeInfo *mode; - igt_output_t *output, *bigjoiner_output = NULL; - igt_display_t *display = &data->display; - igt_pipe_t *pipe; - igt_plane_t *plane; - igt_display_reset(display); + outputs = force_joiner ? data->non_big_joiner_outputs : + combined ? data->combined_outputs : data->big_joiner_outputs; - for_each_connected_output(display, output) { - if (data->output[0].output_id == output->id) { - bigjoiner_output = output; - break; + igt_display_reset(&data->display); + for (i = 0; i < data->n_pipes-1; i++) { + for (j = 0; j < INVALID_TEST_OUTPUT; j++) { + output = get_output_by_id(data, outputs[j]); + igt_assert(output); + if (force_joiner) { + igt_force_bigjoiner_enable(data->drm_fd, output->name, true); + igt_assert(igt_check_force_bigjoiner_status(data->drm_fd, output->name) == 1); + } + igt_output_set_pipe(output, data->pipe_seq[i + j]); + mode = igt_output_get_mode(output); + igt_info(" Assigning pipe %s to %s with mode %dx%d@%d%s", + kmstest_pipe_name(data->pipe_seq[i + j]), + igt_output_name(output), mode->hdisplay, + mode->vdisplay, mode->vrefresh, + j == INVALID_TEST_OUTPUT - 1 ? "\n" : ", "); + primary[j] = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY); + igt_create_pattern_fb(data->drm_fd, mode->hdisplay, mode->vdisplay, DRM_FORMAT_XRGB8888, + DRM_FORMAT_MOD_LINEAR, &fb[j]); + igt_plane_set_fb(primary[j], &fb[j]); + } + ret = igt_display_try_commit2(&data->display, COMMIT_ATOMIC); + igt_assert_f(ret != 0, "Commit shouldn't have passed\n"); + if (force_joiner) { + igt_display_reset(&data->display); + for (j = 0; j < INVALID_TEST_OUTPUT; j++) { + output = get_output_by_id(data, outputs[j]); + igt_assert(output); + igt_force_bigjoiner_enable(data->drm_fd, output->name, false); + igt_assert(igt_check_force_bigjoiner_status(data->drm_fd, output->name) == 0); + } + igt_display_commit2(&data->display, COMMIT_ATOMIC); } } - - igt_output_set_pipe(bigjoiner_output, data->pipe1); - - mode = &data->output[0].mode; - igt_output_override_mode(bigjoiner_output, mode); - - pipe = &display->pipes[data->pipe1]; - plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY); - - igt_plane_set_fb(plane, &data->fb); - igt_fb_set_size(&data->fb, plane, mode->hdisplay, mode->vdisplay); - igt_plane_set_size(plane, mode->hdisplay, mode->vdisplay); - - igt_display_commit2(display, COMMIT_ATOMIC); - - igt_output_set_pipe(bigjoiner_output, PIPE_NONE); - igt_plane_set_fb(plane, NULL); - igt_display_commit2(display, COMMIT_ATOMIC); } -static void test_dual_display(data_t *data) +static void tets_big_joiner_on_last_pipe(data_t *data, bool force_joiner) { + int i, len, ret; + uint64_t *outputs; + igt_output_t *output; + igt_plane_t *primary; + igt_fb_t fb; drmModeModeInfo *mode; - igt_output_t *output, *bigjoiner_output[2]; - igt_display_t *display = &data->display; - igt_pipe_t *pipe; - igt_plane_t *plane1, *plane2; - int count = 0; - igt_display_reset(display); + len = force_joiner ? data->non_big_joiner_output_count : data->big_joiner_output_count; + outputs = force_joiner ? data->non_big_joiner_outputs : data->big_joiner_outputs; - for_each_connected_output(display, output) { - if (data->output[count].output_id == output->id) { - bigjoiner_output[count] = output; - count++; + for (i = 0; i < len; i++) { + igt_display_reset(&data->display); + output = get_output_by_id(data, outputs[i]); + if (force_joiner) { + igt_force_bigjoiner_enable(data->drm_fd, output->name, true); + igt_assert(igt_check_force_bigjoiner_status(data->drm_fd, output->name) == 1); } - - if (count > 1) - break; + igt_output_set_pipe(output, data->pipe_seq[data->n_pipes - 1]); + mode = igt_output_get_mode(output); + igt_info(" Assigning pipe %s to %s with mode %dx%d@%d\n", + kmstest_pipe_name(data->pipe_seq[data->n_pipes - 1]), + igt_output_name(output), mode->hdisplay, + mode->vdisplay, mode->vrefresh); + primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY); + igt_create_pattern_fb(data->drm_fd, mode->hdisplay, mode->vdisplay, DRM_FORMAT_XRGB8888, + DRM_FORMAT_MOD_LINEAR, &fb); + igt_plane_set_fb(primary, &fb); + ret = igt_display_try_commit2(&data->display, COMMIT_ATOMIC); + igt_assert_f(ret != 0, "Commit shouldn't have passed\n"); } + if (force_joiner) { + for (i = 0; i < len; i++) { + output = get_output_by_id(data, outputs[i]); + igt_force_bigjoiner_enable(data->drm_fd, output->name, false); + } + igt_display_commit2(&data->display, COMMIT_ATOMIC); + } +} - igt_output_set_pipe(bigjoiner_output[0], data->pipe1); - igt_output_set_pipe(bigjoiner_output[1], data->pipe2); - - /* Set up first big joiner output on Pipe A*/ - mode = &data->output[0].mode; - igt_output_override_mode(bigjoiner_output[0], mode); - - pipe = &display->pipes[data->pipe1]; - plane1 = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY); - - igt_plane_set_fb(plane1, &data->fb); - igt_fb_set_size(&data->fb, plane1, mode->hdisplay, mode->vdisplay); - igt_plane_set_size(plane1, mode->hdisplay, mode->vdisplay); - - /* Set up second big joiner output on Pipe C*/ - mode = &data->output[1].mode; - igt_output_override_mode(bigjoiner_output[1], mode); - - pipe = &display->pipes[data->pipe2]; - plane2 = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY); - - igt_plane_set_fb(plane2, &data->fb); - igt_fb_set_size(&data->fb, plane2, mode->hdisplay, mode->vdisplay); - igt_plane_set_size(plane2, mode->hdisplay, mode->vdisplay); - - igt_display_commit2(display, COMMIT_ATOMIC); +static void test_basic_modeset(data_t *data, int num_outputs, + Combination combinations[MAX_COMBINATIONS], + uint64_t num_combinations, bool force_joiner) +{ + int i, j, ret; + igt_display_t *display = &data->display; + igt_output_t *output[num_outputs]; + igt_plane_t *primary[num_outputs]; + igt_fb_t fb[num_outputs]; + drmModeModeInfo *mode; - /* Clean up */ - igt_output_set_pipe(bigjoiner_output[0], PIPE_NONE); - igt_output_set_pipe(bigjoiner_output[1], PIPE_NONE); - igt_plane_set_fb(plane1, NULL); - igt_plane_set_fb(plane2, NULL); - igt_display_commit2(display, COMMIT_ATOMIC); + for (i = 0; i < num_combinations; i++) { + igt_display_reset(display); + for (j = 0; j < num_outputs; j++) { + output[j] = get_output_by_id(data, + force_joiner ? + data->non_big_joiner_outputs[j] : + data->big_joiner_outputs[j]); + if (force_joiner) { + igt_force_bigjoiner_enable(data->drm_fd, + output[j]->name, true); + igt_assert(igt_check_force_bigjoiner_status(data->drm_fd, + output[j]->name) == 1); + } + igt_info("Assigning pipe %d to %s%s", + data->pipe_seq[combinations[i].combination[j]], + output[j]->name, j == num_outputs - 1 ? "\n" : ", "); + igt_output_set_pipe(output[j], data->pipe_seq[combinations[i].combination[j]]); + primary[j] = igt_output_get_plane_type(output[j], DRM_PLANE_TYPE_PRIMARY); + mode = igt_output_get_mode(output[j]); + igt_create_pattern_fb(data->drm_fd, mode->hdisplay, mode->vdisplay, DRM_FORMAT_XRGB8888, + DRM_FORMAT_MOD_LINEAR, &fb[j]); + igt_plane_set_fb(primary[j], &fb[j]); + } + ret = igt_display_try_commit2(display, COMMIT_ATOMIC); + if (ret == 0) + igt_display_commit2(display, COMMIT_ATOMIC); + else + igt_assert_f(ret == 0, "Commit failed\n"); + + if (force_joiner) { + for (j = 0; j < num_outputs; j++) { + igt_display_reset(display); + igt_force_bigjoiner_enable(data->drm_fd, output[j]->name, false); + igt_assert(igt_check_force_bigjoiner_status(data->drm_fd, output[j]->name) == 0); + igt_display_commit2(&data->display, COMMIT_ATOMIC); + } + } + } } igt_main { + int i, j; data_t data; igt_output_t *output; - drmModeModeInfo mode; - int valid_output = 0, i, count = 0, j = 0; - uint16_t width = 0, height = 0; - enum pipe pipe_seq[IGT_MAX_PIPES]; + i = j = 0; igt_fixture { data.drm_fd = drm_open_driver_master(DRIVER_INTEL | DRIVER_XE); kmstest_set_vt_graphics_mode(); - igt_display_require(&data.display, data.drm_fd); igt_require(data.display.is_atomic); - max_dotclock = igt_get_max_dotclock(data.drm_fd); + data.big_joiner_output_count = 0; + data.non_big_joiner_output_count = 0; + data.combined_output_count = 0; + data.output_count = 0; for_each_connected_output(&data.display, output) { bool found = false; drmModeConnector *connector = output->config.connector; - - /* - * Bigjoiner will come in to the picture when the - * resolution > 5K or clock > max-dot-clock. - */ found = bigjoiner_mode_found(data.drm_fd, connector, max_dotclock); - if (found) { - data.output[count].output_id = output->id; - memcpy(&data.output[count].mode, &mode, sizeof(drmModeModeInfo)); - count++; - - width = max(width, mode.hdisplay); - height = max(height, mode.vdisplay); + data.big_joiner_outputs[data.big_joiner_output_count++] = output->id; + igt_output_override_mode(output, &connector->modes[0]); + } else { + if (output_supports_force_joiner(output)) { + data.non_big_joiner_outputs[data.non_big_joiner_output_count++] = output->id; + igt_sort_connector_modes(connector, sort_drm_modes_by_res_dsc); + igt_output_override_mode(output, &connector->modes[0]); + } } - valid_output++; + data.output_count++; } data.n_pipes = 0; for_each_pipe(&data.display, i) { data.n_pipes++; - pipe_seq[j] = i; + data.pipe_seq[j] = i; j++; } - - igt_require_f(count > 0, "No output with 5k+ mode (or) clock > max-dot-clock found\n"); - - igt_create_pattern_fb(data.drm_fd, width, height, DRM_FORMAT_XRGB8888, - DRM_FORMAT_MOD_LINEAR, &data.fb); } igt_describe("Verify the basic modeset on big joiner mode on all pipes"); igt_subtest_with_dynamic("basic") { - for (i = 0; i < data.n_pipes - 1; i++) { - data.pipe1 = pipe_seq[i]; - igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe_seq[i])) - test_basic_modeset(&data); + igt_require_f(data.big_joiner_output_count > 0, "Big joiner output not found\n"); + igt_require_f(data.n_pipes > 1, "Minimum of 2 pipes are required\n"); + + for (i = 0; i < data.big_joiner_output_count; i++) { + uint64_t num_combinations = 0; + Combination combinations[MAX_COMBINATIONS]; + + generate_combinations(i+1, data.n_pipes, BIG_JOINER, combinations, &num_combinations); + igt_info("Number of combinations for %d outputs and %d pipes are %ld\n", + i+1, data.n_pipes, num_combinations); + + if (num_combinations > 0) + igt_dynamic_f("%dx-big-joiner", i+1) + test_basic_modeset(&data, i+1, combinations, num_combinations, false); + else + break; } } - igt_describe("Verify if the modeset on the adjoining pipe is rejected " - "when the pipe is active with a big joiner modeset"); - igt_subtest_with_dynamic("invalid-modeset") { - data.pipe1 = pipe_seq[j - 1]; - - igt_display_reset(&data.display); - for_each_connected_output(&data.display, output) { - if (data.output[0].output_id != output->id) - continue; - - mode = data.output[0].mode; - igt_output_set_pipe(output, data.pipe1); - igt_output_override_mode(output, &mode); - - igt_dynamic_f("pipe-%s-%s", - kmstest_pipe_name(data.pipe1), - igt_output_name(output)) - test_invalid_modeset(&data); + igt_describe("Verify the basic modeset on big joiner mode on all pipes"); + igt_subtest_with_dynamic("force-joiner-basic") { + igt_require_f(data.non_big_joiner_output_count > 0, "Big joiner output not found\n"); + igt_require_f(data.n_pipes > 1, "Minimum of 2 pipes are required\n"); + + for (i = 0; i < data.non_big_joiner_output_count; i++) { + uint64_t num_combinations = 0; + Combination combinations[MAX_COMBINATIONS]; + + generate_combinations(i+1, data.n_pipes, BIG_JOINER, combinations, &num_combinations); + igt_info("Number of combinations for %d outputs and %d pipes are %ld\n", + i+1, data.n_pipes, num_combinations); + + if (num_combinations > 0) + igt_dynamic_f("%dx-joiner", i+1) + test_basic_modeset(&data, i+1, combinations, num_combinations, true); + else + break; } + } - if(valid_output > 1) { - for (i = 0; i < data.n_pipes - 1; i++) { - igt_output_t *first_output = NULL, *second_output = NULL; - - data.pipe1 = pipe_seq[i]; - data.pipe2 = pipe_seq[i + 1]; - - igt_display_reset(&data.display); - for_each_connected_output(&data.display, output) { - if (data.output[0].output_id == output->id) { - first_output = output; - mode = data.output[0].mode; + igt_subtest_with_dynamic("invalid-modeset") { + igt_require_f(data.big_joiner_output_count > 0, "Big joiner output not found\n"); + igt_require_f(data.n_pipes > 1, "Minimum of 2 pipes are required\n"); - igt_output_set_pipe(output, data.pipe1); - igt_output_override_mode(output, &mode); - } else if (second_output == NULL) { - second_output = output; - igt_output_set_pipe(output, data.pipe2); + if (data.big_joiner_output_count >= 1) + igt_dynamic_f("big_joiner_on_last_pipe") + tets_big_joiner_on_last_pipe(&data, false); - break; - } - } + if (data.big_joiner_output_count > 1) + igt_dynamic_f("invalid_combinations") + test_invalid_modeset_two_joiner(&data, false, false); - igt_dynamic_f("pipe-%s-%s-pipe-%s-%s", - kmstest_pipe_name(data.pipe1), - igt_output_name(first_output), - kmstest_pipe_name(data.pipe2), - igt_output_name(second_output)) - test_invalid_modeset(&data); - } + if (data.big_joiner_output_count == 1 && data.non_big_joiner_output_count > 0) { + data.combined_outputs[data.combined_output_count++] = data.big_joiner_outputs[0]; + data.combined_outputs[data.combined_output_count++] = data.non_big_joiner_outputs[0]; + test_invalid_modeset_two_joiner(&data, false, true); } } - igt_describe("Verify simultaneous modeset on 2 big joiner outputs"); - igt_subtest_with_dynamic("2x-modeset") { - igt_require_f(count > 1, "2 outputs with big joiner modes are required\n"); - igt_require_f(data.n_pipes > 3, "Minumum of 4 pipes are required\n"); - for (i = 0; (i + 2) < data.n_pipes - 1; i++) { - data.pipe1 = pipe_seq[i]; - data.pipe2 = pipe_seq[i + 2]; - igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe_seq[i]), kmstest_pipe_name(pipe_seq[i + 2])) - test_dual_display(&data); - } + igt_subtest_with_dynamic("force-joiner-invalid-modeset") { + igt_require_f(data.non_big_joiner_output_count > 0, "Non big joiner output not found\n"); + igt_require_f(data.n_pipes > 1, "Minimum of 2 pipes are required\n"); + + if (data.non_big_joiner_output_count >= 1) + igt_dynamic_f("big_joiner_on_last_pipe") + tets_big_joiner_on_last_pipe(&data, true); + + if (data.non_big_joiner_output_count > 1) + igt_dynamic_f("invalid_combinations") + test_invalid_modeset_two_joiner(&data, true, false); } igt_fixture { - igt_remove_fb(data.drm_fd, &data.fb); igt_display_fini(&data.display); drm_close_driver(data.drm_fd); } -- 2.25.1 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH i-g-t 4/4] tests/intel-ci/fast-feedback: HAX PATCH DO NOT MERGE 2024-02-29 18:10 [PATCH i-g-t 0/4] revamp big joiner test Kunal Joshi ` (2 preceding siblings ...) 2024-02-29 18:10 ` [PATCH i-g-t 3/4] tests/intel/kms_big_joiner: revamp kms_big_joiner Kunal Joshi @ 2024-02-29 18:10 ` Kunal Joshi 2024-02-29 18:26 ` ✓ CI.xeBAT: success for revamp big joiner test Patchwork 2024-02-29 18:40 ` ✗ Fi.CI.BAT: failure " Patchwork 5 siblings, 0 replies; 11+ messages in thread From: Kunal Joshi @ 2024-02-29 18:10 UTC (permalink / raw) To: igt-dev; +Cc: Kunal Joshi Just for testing Do not merge Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com> --- tests/intel-ci/fast-feedback.testlist | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/intel-ci/fast-feedback.testlist b/tests/intel-ci/fast-feedback.testlist index be0965110..06863f1a2 100644 --- a/tests/intel-ci/fast-feedback.testlist +++ b/tests/intel-ci/fast-feedback.testlist @@ -1,6 +1,11 @@ # Try to load the driver if it's not available yet. igt@i915_module_load@load +#HAX PATCH DO NOT MERGE +igt@kms_big_joiner@basic +igt@kms_big_joiner@force-joiner-basic +igt@kms_big_joiner@invalid-modeset +igt@kms_big_joiner@force-joiner-invalid-modeset # Keep alphabetically sorted by default igt@core_auth@basic-auth igt@debugfs_test@read_all_entries -- 2.25.1 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* ✓ CI.xeBAT: success for revamp big joiner test 2024-02-29 18:10 [PATCH i-g-t 0/4] revamp big joiner test Kunal Joshi ` (3 preceding siblings ...) 2024-02-29 18:10 ` [PATCH i-g-t 4/4] tests/intel-ci/fast-feedback: HAX PATCH DO NOT MERGE Kunal Joshi @ 2024-02-29 18:26 ` Patchwork 2024-02-29 18:40 ` ✗ Fi.CI.BAT: failure " Patchwork 5 siblings, 0 replies; 11+ messages in thread From: Patchwork @ 2024-02-29 18:26 UTC (permalink / raw) To: Kunal Joshi; +Cc: igt-dev [-- Attachment #1: Type: text/plain, Size: 951 bytes --] == Series Details == Series: revamp big joiner test URL : https://patchwork.freedesktop.org/series/130572/ State : success == Summary == CI Bug Log - changes from XEIGT_7738_BAT -> XEIGTPW_10758_BAT ==================================================== Summary ------- **SUCCESS** No regressions found. Participating hosts (4 -> 4) ------------------------------ No changes in participating hosts Changes ------- No changes found Build changes ------------- * IGT: IGT_7738 -> IGTPW_10758 * Linux: xe-876-12db124b8cef9c32b7bc69a5abbaff016965cf99 -> xe-878-68e66ae04f6f2718699716285e8ddb09a469af35 IGTPW_10758: 10758 IGT_7738: 7738 xe-876-12db124b8cef9c32b7bc69a5abbaff016965cf99: 12db124b8cef9c32b7bc69a5abbaff016965cf99 xe-878-68e66ae04f6f2718699716285e8ddb09a469af35: 68e66ae04f6f2718699716285e8ddb09a469af35 == Logs == For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10758/index.html [-- Attachment #2: Type: text/html, Size: 1510 bytes --] ^ permalink raw reply [flat|nested] 11+ messages in thread
* ✗ Fi.CI.BAT: failure for revamp big joiner test 2024-02-29 18:10 [PATCH i-g-t 0/4] revamp big joiner test Kunal Joshi ` (4 preceding siblings ...) 2024-02-29 18:26 ` ✓ CI.xeBAT: success for revamp big joiner test Patchwork @ 2024-02-29 18:40 ` Patchwork 5 siblings, 0 replies; 11+ messages in thread From: Patchwork @ 2024-02-29 18:40 UTC (permalink / raw) To: Kunal Joshi; +Cc: igt-dev [-- Attachment #1: Type: text/plain, Size: 17843 bytes --] == Series Details == Series: revamp big joiner test URL : https://patchwork.freedesktop.org/series/130572/ State : failure == Summary == CI Bug Log - changes from CI_DRM_14368 -> IGTPW_10758 ==================================================== Summary ------- **FAILURE** Serious unknown changes coming with IGTPW_10758 absolutely need to be verified manually. If you think the reported changes have nothing to do with the changes introduced in IGTPW_10758, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them to document this new failure mode, which will reduce false positives in CI. External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/index.html Participating hosts (43 -> 41) ------------------------------ Missing (2): bat-arls-2 fi-snb-2520m Possible new issues ------------------- Here are the unknown changes that may have been introduced in IGTPW_10758: ### IGT changes ### #### Possible regressions #### * igt@kms_big_joiner@basic: - bat-dg1-7: NOTRUN -> [SKIP][1] +3 other tests skip [1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/bat-dg1-7/igt@kms_big_joiner@basic.html - bat-adlp-9: NOTRUN -> [SKIP][2] +1 other test skip [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/bat-adlp-9/igt@kms_big_joiner@basic.html - bat-rplp-1: NOTRUN -> [SKIP][3] +1 other test skip [3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/bat-rplp-1/igt@kms_big_joiner@basic.html - bat-dg2-9: NOTRUN -> [SKIP][4] +1 other test skip [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/bat-dg2-9/igt@kms_big_joiner@basic.html - bat-adln-1: NOTRUN -> [SKIP][5] +1 other test skip [5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/bat-adln-1/igt@kms_big_joiner@basic.html - bat-adlp-6: NOTRUN -> [SKIP][6] +1 other test skip [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/bat-adlp-6/igt@kms_big_joiner@basic.html - bat-dg2-11: NOTRUN -> [SKIP][7] +3 other tests skip [7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/bat-dg2-11/igt@kms_big_joiner@basic.html - bat-dg2-14: NOTRUN -> [SKIP][8] +3 other tests skip [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/bat-dg2-14/igt@kms_big_joiner@basic.html * {igt@kms_big_joiner@force-joiner-basic@1x-joiner} (NEW): - bat-dg2-9: NOTRUN -> [FAIL][9] [9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/bat-dg2-9/igt@kms_big_joiner@force-joiner-basic@1x-joiner.html - {bat-arls-4}: NOTRUN -> [FAIL][10] [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/bat-arls-4/igt@kms_big_joiner@force-joiner-basic@1x-joiner.html - bat-adlp-6: NOTRUN -> [FAIL][11] [11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/bat-adlp-6/igt@kms_big_joiner@force-joiner-basic@1x-joiner.html - fi-skl-6600u: NOTRUN -> [FAIL][12] +1 other test fail [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/fi-skl-6600u/igt@kms_big_joiner@force-joiner-basic@1x-joiner.html - {bat-rpls-3}: NOTRUN -> [FAIL][13] [13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/bat-rpls-3/igt@kms_big_joiner@force-joiner-basic@1x-joiner.html - fi-apl-guc: NOTRUN -> [FAIL][14] +1 other test fail [14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/fi-apl-guc/igt@kms_big_joiner@force-joiner-basic@1x-joiner.html - bat-dg2-8: NOTRUN -> [FAIL][15] [15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/bat-dg2-8/igt@kms_big_joiner@force-joiner-basic@1x-joiner.html - bat-arls-3: NOTRUN -> [FAIL][16] [16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/bat-arls-3/igt@kms_big_joiner@force-joiner-basic@1x-joiner.html - bat-mtlp-8: NOTRUN -> [FAIL][17] [17]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/bat-mtlp-8/igt@kms_big_joiner@force-joiner-basic@1x-joiner.html - {bat-adls-6}: NOTRUN -> [FAIL][18] [18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/bat-adls-6/igt@kms_big_joiner@force-joiner-basic@1x-joiner.html - bat-adlp-9: NOTRUN -> [FAIL][19] [19]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/bat-adlp-9/igt@kms_big_joiner@force-joiner-basic@1x-joiner.html - bat-adln-1: NOTRUN -> [DMESG-FAIL][20] [20]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/bat-adln-1/igt@kms_big_joiner@force-joiner-basic@1x-joiner.html - bat-rplp-1: NOTRUN -> [FAIL][21] [21]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/bat-rplp-1/igt@kms_big_joiner@force-joiner-basic@1x-joiner.html * {igt@kms_big_joiner@force-joiner-invalid-modeset} (NEW): - fi-rkl-11600: NOTRUN -> [SKIP][22] +3 other tests skip [22]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/fi-rkl-11600/igt@kms_big_joiner@force-joiner-invalid-modeset.html - fi-tgl-1115g4: NOTRUN -> [SKIP][23] +3 other tests skip [23]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/fi-tgl-1115g4/igt@kms_big_joiner@force-joiner-invalid-modeset.html - bat-mtlp-6: NOTRUN -> [SKIP][24] +1 other test skip [24]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/bat-mtlp-6/igt@kms_big_joiner@force-joiner-invalid-modeset.html - {bat-rpls-3}: NOTRUN -> [SKIP][25] [25]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/bat-rpls-3/igt@kms_big_joiner@force-joiner-invalid-modeset.html - {bat-adls-6}: NOTRUN -> [SKIP][26] [26]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/bat-adls-6/igt@kms_big_joiner@force-joiner-invalid-modeset.html * {igt@kms_big_joiner@force-joiner-invalid-modeset@big_joiner_on_last_pipe} (NEW): - fi-skl-guc: NOTRUN -> [FAIL][27] +1 other test fail [27]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/fi-skl-guc/igt@kms_big_joiner@force-joiner-invalid-modeset@big_joiner_on_last_pipe.html - bat-jsl-3: NOTRUN -> [FAIL][28] +1 other test fail [28]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/bat-jsl-3/igt@kms_big_joiner@force-joiner-invalid-modeset@big_joiner_on_last_pipe.html - bat-jsl-1: NOTRUN -> [FAIL][29] +1 other test fail [29]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/bat-jsl-1/igt@kms_big_joiner@force-joiner-invalid-modeset@big_joiner_on_last_pipe.html - fi-kbl-7567u: NOTRUN -> [FAIL][30] +1 other test fail [30]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/fi-kbl-7567u/igt@kms_big_joiner@force-joiner-invalid-modeset@big_joiner_on_last_pipe.html * {igt@kms_big_joiner@force-joiner-invalid-modeset@invalid_combinations} (NEW): - fi-cfl-8109u: NOTRUN -> [FAIL][31] +2 other tests fail [31]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/fi-cfl-8109u/igt@kms_big_joiner@force-joiner-invalid-modeset@invalid_combinations.html * igt@kms_big_joiner@invalid-modeset: - bat-jsl-3: NOTRUN -> [SKIP][32] +1 other test skip [32]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/bat-jsl-3/igt@kms_big_joiner@invalid-modeset.html - bat-mtlp-8: NOTRUN -> [SKIP][33] +1 other test skip [33]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/bat-mtlp-8/igt@kms_big_joiner@invalid-modeset.html - bat-dg2-8: NOTRUN -> [SKIP][34] +1 other test skip [34]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/bat-dg2-8/igt@kms_big_joiner@invalid-modeset.html - bat-adlm-1: NOTRUN -> [SKIP][35] +3 other tests skip [35]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/bat-adlm-1/igt@kms_big_joiner@invalid-modeset.html - bat-jsl-1: NOTRUN -> [SKIP][36] +1 other test skip [36]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/bat-jsl-1/igt@kms_big_joiner@invalid-modeset.html - bat-arls-1: NOTRUN -> [SKIP][37] +3 other tests skip [37]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/bat-arls-1/igt@kms_big_joiner@invalid-modeset.html - bat-arls-3: NOTRUN -> [SKIP][38] +1 other test skip [38]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/bat-arls-3/igt@kms_big_joiner@invalid-modeset.html #### Suppressed #### The following results come from untrusted machines, tests, or statuses. They do not affect the overall result. * igt@kms_big_joiner@basic: - {bat-arls-4}: NOTRUN -> [SKIP][39] +1 other test skip [39]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/bat-arls-4/igt@kms_big_joiner@basic.html * igt@kms_big_joiner@invalid-modeset: - {bat-adls-6}: NOTRUN -> [SKIP][40] +1 other test skip [40]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/bat-adls-6/igt@kms_big_joiner@invalid-modeset.html * igt@kms_busy@basic: - {bat-rpls-3}: NOTRUN -> [SKIP][41] +2 other tests skip [41]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/bat-rpls-3/igt@kms_busy@basic.html * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy: - {bat-rpls-3}: [SKIP][42] ([i915#4103]) -> [SKIP][43] +1 other test skip [42]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14368/bat-rpls-3/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html [43]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/bat-rpls-3/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html * igt@kms_cursor_legacy@basic-flip-after-cursor-legacy: - {bat-rpls-3}: [PASS][44] -> [SKIP][45] +5 other tests skip [44]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14368/bat-rpls-3/igt@kms_cursor_legacy@basic-flip-after-cursor-legacy.html [45]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/bat-rpls-3/igt@kms_cursor_legacy@basic-flip-after-cursor-legacy.html * igt@kms_dsc@dsc-basic: - {bat-rpls-3}: [SKIP][46] ([i915#3555] / [i915#3840] / [i915#9886]) -> [SKIP][47] [46]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14368/bat-rpls-3/igt@kms_dsc@dsc-basic.html [47]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/bat-rpls-3/igt@kms_dsc@dsc-basic.html New tests --------- New tests have been introduced between CI_DRM_14368 and IGTPW_10758: ### New IGT tests (5) ### * igt@kms_big_joiner@force-joiner-basic: - Statuses : 22 skip(s) - Exec time: [0.0] s * igt@kms_big_joiner@force-joiner-basic@1x-joiner: - Statuses : 1 dmesg-fail(s) 17 fail(s) - Exec time: [0.01, 2.81] s * igt@kms_big_joiner@force-joiner-invalid-modeset: - Statuses : 24 skip(s) - Exec time: [0.0] s * igt@kms_big_joiner@force-joiner-invalid-modeset@big_joiner_on_last_pipe: - Statuses : 7 fail(s) 9 pass(s) - Exec time: [0.01, 1.33] s * igt@kms_big_joiner@force-joiner-invalid-modeset@invalid_combinations: - Statuses : 1 fail(s) - Exec time: [0.01] s Known issues ------------ Here are the changes found in IGTPW_10758 that come from known issues: ### IGT changes ### #### Issues hit #### * igt@gem_lmem_swapping@basic: - fi-apl-guc: NOTRUN -> [SKIP][48] ([fdo#109271] / [i915#4613]) +3 other tests skip [48]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/fi-apl-guc/igt@gem_lmem_swapping@basic.html * igt@kms_big_joiner@basic: - fi-pnv-d510: NOTRUN -> [SKIP][49] ([fdo#109271]) +3 other tests skip [49]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/fi-pnv-d510/igt@kms_big_joiner@basic.html - fi-glk-j4005: NOTRUN -> [SKIP][50] ([fdo#109271]) +3 other tests skip [50]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/fi-glk-j4005/igt@kms_big_joiner@basic.html - fi-kbl-7567u: NOTRUN -> [SKIP][51] ([fdo#109271]) +1 other test skip [51]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/fi-kbl-7567u/igt@kms_big_joiner@basic.html - fi-cfl-guc: NOTRUN -> [SKIP][52] ([fdo#109271]) +3 other tests skip [52]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/fi-cfl-guc/igt@kms_big_joiner@basic.html - fi-kbl-x1275: NOTRUN -> [SKIP][53] ([fdo#109271]) +3 other tests skip [53]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/fi-kbl-x1275/igt@kms_big_joiner@basic.html - fi-cfl-8109u: NOTRUN -> [SKIP][54] ([fdo#109271]) +1 other test skip [54]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/fi-cfl-8109u/igt@kms_big_joiner@basic.html - fi-ilk-650: NOTRUN -> [SKIP][55] ([fdo#109271]) +3 other tests skip [55]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/fi-ilk-650/igt@kms_big_joiner@basic.html - fi-blb-e6850: NOTRUN -> [SKIP][56] ([fdo#109271]) +3 other tests skip [56]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/fi-blb-e6850/igt@kms_big_joiner@basic.html - bat-mtlp-6: NOTRUN -> [SKIP][57] ([i915#9792]) +1 other test skip [57]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/bat-mtlp-6/igt@kms_big_joiner@basic.html - fi-skl-6600u: NOTRUN -> [SKIP][58] ([fdo#109271]) +1 other test skip [58]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/fi-skl-6600u/igt@kms_big_joiner@basic.html - fi-skl-guc: NOTRUN -> [SKIP][59] ([fdo#109271]) +1 other test skip [59]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/fi-skl-guc/igt@kms_big_joiner@basic.html - fi-cfl-8700k: NOTRUN -> [SKIP][60] ([fdo#109271]) +3 other tests skip [60]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/fi-cfl-8700k/igt@kms_big_joiner@basic.html - fi-bsw-nick: NOTRUN -> [SKIP][61] ([fdo#109271]) +3 other tests skip [61]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/fi-bsw-nick/igt@kms_big_joiner@basic.html - bat-kbl-2: NOTRUN -> [SKIP][62] ([fdo#109271]) +3 other tests skip [62]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/bat-kbl-2/igt@kms_big_joiner@basic.html * igt@kms_big_joiner@invalid-modeset: - bat-atsm-1: NOTRUN -> [SKIP][63] ([i915#6078]) +3 other tests skip [63]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/bat-atsm-1/igt@kms_big_joiner@invalid-modeset.html - fi-ivb-3770: NOTRUN -> [SKIP][64] ([fdo#109271]) +3 other tests skip [64]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/fi-ivb-3770/igt@kms_big_joiner@invalid-modeset.html - fi-elk-e7500: NOTRUN -> [SKIP][65] ([fdo#109271]) +3 other tests skip [65]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/fi-elk-e7500/igt@kms_big_joiner@invalid-modeset.html - fi-kbl-guc: NOTRUN -> [SKIP][66] ([fdo#109271]) +3 other tests skip [66]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/fi-kbl-guc/igt@kms_big_joiner@invalid-modeset.html - fi-bsw-n3050: NOTRUN -> [SKIP][67] ([fdo#109271]) +3 other tests skip [67]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/fi-bsw-n3050/igt@kms_big_joiner@invalid-modeset.html * igt@kms_hdmi_inject@inject-audio: - fi-apl-guc: NOTRUN -> [SKIP][68] ([fdo#109271]) +19 other tests skip [68]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/fi-apl-guc/igt@kms_hdmi_inject@inject-audio.html * igt@kms_pipe_crc_basic@nonblocking-crc: - bat-dg2-11: NOTRUN -> [SKIP][69] ([i915#9197]) [69]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/bat-dg2-11/igt@kms_pipe_crc_basic@nonblocking-crc.html #### Possible fixes #### * igt@i915_selftest@live@hangcheck: - {bat-rpls-3}: [DMESG-WARN][70] ([i915#5591]) -> [PASS][71] [70]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14368/bat-rpls-3/igt@i915_selftest@live@hangcheck.html [71]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/bat-rpls-3/igt@i915_selftest@live@hangcheck.html - bat-dg2-14: [INCOMPLETE][72] ([i915#10137]) -> [PASS][73] [72]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14368/bat-dg2-14/igt@i915_selftest@live@hangcheck.html [73]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/bat-dg2-14/igt@i915_selftest@live@hangcheck.html {name}: This element is suppressed. This means it is ignored when computing the status of the difference (SUCCESS, WARNING, or FAILURE). [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271 [fdo#109295]: https://bugs.freedesktop.org/show_bug.cgi?id=109295 [i915#10137]: https://gitlab.freedesktop.org/drm/intel/issues/10137 [i915#1849]: https://gitlab.freedesktop.org/drm/intel/issues/1849 [i915#3555]: https://gitlab.freedesktop.org/drm/intel/issues/3555 [i915#3637]: https://gitlab.freedesktop.org/drm/intel/issues/3637 [i915#3708]: https://gitlab.freedesktop.org/drm/intel/issues/3708 [i915#3840]: https://gitlab.freedesktop.org/drm/intel/issues/3840 [i915#4103]: https://gitlab.freedesktop.org/drm/intel/issues/4103 [i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613 [i915#5354]: https://gitlab.freedesktop.org/drm/intel/issues/5354 [i915#5591]: https://gitlab.freedesktop.org/drm/intel/issues/5591 [i915#6078]: https://gitlab.freedesktop.org/drm/intel/issues/6078 [i915#9197]: https://gitlab.freedesktop.org/drm/intel/issues/9197 [i915#9792]: https://gitlab.freedesktop.org/drm/intel/issues/9792 [i915#9886]: https://gitlab.freedesktop.org/drm/intel/issues/9886 [i915#9920]: https://gitlab.freedesktop.org/drm/intel/issues/9920 Build changes ------------- * CI: CI-20190529 -> None * IGT: IGT_7738 -> IGTPW_10758 CI-20190529: 20190529 CI_DRM_14368: 68e66ae04f6f2718699716285e8ddb09a469af35 @ git://anongit.freedesktop.org/gfx-ci/linux IGTPW_10758: 10758 IGT_7738: 7738 Testlist changes ---------------- +igt@kms_big_joiner@force-joiner-basic +igt@kms_big_joiner@force-joiner-invalid-modeset -igt@kms_big_joiner@2x-modeset == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10758/index.html [-- Attachment #2: Type: text/html, Size: 20112 bytes --] ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH i-g-t 0/4] revamp big joiner test @ 2024-03-01 8:25 Kunal Joshi 2024-03-01 8:26 ` [PATCH i-g-t 2/4] lib/igt_kms: add helpers to enable/disable force joiner Kunal Joshi 0 siblings, 1 reply; 11+ messages in thread From: Kunal Joshi @ 2024-03-01 8:25 UTC (permalink / raw) To: igt-dev; +Cc: Kunal Joshi big joiner outputs are statically assigned to pipe, assign dynamically also add support for forcing joiner, support for forcing joiner was introduced with below kmd patch drm/i915: Add bigjoiner force enable option to debugfs Kunal Joshi (3): lib/igt_kms: move bigjoiner_mode_found to lib lib/igt_kms: add helpers to enable/disable force joiner tests/intel/kms_big_joiner: revamp kms_big_joiner tests/intel-ci/fast-feedback: HAX PATCH DO NOT MERGE lib/igt_kms.c | 73 ++++ lib/igt_kms.h | 4 + tests/intel-ci/fast-feedback.testlist | 5 + tests/intel/kms_big_joiner.c | 507 ++++++++++++++------------ 4 files changed, 355 insertions(+), 234 deletions(-) -- 2.25.1 ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH i-g-t 2/4] lib/igt_kms: add helpers to enable/disable force joiner 2024-03-01 8:25 [PATCH i-g-t 0/4] " Kunal Joshi @ 2024-03-01 8:26 ` Kunal Joshi 0 siblings, 0 replies; 11+ messages in thread From: Kunal Joshi @ 2024-03-01 8:26 UTC (permalink / raw) To: igt-dev; +Cc: Kunal Joshi, Karthik B S, Bhanuprakash Modem add helped to enable/disable force joiner and for checking current state enabled/disabled Cc: Karthik B S <karthik.b.s@intel.com> Cc: Bhanuprakash Modem <bhanuprakash.modem@intel.com> Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com> --- lib/igt_kms.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ lib/igt_kms.h | 2 ++ 2 files changed, 50 insertions(+) diff --git a/lib/igt_kms.c b/lib/igt_kms.c index 89956b9d5..e6952f56a 100644 --- a/lib/igt_kms.c +++ b/lib/igt_kms.c @@ -6242,6 +6242,54 @@ bool igt_check_bigjoiner_support(igt_display_t *display) return true; } +/** + * Checks if the force big joiner is enabled for a specific connector. + * + * @param drmfd The file descriptor of the DRM device. + * @param connector_name The name of the connector. + * Returns: + * 1 if the force big joiner is enabled, 0 if disabled, and -1 on error. + */ +int igt_check_force_bigjoiner_status(int drmfd, char *connector_name) +{ + char buf[512]; + int debugfs_fd, ret; + + debugfs_fd = igt_debugfs_connector_dir(drmfd, connector_name, O_RDONLY); + ret = igt_debugfs_simple_read(debugfs_fd, "i915_bigjoiner_force_enable", + buf, sizeof(buf)); + if (ret < 0) { + igt_info("Could not read debugfs %s\n", + strerror(-ret)); + return -1; + } + if (strstr(buf, "Bigjoiner enable: 1")) + return 1; + else if (strstr(buf, "Bigjoiner enable: 0")) + return 0; + else + return -1; +} + +/** + * Forces the enable/disable state of big joiner for a specific connector. + * + * @param drmfd The file descriptor of the DRM device. + * @param connector_name The name of the connector. + * @param enable The desired state of big joiner (true for enable, false for disable). + * Returns: + * >=0 on success, otherwise an error code. + */ +int igt_force_bigjoiner_enable(int drmfd, char *connector_name, bool enable) +{ + int debugfs_fd, ret; + + debugfs_fd = igt_debugfs_connector_dir(drmfd, connector_name, O_DIRECTORY); + ret = igt_sysfs_write(debugfs_fd, "i915_bigjoiner_force_enable", enable ? "1" : "0", 1); + close(debugfs_fd); + return ret; +} + /** * igt_parse_mode_string: * @mode_string: modeline string diff --git a/lib/igt_kms.h b/lib/igt_kms.h index bab8487d3..b28022db4 100644 --- a/lib/igt_kms.h +++ b/lib/igt_kms.h @@ -1215,6 +1215,8 @@ bool igt_bigjoiner_possible(drmModeModeInfo *mode, int max_dotclock); bool bigjoiner_mode_found(int drm_fd, drmModeConnector *connector, int max_dotclock); bool igt_check_bigjoiner_support(igt_display_t *display); +int igt_check_force_bigjoiner_status(int drmfd, char *connector_name); +int igt_force_bigjoiner_enable(int drmfd, char *connector_name, bool enable); bool igt_parse_mode_string(const char *mode_string, drmModeModeInfo *mode); bool intel_pipe_output_combo_valid(igt_display_t *display); bool igt_check_output_is_dp_mst(igt_output_t *output); -- 2.25.1 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH i-g-t 0/4] revamp big joiner test @ 2024-03-03 17:22 Kunal Joshi 2024-03-03 17:22 ` [PATCH i-g-t 2/4] lib/igt_kms: add helpers to enable/disable force joiner Kunal Joshi 0 siblings, 1 reply; 11+ messages in thread From: Kunal Joshi @ 2024-03-03 17:22 UTC (permalink / raw) To: igt-dev; +Cc: Kunal Joshi big joiner outputs are statically assigned to pipe, assign dynamically also add support for forcing joiner, support for forcing joiner was introduced with below kmd patch drm/i915: Add bigjoiner force enable option to debugfs Kunal Joshi (4): lib/igt_kms: move bigjoiner_mode_found to lib lib/igt_kms: add helpers to enable/disable force joiner tests/intel/kms_big_joiner: revamp kms_big_joiner tests/intel-ci/fast-feedback: HAX PATCH DO NOT MERGE lib/igt_kms.c | 73 ++++ lib/igt_kms.h | 4 + tests/intel-ci/fast-feedback.testlist | 5 + tests/intel/kms_big_joiner.c | 504 ++++++++++++++------------ 4 files changed, 351 insertions(+), 235 deletions(-) -- 2.25.1 ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH i-g-t 2/4] lib/igt_kms: add helpers to enable/disable force joiner 2024-03-03 17:22 [PATCH i-g-t 0/4] revamp big joiner test Kunal Joshi @ 2024-03-03 17:22 ` Kunal Joshi 2024-03-05 11:44 ` Modem, Bhanuprakash 0 siblings, 1 reply; 11+ messages in thread From: Kunal Joshi @ 2024-03-03 17:22 UTC (permalink / raw) To: igt-dev; +Cc: Kunal Joshi, Karthik B S, Bhanuprakash Modem add helped to enable/disable force joiner and for checking current state enabled/disabled Cc: Karthik B S <karthik.b.s@intel.com> Cc: Bhanuprakash Modem <bhanuprakash.modem@intel.com> Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com> --- lib/igt_kms.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ lib/igt_kms.h | 2 ++ 2 files changed, 50 insertions(+) diff --git a/lib/igt_kms.c b/lib/igt_kms.c index 89956b9d5..e6952f56a 100644 --- a/lib/igt_kms.c +++ b/lib/igt_kms.c @@ -6242,6 +6242,54 @@ bool igt_check_bigjoiner_support(igt_display_t *display) return true; } +/** + * Checks if the force big joiner is enabled for a specific connector. + * + * @param drmfd The file descriptor of the DRM device. + * @param connector_name The name of the connector. + * Returns: + * 1 if the force big joiner is enabled, 0 if disabled, and -1 on error. + */ +int igt_check_force_bigjoiner_status(int drmfd, char *connector_name) +{ + char buf[512]; + int debugfs_fd, ret; + + debugfs_fd = igt_debugfs_connector_dir(drmfd, connector_name, O_RDONLY); + ret = igt_debugfs_simple_read(debugfs_fd, "i915_bigjoiner_force_enable", + buf, sizeof(buf)); + if (ret < 0) { + igt_info("Could not read debugfs %s\n", + strerror(-ret)); + return -1; + } + if (strstr(buf, "Bigjoiner enable: 1")) + return 1; + else if (strstr(buf, "Bigjoiner enable: 0")) + return 0; + else + return -1; +} + +/** + * Forces the enable/disable state of big joiner for a specific connector. + * + * @param drmfd The file descriptor of the DRM device. + * @param connector_name The name of the connector. + * @param enable The desired state of big joiner (true for enable, false for disable). + * Returns: + * >=0 on success, otherwise an error code. + */ +int igt_force_bigjoiner_enable(int drmfd, char *connector_name, bool enable) +{ + int debugfs_fd, ret; + + debugfs_fd = igt_debugfs_connector_dir(drmfd, connector_name, O_DIRECTORY); + ret = igt_sysfs_write(debugfs_fd, "i915_bigjoiner_force_enable", enable ? "1" : "0", 1); + close(debugfs_fd); + return ret; +} + /** * igt_parse_mode_string: * @mode_string: modeline string diff --git a/lib/igt_kms.h b/lib/igt_kms.h index bab8487d3..b28022db4 100644 --- a/lib/igt_kms.h +++ b/lib/igt_kms.h @@ -1215,6 +1215,8 @@ bool igt_bigjoiner_possible(drmModeModeInfo *mode, int max_dotclock); bool bigjoiner_mode_found(int drm_fd, drmModeConnector *connector, int max_dotclock); bool igt_check_bigjoiner_support(igt_display_t *display); +int igt_check_force_bigjoiner_status(int drmfd, char *connector_name); +int igt_force_bigjoiner_enable(int drmfd, char *connector_name, bool enable); bool igt_parse_mode_string(const char *mode_string, drmModeModeInfo *mode); bool intel_pipe_output_combo_valid(igt_display_t *display); bool igt_check_output_is_dp_mst(igt_output_t *output); -- 2.25.1 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH i-g-t 2/4] lib/igt_kms: add helpers to enable/disable force joiner 2024-03-03 17:22 ` [PATCH i-g-t 2/4] lib/igt_kms: add helpers to enable/disable force joiner Kunal Joshi @ 2024-03-05 11:44 ` Modem, Bhanuprakash 2024-03-05 12:50 ` Joshi, Kunal1 0 siblings, 1 reply; 11+ messages in thread From: Modem, Bhanuprakash @ 2024-03-05 11:44 UTC (permalink / raw) To: Kunal Joshi, igt-dev; +Cc: Karthik B S Hi Kunal, On 03-03-2024 10:52 pm, Kunal Joshi wrote: > add helped to enable/disable force joiner and for > checking current state enabled/disabled > > Cc: Karthik B S <karthik.b.s@intel.com> > Cc: Bhanuprakash Modem <bhanuprakash.modem@intel.com> > Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com> > --- > lib/igt_kms.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ > lib/igt_kms.h | 2 ++ > 2 files changed, 50 insertions(+) > > diff --git a/lib/igt_kms.c b/lib/igt_kms.c > index 89956b9d5..e6952f56a 100644 > --- a/lib/igt_kms.c > +++ b/lib/igt_kms.c > @@ -6242,6 +6242,54 @@ bool igt_check_bigjoiner_support(igt_display_t *display) > return true; > } > > +/** > + * Checks if the force big joiner is enabled for a specific connector. > + * > + * @param drmfd The file descriptor of the DRM device. > + * @param connector_name The name of the connector. > + * Returns: > + * 1 if the force big joiner is enabled, 0 if disabled, and -1 on error. > + */ > +int igt_check_force_bigjoiner_status(int drmfd, char *connector_name) > +{ > + char buf[512]; > + int debugfs_fd, ret; > + > + debugfs_fd = igt_debugfs_connector_dir(drmfd, connector_name, O_RDONLY); We must guard "debugfs_fd" with igt_assert() or igt_require(). > + ret = igt_debugfs_simple_read(debugfs_fd, "i915_bigjoiner_force_enable", > + buf, sizeof(buf)); > + if (ret < 0) { > + igt_info("Could not read debugfs %s\n", > + strerror(-ret)); > + return -1; > + } > + if (strstr(buf, "Bigjoiner enable: 1")) > + return 1; > + else if (strstr(buf, "Bigjoiner enable: 0")) > + return 0; > + else > + return -1; > +} > + > +/** > + * Forces the enable/disable state of big joiner for a specific connector. > + * > + * @param drmfd The file descriptor of the DRM device. > + * @param connector_name The name of the connector. > + * @param enable The desired state of big joiner (true for enable, false for disable). > + * Returns: > + * >=0 on success, otherwise an error code. IMHO, let's make return value as bool. Return True if write success else False. > + */ > +int igt_force_bigjoiner_enable(int drmfd, char *connector_name, bool enable) > +{ > + int debugfs_fd, ret; > + > + debugfs_fd = igt_debugfs_connector_dir(drmfd, connector_name, O_DIRECTORY); ----------------------------------------------------------------------^ This could be O_RDWR or O_WRONLY? - Bhanu > + ret = igt_sysfs_write(debugfs_fd, "i915_bigjoiner_force_enable", enable ? "1" : "0", 1); > + close(debugfs_fd); > + return ret; > +} > + > /** > * igt_parse_mode_string: > * @mode_string: modeline string > diff --git a/lib/igt_kms.h b/lib/igt_kms.h > index bab8487d3..b28022db4 100644 > --- a/lib/igt_kms.h > +++ b/lib/igt_kms.h > @@ -1215,6 +1215,8 @@ bool igt_bigjoiner_possible(drmModeModeInfo *mode, int max_dotclock); > bool bigjoiner_mode_found(int drm_fd, drmModeConnector *connector, > int max_dotclock); > bool igt_check_bigjoiner_support(igt_display_t *display); > +int igt_check_force_bigjoiner_status(int drmfd, char *connector_name); > +int igt_force_bigjoiner_enable(int drmfd, char *connector_name, bool enable); > bool igt_parse_mode_string(const char *mode_string, drmModeModeInfo *mode); > bool intel_pipe_output_combo_valid(igt_display_t *display); > bool igt_check_output_is_dp_mst(igt_output_t *output); ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH i-g-t 2/4] lib/igt_kms: add helpers to enable/disable force joiner 2024-03-05 11:44 ` Modem, Bhanuprakash @ 2024-03-05 12:50 ` Joshi, Kunal1 0 siblings, 0 replies; 11+ messages in thread From: Joshi, Kunal1 @ 2024-03-05 12:50 UTC (permalink / raw) To: Modem, Bhanuprakash, igt-dev; +Cc: Karthik B S Hello Bhanu, Thanks for taking a look. On 3/5/2024 5:14 PM, Modem, Bhanuprakash wrote: > Hi Kunal, > > On 03-03-2024 10:52 pm, Kunal Joshi wrote: >> add helped to enable/disable force joiner and for >> checking current state enabled/disabled >> >> Cc: Karthik B S <karthik.b.s@intel.com> >> Cc: Bhanuprakash Modem <bhanuprakash.modem@intel.com> >> Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com> >> --- >> lib/igt_kms.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ >> lib/igt_kms.h | 2 ++ >> 2 files changed, 50 insertions(+) >> >> diff --git a/lib/igt_kms.c b/lib/igt_kms.c >> index 89956b9d5..e6952f56a 100644 >> --- a/lib/igt_kms.c >> +++ b/lib/igt_kms.c >> @@ -6242,6 +6242,54 @@ bool igt_check_bigjoiner_support(igt_display_t >> *display) >> return true; >> } >> +/** >> + * Checks if the force big joiner is enabled for a specific connector. >> + * >> + * @param drmfd The file descriptor of the DRM device. >> + * @param connector_name The name of the connector. >> + * Returns: >> + * 1 if the force big joiner is enabled, 0 if disabled, and -1 on >> error. >> + */ >> +int igt_check_force_bigjoiner_status(int drmfd, char *connector_name) >> +{ >> + char buf[512]; >> + int debugfs_fd, ret; >> + >> + debugfs_fd = igt_debugfs_connector_dir(drmfd, connector_name, >> O_RDONLY); > > We must guard "debugfs_fd" with igt_assert() or igt_require(). Will address in next revision. > >> + ret = igt_debugfs_simple_read(debugfs_fd, >> "i915_bigjoiner_force_enable", >> + buf, sizeof(buf)); >> + if (ret < 0) { >> + igt_info("Could not read debugfs %s\n", >> + strerror(-ret)); >> + return -1; >> + } >> + if (strstr(buf, "Bigjoiner enable: 1")) >> + return 1; >> + else if (strstr(buf, "Bigjoiner enable: 0")) >> + return 0; >> + else >> + return -1; >> +} >> + >> +/** >> + * Forces the enable/disable state of big joiner for a specific >> connector. >> + * >> + * @param drmfd The file descriptor of the DRM device. >> + * @param connector_name The name of the connector. >> + * @param enable The desired state of big joiner (true for enable, >> false for disable). >> + * Returns: >> + * >=0 on success, otherwise an error code. > > IMHO, let's make return value as bool. Return True if write success > else False. Yes we can do like that way too, will address in next revision > >> + */ >> +int igt_force_bigjoiner_enable(int drmfd, char *connector_name, bool >> enable) >> +{ >> + int debugfs_fd, ret; >> + >> + debugfs_fd = igt_debugfs_connector_dir(drmfd, connector_name, >> O_DIRECTORY); > ----------------------------------------------------------------------^ > This could be O_RDWR or O_WRONLY? No O_RDWR and O_WRONLY are for files not for directories. > > - Bhanu > >> + ret = igt_sysfs_write(debugfs_fd, "i915_bigjoiner_force_enable", >> enable ? "1" : "0", 1); >> + close(debugfs_fd); >> + return ret; >> +} >> + >> /** >> * igt_parse_mode_string: >> * @mode_string: modeline string >> diff --git a/lib/igt_kms.h b/lib/igt_kms.h >> index bab8487d3..b28022db4 100644 >> --- a/lib/igt_kms.h >> +++ b/lib/igt_kms.h >> @@ -1215,6 +1215,8 @@ bool igt_bigjoiner_possible(drmModeModeInfo >> *mode, int max_dotclock); >> bool bigjoiner_mode_found(int drm_fd, drmModeConnector *connector, >> int max_dotclock); >> bool igt_check_bigjoiner_support(igt_display_t *display); >> +int igt_check_force_bigjoiner_status(int drmfd, char *connector_name); >> +int igt_force_bigjoiner_enable(int drmfd, char *connector_name, bool >> enable); >> bool igt_parse_mode_string(const char *mode_string, drmModeModeInfo >> *mode); >> bool intel_pipe_output_combo_valid(igt_display_t *display); >> bool igt_check_output_is_dp_mst(igt_output_t *output); Thanks and Regards Kunal Joshi ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2024-03-05 12:50 UTC | newest] Thread overview: 11+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-02-29 18:10 [PATCH i-g-t 0/4] revamp big joiner test Kunal Joshi 2024-02-29 18:10 ` [PATCH i-g-t 1/4] lib/igt_kms: move bigjoiner_mode_found to lib Kunal Joshi 2024-02-29 18:10 ` [PATCH i-g-t 2/4] lib/igt_kms: add helpers to enable/disable force joiner Kunal Joshi 2024-02-29 18:10 ` [PATCH i-g-t 3/4] tests/intel/kms_big_joiner: revamp kms_big_joiner Kunal Joshi 2024-02-29 18:10 ` [PATCH i-g-t 4/4] tests/intel-ci/fast-feedback: HAX PATCH DO NOT MERGE Kunal Joshi 2024-02-29 18:26 ` ✓ CI.xeBAT: success for revamp big joiner test Patchwork 2024-02-29 18:40 ` ✗ Fi.CI.BAT: failure " Patchwork -- strict thread matches above, loose matches on Subject: below -- 2024-03-01 8:25 [PATCH i-g-t 0/4] " Kunal Joshi 2024-03-01 8:26 ` [PATCH i-g-t 2/4] lib/igt_kms: add helpers to enable/disable force joiner Kunal Joshi 2024-03-03 17:22 [PATCH i-g-t 0/4] revamp big joiner test Kunal Joshi 2024-03-03 17:22 ` [PATCH i-g-t 2/4] lib/igt_kms: add helpers to enable/disable force joiner Kunal Joshi 2024-03-05 11:44 ` Modem, Bhanuprakash 2024-03-05 12:50 ` Joshi, Kunal1
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox