[PATCH 4/5] tests/intel/kms_linktrain_fallback: extend test for eDP connector
B, Jeevan
jeevan.b at intel.com
Mon Jun 30 07:51:42 UTC 2025
> -----Original Message-----
> From: igt-dev <igt-dev-bounces at lists.freedesktop.org> On Behalf Of Kunal Joshi
> Sent: Wednesday, June 25, 2025 6:04 PM
> To: igt-dev at lists.freedesktop.org
> Cc: Joshi, Kunal1 <kunal1.joshi at intel.com>; Deak, Imre <imre.deak at intel.com>;
> Murthy, Arun R <arun.r.murthy at intel.com>
> Subject: [PATCH 4/5] tests/intel/kms_linktrain_fallback: extend test for eDP
> connector
>
> Rename dp-fallback subtest name to lt-fallback and add additional logic in
> test_fallback to handle eDP fallback.
>
> In eDP fallback on the initial link training failure expectation is to retry with max
> link rate and max lane count that is supported, Further failures leads to reduction
> in either link rate or lane count.
>
> Cc: Imre Deak <imre.deak at intel.com>
> Cc: Arun R Murthy <arun.r.murthy at intel.com>
> Signed-off-by: Kunal Joshi <kunal1.joshi at intel.com>
> ---
> tests/intel/kms_linktrain_fallback.c | 43 +++++++++++++++++++---------
> 1 file changed, 29 insertions(+), 14 deletions(-)
>
> diff --git a/tests/intel/kms_linktrain_fallback.c
> b/tests/intel/kms_linktrain_fallback.c
> index f8ef0cac4..8ac36a86c 100644
> --- a/tests/intel/kms_linktrain_fallback.c
> +++ b/tests/intel/kms_linktrain_fallback.c
> @@ -18,8 +18,8 @@
> #include "kms_dsc_helper.h"
>
> /**
> - * SUBTEST: dp-fallback
> - * Description: Test fallback on DP connectors
> + * SUBTEST: lt-fallback
> + * Description: Test Link Training fallback on DP/eDP connectors
> *
> * SUBTEST: dsc-fallback
> * Description: Test fallback to DSC when BW isn't sufficient @@ -336,11
> +336,12 @@ static bool fix_link_status_and_recommit(data_t *data,
> return true;
> }
>
> -static void test_fallback(data_t *data, bool is_mst)
> +static void test_fallback(data_t *data, bool is_mst, bool is_edp)
> {
> int output_count, retries;
> int max_link_rate, curr_link_rate, prev_link_rate;
> int max_lane_count, curr_lane_count, prev_lane_count;
> + int iter = 0;
> igt_output_t *outputs[IGT_MAX_PIPES];
> drmModeModeInfo * modes[IGT_MAX_PIPES];
> struct igt_fb fbs[IGT_MAX_PIPES];
> @@ -365,6 +366,7 @@ static void test_fallback(data_t *data, bool is_mst)
>
> while (!igt_get_dp_link_retrain_disabled(data->drm_fd,
> data->output)) {
> + iter++;
> igt_info("Current link rate: %d, Current lane count: %d\n",
> prev_link_rate,
> prev_lane_count);
> @@ -400,10 +402,19 @@ static void test_fallback(data_t *data, bool is_mst)
> curr_link_rate = igt_get_current_link_rate(data->drm_fd, data-
> >output);
> curr_lane_count = igt_get_current_lane_count(data->drm_fd,
> data->output);
>
> - igt_assert_f((curr_link_rate < prev_link_rate ||
> - curr_lane_count < prev_lane_count) ||
> - ((curr_link_rate == max_link_rate &&
> curr_lane_count == max_lane_count) && --retries),
> - "Fallback unsuccessful\n");
> + if (is_edp && iter == 1) {
> + /* eDP first retry must stay at max, no reduction */
> + igt_assert_eq(curr_link_rate, prev_link_rate);
> + igt_assert_eq(curr_lane_count, prev_lane_count);
> + } else {
> + /* Otherwise DP‐style fallback: either shrink or allow
> spurious retry */
> + igt_assert_f((curr_link_rate < prev_link_rate ||
> + curr_lane_count < prev_lane_count) ||
> + ((curr_link_rate == max_link_rate &&
> + curr_lane_count == max_lane_count) &&
> + --retries),
> + "Fallback unsuccessful\n");
> + }
>
> prev_link_rate = curr_link_rate;
> prev_lane_count = curr_lane_count;
> @@ -413,10 +424,14 @@ static void test_fallback(data_t *data, bool is_mst)
> static bool run_lt_fallback_test(data_t *data) {
> bool ran = false;
> + bool is_edp = false;
> + bool is_dp = false;
> igt_output_t *output;
>
> for_each_connected_output(&data->display, output) {
> data->output = output;
> + is_edp = output->config.connector->connector_type ==
> DRM_MODE_CONNECTOR_eDP;
> + is_dp = output->config.connector->connector_type ==
> +DRM_MODE_CONNECTOR_DisplayPort;
>
> if (!igt_has_force_link_training_failure_debugfs(data->drm_fd,
> data-
> >output)) {
> @@ -425,8 +440,8 @@ static bool run_lt_fallback_test(data_t *data)
> continue;
> }
>
> - if (output->config.connector->connector_type !=
> DRM_MODE_CONNECTOR_DisplayPort) {
> - igt_info("Skipping output %s as it's not DP\n", output-
> >name);
> + if (!(is_edp || is_dp)) {
> + igt_info("Skipping output %s as it's not DP/eDP\n",
> output->name);
We can re-use the helper suggested in the previous patch comments here.
> continue;
> }
>
> @@ -438,11 +453,12 @@ static bool run_lt_fallback_test(data_t *data)
> if (igt_check_output_is_dp_mst(data->output)) {
> igt_info("Testing MST output %s\n",
> igt_output_name(data->output));
> - test_fallback(data, true);
> + test_fallback(data, true, false);
> } else {
> - igt_info("Testing DP output %s\n",
> + igt_info("Testing %s output %s\n",
> + is_edp ? "eDP" : "DP",
> igt_output_name(data->output));
> - test_fallback(data, false);
> + test_fallback(data, false, is_edp);
> }
> }
> return ran;
> @@ -511,7 +527,6 @@ static void test_dsc_sst_fallback(data_t *data)
> /* Repeatedly force link failure until DSC is required (or link is disabled) */
> while (!igt_get_dp_link_retrain_disabled(data->drm_fd, data->output)) {
> mon = igt_watch_uevents();
> -
> igt_assert_f(force_failure_and_wait(data, data->output,
>
> LT_FAILURE_REDUCED_CAPS,
> RETRAIN_COUNT, 1.0, 20.0),
> @@ -621,7 +636,7 @@ igt_main
> "Unable to disable ignore long hpd\n");
> }
>
> - igt_subtest("dp-fallback") {
> + igt_subtest("lt-fallback") {
> igt_require_f(run_lt_fallback_test(&data),
> "Skipping test as no output found or none supports
> fallback\n");
> }
> --
> 2.25.1
More information about the igt-dev
mailing list