From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id CF2FCC0218A for ; Thu, 30 Jan 2025 17:05:08 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 863CB10E385; Thu, 30 Jan 2025 17:05:08 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.b="EdyETogm"; dkim-atps=neutral Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.16]) by gabe.freedesktop.org (Postfix) with ESMTPS id 446CE10E385 for ; Thu, 30 Jan 2025 17:05:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1738256708; x=1769792708; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=XbSmdtcxJkALbszJRqB4OxN3rHB++2WI8oypDSEJ7WY=; b=EdyETogmq2wOgDTfdpEUnu0bT7RJzxLxpQU3tSYtdtqP0Kg7ee79/MoI 0f2VXFYbKK2dKUDPrAcjBeI7NGdc/ihrHX5og3Lnw1RmxbK2DXmCzylF+ ThI3hubu1fUklpEJqtJ2GuHQxL65YjBtHF/pwtwqMs8/uPKuhQZMu11z7 BWlN3+L9Tgg+ync4AjaZalbFauu0VwqQs5mGCX5uw9CS6t5ww7FEzFwOo ZNJNXVfIZJMAhM7WexK5zKFr4JIiH4jelHsg41gXziwFplt9sJs1x5gj7 Hoj0Z05btT/Qvg4vVdvKt1JAs6WvVQz1c2kRr8iWAFHuD0bSfTQtt/n3W g==; X-CSE-ConnectionGUID: 0ulZVCYtSZifTsmfHEn95A== X-CSE-MsgGUID: XDCdXxUzTpu8t6GMY+zkcw== X-IronPort-AV: E=McAfee;i="6700,10204,11331"; a="38953366" X-IronPort-AV: E=Sophos;i="6.13,245,1732608000"; d="scan'208";a="38953366" Received: from orviesa010.jf.intel.com ([10.64.159.150]) by orvoesa108.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 Jan 2025 09:05:08 -0800 X-CSE-ConnectionGUID: 3jxRCqCoR/CuWCAogGWTrw== X-CSE-MsgGUID: SKNeQJe1QzSXXa8+QFkf7Q== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.12,224,1728975600"; d="scan'208";a="109241080" Received: from kunal-x299-aorus-gaming-3-pro.iind.intel.com ([10.190.239.13]) by orviesa010-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 Jan 2025 09:05:05 -0800 From: Jeevan B To: igt-dev@lists.freedesktop.org Cc: karthik.b.s@intel.com, swati2.sharma@intel.com, Kunal Joshi , Jeevan B Subject: [PATCH i-g-t 2/6] tests/intel/kms_mst_helper: Add helper for MST-related functions Date: Thu, 30 Jan 2025 22:50:27 +0530 Message-Id: <20250130172031.4126606-3-jeevan.b@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20250130172031.4126606-1-jeevan.b@intel.com> References: <20250130172031.4126606-1-jeevan.b@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: igt-dev@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development mailing list for IGT GPU Tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" From: Kunal Joshi This patch introduces kms_mst_helper.c and kms_mst_helper.h to centralize commonly used MST-related logic. The new function igt_find_all_mst_output_in_topology() enumerates MST outputs that share the same root connector, simplifying code reuse across tests needing outputs on same MST topology. The existing MST-related code in kms_dp_linktrain_fallback.c is updated to use the new helper, removing duplication. Additionally, meson.build is modified to include kms_mst_helper.c in the build process. Signed-off-by: Kunal Joshi Reviewed-by: Jeevan B --- tests/intel/kms_dp_linktrain_fallback.c | 28 +++------------ tests/intel/kms_mst_helper.c | 48 +++++++++++++++++++++++++ tests/intel/kms_mst_helper.h | 10 ++++++ tests/meson.build | 1 + 4 files changed, 63 insertions(+), 24 deletions(-) create mode 100644 tests/intel/kms_mst_helper.c create mode 100644 tests/intel/kms_mst_helper.h diff --git a/tests/intel/kms_dp_linktrain_fallback.c b/tests/intel/kms_dp_linktrain_fallback.c index 415005774..c409f9e9d 100644 --- a/tests/intel/kms_dp_linktrain_fallback.c +++ b/tests/intel/kms_dp_linktrain_fallback.c @@ -16,6 +16,7 @@ #include #include "igt_sysfs.h" #include "igt.h" +#include "kms_mst_helper.h" /** * SUBTEST: dp-fallback @@ -47,28 +48,6 @@ typedef int (*condition_check_fn)(int drm_fd, igt_output_t *output); IGT_TEST_DESCRIPTION("Test link training fallback"); -static void find_mst_outputs(int drm_fd, data_t *data, - igt_output_t *output, - igt_output_t *mst_outputs[], - int *num_mst_outputs) -{ - int output_root_id, root_id; - igt_output_t *connector_output; - - output_root_id = igt_get_dp_mst_connector_id(output); - /* - * If output is MST check all other connected output which shares - * same path and fill mst_outputs and num_mst_outputs - */ - for_each_connected_output(&data->display, connector_output) { - if (!igt_check_output_is_dp_mst(connector_output)) - continue; - root_id = igt_get_dp_mst_connector_id(connector_output); - if (((*num_mst_outputs) < IGT_MAX_PIPES) && root_id == output_root_id) - mst_outputs[(*num_mst_outputs)++] = connector_output; - } -} - static bool setup_mst_outputs(data_t *data, igt_output_t *mst_output[], int *output_count) { @@ -83,8 +62,9 @@ static bool setup_mst_outputs(data_t *data, igt_output_t *mst_output[], traversed_mst_outputs[i] == data->output->config.connector->connector_id) return false; - find_mst_outputs(data->drm_fd, data, data->output, - mst_output, output_count); + igt_assert_f(igt_find_all_mst_output_in_topology(data->drm_fd, &data->display, data->output, + mst_output, output_count), + "Unable to find mst outputs\n"); for (i = 0; i < *output_count; i++) { output = mst_output[i]; diff --git a/tests/intel/kms_mst_helper.c b/tests/intel/kms_mst_helper.c new file mode 100644 index 000000000..9d52068f7 --- /dev/null +++ b/tests/intel/kms_mst_helper.c @@ -0,0 +1,48 @@ +#include "kms_mst_helper.h" + +/* + * @drm_fd: DRM file descriptor + * @display: pointer to an #igt_display_t structure + * @output: target output + * @mst_outputs: filled with mst output of same toplogy as @output + * @num_mst_outputs: filled with count of mst outputs found in topology + * @n_pipes: total number of pipes available + * @used_pipes_mask: pointer to a bitmask (in/out) of already-used pipes + * @master_pipes_mask: bitmask of valid "master" pipes + * @valid_pipes_mask: bitmask of valid (non-fused) pipes + * + * Assign pipes to outputs based on the number of required pipes. + * This function will assign 1, 2, or 4 consecutive pipes to each output. + * It will also mark the used pipes in the bitmask. + * + * Returns: true if all outputs can be assigned successfully; false otherwise. + */ +bool igt_find_all_mst_output_in_topology(int drm_fd, igt_display_t *display, + igt_output_t *output, + igt_output_t *mst_outputs[], + int *num_mst_outputs) +{ + int output_root_id, root_id; + igt_output_t *connector_output; + + if (!igt_check_output_is_dp_mst(output)) + return false; + + output_root_id = igt_get_dp_mst_connector_id(output); + if (output_root_id == -EINVAL) + return false; + + /* + * If output is MST, check all other connected output which shares + * same path and fill mst_outputs and num_mst_outputs + */ + for_each_connected_output(display, connector_output) { + if (!igt_check_output_is_dp_mst(connector_output)) + continue; + + root_id = igt_get_dp_mst_connector_id(connector_output); + if (((*num_mst_outputs) < IGT_MAX_PIPES) && root_id == output_root_id) + mst_outputs[(*num_mst_outputs)++] = connector_output; + } + return true; +} diff --git a/tests/intel/kms_mst_helper.h b/tests/intel/kms_mst_helper.h new file mode 100644 index 000000000..291fcebfe --- /dev/null +++ b/tests/intel/kms_mst_helper.h @@ -0,0 +1,10 @@ +#ifndef KMS_MST_HELPER_H +#define KMS_MST_HELPER_H + +#include "igt.h" + +bool igt_find_all_mst_output_in_topology(int drm_fd, igt_display_t *display, + igt_output_t *output, + igt_output_t *mst_outputs[], + int *num_mst_outputs); +#endif diff --git a/tests/meson.build b/tests/meson.build index 40e75b671..6e321649f 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -368,6 +368,7 @@ extra_sources = { 'kms_chamelium_hpd': [ join_paths ('chamelium', 'kms_chamelium_helper.c') ], 'kms_dsc': [ join_paths ('intel', 'kms_dsc_helper.c') ], 'kms_joiner': [join_paths ('intel', 'kms_joiner_helper.c')], + 'kms_dp_linktrain_fallback': [join_paths ('intel', 'kms_mst_helper.c')], 'kms_psr2_sf': [ join_paths ('intel', 'kms_dsc_helper.c') ], } -- 2.25.1