* [PATCH v5 2/2] HAX: run kms_vrr tests in BAT
2024-04-10 19:03 [PATCH v5 1/2] tests/kms_vrr: Add a subtest for seamless modeset to a virtual LRR mode Manasi Navare
@ 2024-04-10 19:03 ` Manasi Navare
2024-04-10 19:05 ` [PATCH v5 1/2] tests/kms_vrr: Add a subtest for seamless modeset to a virtual LRR mode Manasi Navare
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Manasi Navare @ 2024-04-10 19:03 UTC (permalink / raw)
To: igt-dev; +Cc: Manasi Navare
Signed-off-by: Manasi Navare <navaremanasi@chromium.org>
---
tests/intel-ci/fast-feedback.testlist | 1 +
1 file changed, 1 insertion(+)
diff --git a/tests/intel-ci/fast-feedback.testlist b/tests/intel-ci/fast-feedback.testlist
index be0965110..53a364ae6 100644
--- a/tests/intel-ci/fast-feedback.testlist
+++ b/tests/intel-ci/fast-feedback.testlist
@@ -129,6 +129,7 @@ igt@kms_psr@psr-cursor-plane-move
igt@kms_psr@psr-sprite-plane-onoff
igt@kms_psr@psr-primary-mmap-gtt
igt@kms_setmode@basic-clone-single-crtc
+igt@kms_vrr
igt@i915_pm_rps@basic-api
igt@prime_self_import@basic-llseek-bad
igt@prime_self_import@basic-llseek-size
--
2.44.0.478.gd926399ef9-goog
^ permalink raw reply related [flat|nested] 6+ messages in thread* Re: [PATCH v5 1/2] tests/kms_vrr: Add a subtest for seamless modeset to a virtual LRR mode
2024-04-10 19:03 [PATCH v5 1/2] tests/kms_vrr: Add a subtest for seamless modeset to a virtual LRR mode Manasi Navare
2024-04-10 19:03 ` [PATCH v5 2/2] HAX: run kms_vrr tests in BAT Manasi Navare
@ 2024-04-10 19:05 ` Manasi Navare
2024-04-11 1:40 ` ✗ Fi.CI.BUILD: failure for series starting with [v5,1/2] " Patchwork
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Manasi Navare @ 2024-04-10 19:05 UTC (permalink / raw)
To: igt-dev
Cc: Drew Davenport, Bhanuprakash Modem, Ville Syrjälä,
Sean Paul
Hi Bhanu,
I have addressed your review comments and also created a HAX patch
with this to add kms_vrr to BAT tests.
Could you please review this.
Regards
Manasi
On Wed, Apr 10, 2024 at 12:03 PM Manasi Navare
<navaremanasi@chromium.org> wrote:
>
> This subtest validates LRR fastset functionality by testing seamless switching
> without full modeset to any of the virtual LRR mode within VRR range.
> Here we start from highest refresh rate mode and then switch to virtual LRR
> modes in the steps of 10Hz within the VRR range.
>
> This is used to test the LRR fastset functionality of the driver.
>
> v5:
> - Pass a reference to flip_and_measure (bhanu)
> - Add a new line between between declaration and code logic
>
> v4:
> - Change the test name to align with drrs/vrr tests (Bhanu)
> - Fix some build warnings due to rebase
> - Use a local virtual_mode variable
>
> v3:
> - Fix build error due to rebase (Manasi)
>
> Cc: Drew Davenport <ddavenport@chromium.org>
> Cc: Bhanuprakash Modem <bhanuprakash.modem@intel.com>
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Cc: Sean Paul <seanpaul@chromium.org>
> Signed-off-by: Manasi Navare <navaremanasi@chromium.org>
> ---
> tests/kms_vrr.c | 73 ++++++++++++++++++++++++++++++++++++++++++++++---
> 1 file changed, 69 insertions(+), 4 deletions(-)
>
> diff --git a/tests/kms_vrr.c b/tests/kms_vrr.c
> index 15c62b34b..c392e10d8 100644
> --- a/tests/kms_vrr.c
> +++ b/tests/kms_vrr.c
> @@ -66,6 +66,11 @@
> * Description: Test to switch RR seamlessly without modeset.
> * Functionality: adaptive_sync, drrs
> *
> + * SUBTEST: seamless-rr-switch-virtual
> + * Description: Test to create a Virtual Mode in VRR range and switch to it
> + * without a full modeset.
> + * Functionality: LRR
> + *
> * SUBTEST: max-min
> * Description: Oscillates between highest and lowest refresh each frame for
> * manual flicker profiling
> @@ -89,9 +94,10 @@ enum {
> TEST_FLIPLINE = 1 << 3,
> TEST_SEAMLESS_VRR = 1 << 4,
> TEST_SEAMLESS_DRRS = 1 << 5,
> - TEST_FASTSET = 1 << 6,
> - TEST_MAXMIN = 1 << 7,
> - TEST_NEGATIVE = 1 << 8,
> + TEST_SEAMLESS_VIRTUAL_RR = 1 << 6,
> + TEST_FASTSET = 1 << 7,
> + TEST_MAXMIN = 1 << 8,
> + TEST_NEGATIVE = 1 << 9,
> };
>
> enum {
> @@ -214,6 +220,18 @@ low_rr_mode_with_same_res(igt_output_t *output, unsigned int vrr_min)
> return mode;
> }
>
> +static drmModeModeInfo
> +virtual_rr_vrr_range_mode(igt_output_t *output, unsigned int virtual_refresh_rate)
> +{
> + drmModeModeInfo mode = *igt_output_get_mode(output);
> + uint64_t clock_hz = mode.clock * 1000;
> +
> + mode.vtotal = clock_hz / (mode.htotal * virtual_refresh_rate);
> + mode.vrefresh = virtual_refresh_rate;
> +
> + return mode;
> +}
> +
> /* Read min and max vrr range from the connector debugfs. */
> static range_t
> get_vrr_range(data_t *data, igt_output_t *output)
> @@ -641,6 +659,49 @@ test_seamless_rr_basic(data_t *data, enum pipe pipe, igt_output_t *output, uint3
> vrr ? "on" : "off", vrr ? "not reached" : "exceeded", result);
> }
>
> +static void
> +test_seamless_virtual_rr_basic(data_t *data, enum pipe pipe, igt_output_t *output, uint32_t flags)
> +{
> + uint32_t result;
> + unsigned int vrefresh;
> + uint64_t rate[] = {0};
> +
> + igt_info("Use HIGH_RR Mode as default\n");
> + kmstest_dump_mode(&data->switch_modes[HIGH_RR_MODE]);
> +
> + prepare_test(data, output, pipe);
> + rate[0] = rate_from_refresh(data->switch_modes[HIGH_RR_MODE].vrefresh);
> +
> + /*
> + * Sink with DRR and VRR can be in downclock mode so
> + * switch to highest refresh rate mode.
> + */
> + igt_output_override_mode(output, &data->switch_modes[HIGH_RR_MODE]);
> + igt_assert(igt_display_try_commit_atomic(&data->display, DRM_MODE_PAGE_FLIP_EVENT, NULL) == 0);
> +
> + result = flip_and_measure(data, output, pipe, rate, 1, TEST_DURATION_NS);
> + igt_assert_f(result > 75,
> + "Refresh rate (%u Hz) %"PRIu64"ns: Target threshold not reached, result was %u%%\n",
> + data->switch_modes[HIGH_RR_MODE].vrefresh, rate[0], result);
> +
> + /* Switch to Virtual RR */
> + for (vrefresh = data->range.min + 10; vrefresh < data->range.max; vrefresh += 10) {
> + drmModeModeInfo virtual_mode = virtual_rr_vrr_range_mode(output, vrefresh);
> +
> + igt_info("Requesting Virtual Mode with Refresh Rate (%u Hz): \n", vrefresh);
> + kmstest_dump_mode(&virtual_mode);
> +
> + igt_output_override_mode(output, &virtual_mode);
> + igt_assert(igt_display_try_commit_atomic(&data->display, 0, NULL) == 0);
> +
> + rate[0] = rate_from_refresh(vrefresh);
> + result = flip_and_measure(data, output, pipe, rate, 1, TEST_DURATION_NS);
> + igt_assert_f(result > 75,
> + "Refresh rate (%u Hz) %"PRIu64"ns: Target threshold not reached, result was %u%%\n",
> + vrefresh, rate[0], result);
> + }
> +}
> +
> static void test_cleanup(data_t *data, enum pipe pipe, igt_output_t *output)
> {
> if (vrr_capable(output))
> @@ -686,7 +747,7 @@ static bool output_constraint(data_t *data, igt_output_t *output, uint32_t flags
> igt_output_override_mode(output, &data->switch_modes[HIGH_RR_MODE]);
>
> /* Search for a low refresh rate mode. */
> - if (!(flags & (TEST_SEAMLESS_VRR | TEST_SEAMLESS_DRRS)))
> + if (!(flags & (TEST_SEAMLESS_VRR | TEST_SEAMLESS_DRRS | TEST_SEAMLESS_VIRTUAL_RR)))
> return true;
>
> data->switch_modes[LOW_RR_MODE] = low_rr_mode_with_same_res(output, data->range.min);
> @@ -841,6 +902,10 @@ igt_main_args("drs:", long_opts, help_str, opt_handler, &data)
> "between flip timestamps converges to the requested rate");
> igt_subtest_with_dynamic("flip-basic-fastset")
> run_vrr_test(&data, test_basic, TEST_FASTSET);
> +
> + igt_describe("Test to switch to any custom virtual mode in VRR range without modeset.");
> + igt_subtest_with_dynamic("seamless-virtual-rr-switch")
> + run_vrr_test(&data, test_seamless_virtual_rr_basic, TEST_SEAMLESS_VIRTUAL_RR);
> }
>
> igt_fixture {
> --
> 2.44.0.478.gd926399ef9-goog
>
^ permalink raw reply [flat|nested] 6+ messages in thread* ✗ Fi.CI.BUILD: failure for series starting with [v5,1/2] tests/kms_vrr: Add a subtest for seamless modeset to a virtual LRR mode
2024-04-10 19:03 [PATCH v5 1/2] tests/kms_vrr: Add a subtest for seamless modeset to a virtual LRR mode Manasi Navare
2024-04-10 19:03 ` [PATCH v5 2/2] HAX: run kms_vrr tests in BAT Manasi Navare
2024-04-10 19:05 ` [PATCH v5 1/2] tests/kms_vrr: Add a subtest for seamless modeset to a virtual LRR mode Manasi Navare
@ 2024-04-11 1:40 ` Patchwork
2024-04-11 1:46 ` ✗ GitLab.Pipeline: warning " Patchwork
2024-04-15 6:52 ` [PATCH v5 1/2] " Modem, Bhanuprakash
4 siblings, 0 replies; 6+ messages in thread
From: Patchwork @ 2024-04-11 1:40 UTC (permalink / raw)
To: Manasi Navare; +Cc: igt-dev
== Series Details ==
Series: series starting with [v5,1/2] tests/kms_vrr: Add a subtest for seamless modeset to a virtual LRR mode
URL : https://patchwork.freedesktop.org/series/132297/
State : failure
== Summary ==
IGT patchset build failed on latest successful build
e490cb6ffc497275544b36871c24af0a04f98470 lib: fix calloc calls with inverted arguments
Tail of build.log:
[1633/1676] Linking target tools/intel_gvtg_test.
[1634/1676] Linking target tools/intel_panel_fitter.
[1635/1676] Linking target tools/intel_gem_info.
[1636/1676] Linking target runner/testdata/no-subtests.
[1637/1676] Linking target tools/lsgpu.
[1638/1676] Linking target tools/intel_stepping.
[1639/1676] Linking target tools/intel_l3_parity.
[1640/1676] Linking target tools/intel_watermark.
[1641/1676] Linking target tools/msm_dp_compliance.
[1642/1676] Generating gem_stress.testlist with a meson_exe.py custom command.
[1643/1676] Linking target runner/testdata/abort-dynamic.
[1644/1676] Linking target runner/testdata/abort-simple.
[1645/1676] Linking target runner/igt_comms_decoder.
[1646/1676] Linking target tools/intel_dp_compliance.
[1647/1676] Linking target runner/testdata/abort-fixture.
[1648/1676] Linking target runner/testdata/dynamic.
[1649/1676] Linking target runner/igt_resume.
[1650/1676] Linking target runner/igt_runner.
[1651/1676] Linking target runner/igt_results.
[1652/1676] Linking target runner/runner_json_test.
[1653/1676] Compiling C object 'lib/76b5a35@@i915_perf@sha/meson-generated_.._i915_perf_metrics_acmgt1.c.o'.
[1654/1676] Compiling C object 'runner/527aa9f@@runner_test@exe/runner_tests.c.o'.
[1655/1676] Linking target runner/runner_test.
[1656/1676] Compiling C object 'lib/76b5a35@@i915_perf@sha/meson-generated_.._i915_perf_metrics_acmgt2.c.o'.
[1657/1676] Compiling C object 'lib/76b5a35@@i915_perf@sha/meson-generated_.._i915_perf_metrics_acmgt3.c.o'.
[1658/1676] Linking target lib/libi915_perf.so.1.5.
[1659/1676] Generating symbol file 'lib/76b5a35@@i915_perf@sha/libi915_perf.so.1.5.symbols'.
[1660/1676] Linking target tools/i915-perf/i915-perf-configs.
[1661/1676] Linking target tools/i915-perf/i915-perf-recorder.
[1662/1676] Linking target tests/gem_barrier_race.
[1663/1676] Linking target tests/core_hotunplug.
[1664/1676] Linking target tools/i915-perf/i915-perf-reader.
[1665/1676] Linking target tests/perf.
[1666/1676] Generating gem_barrier_race.testlist with a meson_exe.py custom command.
[1667/1676] Generating perf.testlist with a meson_exe.py custom command.
[1668/1676] Generating core_hotunplug.testlist with a meson_exe.py custom command.
[1669/1676] Generating xe_tests.rst with a custom command.
Warning: igt@xe_waitfence@exec_queue-reset-wait Sub-category documentation is missing
Warning: igt@xe_waitfence@invalid-flag Sub-category documentation is missing
Warning: igt@xe_waitfence@invalid-ops Sub-category documentation is missing
[1670/1676] Generating kms_tests.rst with a custom command.
FAILED: docs/testplan/kms_tests.rst
/usr/src/igt-gpu-tools/scripts/igt_doc.py --config /usr/src/igt-gpu-tools/tests/intel/kms_test_config.json --rest docs/testplan/kms_tests.rst --check-testlist --igt-build-path /opt/igt/build
Warning: Documented igt@kms_vrr@seamless-rr-switch-virtual doesn't exist on source files
Warning: Missing documentation for igt@kms_vrr@seamless-virtual-rr-switch
Please refer: docs/test_documentation.md for more details
[1671/1676] Generating i915_tests.rst with a custom command.
[1672/1676] Generating intel-ci-tests with a custom command.
[1673/1676] Generating xe_tests.html with a custom command.
ninja: build stopped: subcommand failed.
^ permalink raw reply [flat|nested] 6+ messages in thread
* ✗ GitLab.Pipeline: warning for series starting with [v5,1/2] tests/kms_vrr: Add a subtest for seamless modeset to a virtual LRR mode
2024-04-10 19:03 [PATCH v5 1/2] tests/kms_vrr: Add a subtest for seamless modeset to a virtual LRR mode Manasi Navare
` (2 preceding siblings ...)
2024-04-11 1:40 ` ✗ Fi.CI.BUILD: failure for series starting with [v5,1/2] " Patchwork
@ 2024-04-11 1:46 ` Patchwork
2024-04-15 6:52 ` [PATCH v5 1/2] " Modem, Bhanuprakash
4 siblings, 0 replies; 6+ messages in thread
From: Patchwork @ 2024-04-11 1:46 UTC (permalink / raw)
To: Manasi Navare; +Cc: igt-dev
== Series Details ==
Series: series starting with [v5,1/2] tests/kms_vrr: Add a subtest for seamless modeset to a virtual LRR mode
URL : https://patchwork.freedesktop.org/series/132297/
State : warning
== Summary ==
Pipeline status: FAILED.
see https://gitlab.freedesktop.org/gfx-ci/igt-ci-tags/-/pipelines/1151210 for the overview.
build:tests-debian-meson has failed (https://gitlab.freedesktop.org/gfx-ci/igt-ci-tags/-/jobs/57468451):
[1793/1798] Generating intel-ci-tests with a custom command.
[1794/1798] Generating xe_tests.html with a custom command.
[1795/1798] Compiling C object 'runner/527aa9f@@runner_test@exe/runner_tests.c.o'.
ninja: build stopped: subcommand failed.
ninja: Entering directory `build'
[1/822] Generating version.h with a custom command.
[2/6] Linking target runner/runner_test.
[3/6] Generating kms_tests.rst with a custom command.
FAILED: docs/testplan/kms_tests.rst
/builds/gfx-ci/igt-ci-tags/scripts/igt_doc.py --config /builds/gfx-ci/igt-ci-tags/tests/intel/kms_test_config.json --rest docs/testplan/kms_tests.rst --check-testlist --igt-build-path /builds/gfx-ci/igt-ci-tags/build
Warning: Documented igt@kms_vrr@seamless-rr-switch-virtual doesn't exist on source files
Warning: Missing documentation for igt@kms_vrr@seamless-virtual-rr-switch
Please refer: docs/test_documentation.md for more details
ninja: build stopped: subcommand failed.
section_end:1712799745:step_script
section_start:1712799745:cleanup_file_variables
Cleaning up project directory and file based variables
section_end:1712799746:cleanup_file_variables
ERROR: Job failed: exit code 1
build:tests-fedora has failed (https://gitlab.freedesktop.org/gfx-ci/igt-ci-tags/-/jobs/57468446):
[1801/1804] Compiling C object 'runner/527aa9f@@runner_test@exe/runner_tests.c.o'.
ninja: build stopped: subcommand failed.
ninja: Entering directory `build'
[1/824] Generating version.h with a custom command.
[2/6] Linking target runner/runner_test.
[3/6] Generating i915_tests.html with a custom command.
[4/6] Generating intel-ci-tests with a custom command.
[5/6] Generating kms_tests.rst with a custom command.
FAILED: docs/testplan/kms_tests.rst
/builds/gfx-ci/igt-ci-tags/scripts/igt_doc.py --config /builds/gfx-ci/igt-ci-tags/tests/intel/kms_test_config.json --rest docs/testplan/kms_tests.rst --check-testlist --igt-build-path /builds/gfx-ci/igt-ci-tags/build
Warning: Documented igt@kms_vrr@seamless-rr-switch-virtual doesn't exist on source files
Warning: Missing documentation for igt@kms_vrr@seamless-virtual-rr-switch
Please refer: docs/test_documentation.md for more details
ninja: build stopped: subcommand failed.
section_end:1712799735:step_script
section_start:1712799735:cleanup_file_variables
Cleaning up project directory and file based variables
section_end:1712799737:cleanup_file_variables
ERROR: Job failed: exit code 1
build:tests-fedora-clang has failed (https://gitlab.freedesktop.org/gfx-ci/igt-ci-tags/-/jobs/57468450):
[1801/1804] Generating intel-ci-tests with a custom command.
[1802/1804] Generating xe_tests.html with a custom command.
[1803/1804] Generating i915_tests.html with a custom command.
ninja: build stopped: subcommand failed.
ninja: Entering directory `build'
[1/824] Generating version.h with a custom command.
[2/4] Generating intel-ci-tests with a custom command.
[3/4] Generating kms_tests.rst with a custom command.
FAILED: docs/testplan/kms_tests.rst
/builds/gfx-ci/igt-ci-tags/scripts/igt_doc.py --config /builds/gfx-ci/igt-ci-tags/tests/intel/kms_test_config.json --rest docs/testplan/kms_tests.rst --check-testlist --igt-build-path /builds/gfx-ci/igt-ci-tags/build
Warning: Documented igt@kms_vrr@seamless-rr-switch-virtual doesn't exist on source files
Warning: Missing documentation for igt@kms_vrr@seamless-virtual-rr-switch
Please refer: docs/test_documentation.md for more details
ninja: build stopped: subcommand failed.
section_end:1712799754:step_script
section_start:1712799754:cleanup_file_variables
Cleaning up project directory and file based variables
section_end:1712799755:cleanup_file_variables
ERROR: Job failed: exit code 1
build:tests-fedora-no-libdrm-nouveau has failed (https://gitlab.freedesktop.org/gfx-ci/igt-ci-tags/-/jobs/57468449):
[1633/1636] Compiling C object 'runner/527aa9f@@runner_test@exe/runner_tests.c.o'.
ninja: build stopped: subcommand failed.
ninja: Entering directory `build'
[1/773] Generating version.h with a custom command.
[2/6] Linking target runner/runner_test.
[3/6] Generating i915_tests.html with a custom command.
[4/6] Generating intel-ci-tests with a custom command.
[5/6] Generating kms_tests.rst with a custom command.
FAILED: docs/testplan/kms_tests.rst
/builds/gfx-ci/igt-ci-tags/scripts/igt_doc.py --config /builds/gfx-ci/igt-ci-tags/tests/intel/kms_test_config.json --rest docs/testplan/kms_tests.rst --check-testlist --igt-build-path /builds/gfx-ci/igt-ci-tags/build
Warning: Documented igt@kms_vrr@seamless-rr-switch-virtual doesn't exist on source files
Warning: Missing documentation for igt@kms_vrr@seamless-virtual-rr-switch
Please refer: docs/test_documentation.md for more details
ninja: build stopped: subcommand failed.
section_end:1712799744:step_script
section_start:1712799744:cleanup_file_variables
Cleaning up project directory and file based variables
section_end:1712799745:cleanup_file_variables
ERROR: Job failed: exit code 1
build:tests-fedora-no-libunwind has failed (https://gitlab.freedesktop.org/gfx-ci/igt-ci-tags/-/jobs/57468447):
[1801/1804] Compiling C object 'runner/527aa9f@@runner_test@exe/runner_tests.c.o'.
ninja: build stopped: subcommand failed.
ninja: Entering directory `build'
[1/824] Generating version.h with a custom command.
[2/6] Linking target runner/runner_test.
[3/6] Generating i915_tests.html with a custom command.
[4/6] Generating intel-ci-tests with a custom command.
[5/6] Generating kms_tests.rst with a custom command.
FAILED: docs/testplan/kms_tests.rst
/builds/gfx-ci/igt-ci-tags/scripts/igt_doc.py --config /builds/gfx-ci/igt-ci-tags/tests/intel/kms_test_config.json --rest docs/testplan/kms_tests.rst --check-testlist --igt-build-path /builds/gfx-ci/igt-ci-tags/build
Warning: Documented igt@kms_vrr@seamless-rr-switch-virtual doesn't exist on source files
Warning: Missing documentation for igt@kms_vrr@seamless-virtual-rr-switch
Please refer: docs/test_documentation.md for more details
ninja: build stopped: subcommand failed.
section_end:1712799749:step_script
section_start:1712799749:cleanup_file_variables
Cleaning up project directory and file based variables
section_end:1712799749:cleanup_file_variables
ERROR: Job failed: exit code 1
build:tests-fedora-oldest-meson has failed (https://gitlab.freedesktop.org/gfx-ci/igt-ci-tags/-/jobs/57468448):
[1801/1804] Compiling C object 'runner/runner@@runner_test@exe/runner_tests.c.o'.
[1802/1804] Generating i915_tests.html with a custom command.
ninja: build stopped: subcommand failed.
ninja: Entering directory `build'
[1/824] Generating version.h with a custom command.
[2/5] Linking target runner/runner_test.
[3/5] Generating intel-ci-tests with a custom command.
[4/5] Generating kms_tests.rst with a custom command.
FAILED: docs/testplan/kms_tests.rst
/builds/gfx-ci/igt-ci-tags/scripts/igt_doc.py --config /builds/gfx-ci/igt-ci-tags/tests/intel/kms_test_config.json --rest docs/testplan/kms_tests.rst --check-testlist --igt-build-path /builds/gfx-ci/igt-ci-tags/build
Warning: Documented igt@kms_vrr@seamless-rr-switch-virtual doesn't exist on source files
Warning: Missing documentation for igt@kms_vrr@seamless-virtual-rr-switch
Please refer: docs/test_documentation.md for more details
ninja: build stopped: subcommand failed.
section_end:1712799745:step_script
section_start:1712799745:cleanup_file_variables
Cleaning up project directory and file based variables
section_end:1712799747:cleanup_file_variables
ERROR: Job failed: exit code 1
== Logs ==
For more details see: https://gitlab.freedesktop.org/gfx-ci/igt-ci-tags/-/pipelines/1151210
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: [PATCH v5 1/2] tests/kms_vrr: Add a subtest for seamless modeset to a virtual LRR mode
2024-04-10 19:03 [PATCH v5 1/2] tests/kms_vrr: Add a subtest for seamless modeset to a virtual LRR mode Manasi Navare
` (3 preceding siblings ...)
2024-04-11 1:46 ` ✗ GitLab.Pipeline: warning " Patchwork
@ 2024-04-15 6:52 ` Modem, Bhanuprakash
4 siblings, 0 replies; 6+ messages in thread
From: Modem, Bhanuprakash @ 2024-04-15 6:52 UTC (permalink / raw)
To: Manasi Navare, igt-dev; +Cc: Drew Davenport, Ville Syrjälä, Sean Paul
Hi Manasi,
On 11-04-2024 12:33 am, Manasi Navare wrote:
> This subtest validates LRR fastset functionality by testing seamless switching
> without full modeset to any of the virtual LRR mode within VRR range.
> Here we start from highest refresh rate mode and then switch to virtual LRR
> modes in the steps of 10Hz within the VRR range.
>
> This is used to test the LRR fastset functionality of the driver.
>
> v5:
> - Pass a reference to flip_and_measure (bhanu)
> - Add a new line between between declaration and code logic
>
> v4:
> - Change the test name to align with drrs/vrr tests (Bhanu)
> - Fix some build warnings due to rebase
> - Use a local virtual_mode variable
>
> v3:
> - Fix build error due to rebase (Manasi)
>
> Cc: Drew Davenport <ddavenport@chromium.org>
> Cc: Bhanuprakash Modem <bhanuprakash.modem@intel.com>
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Cc: Sean Paul <seanpaul@chromium.org>
> Signed-off-by: Manasi Navare <navaremanasi@chromium.org>
> ---
> tests/kms_vrr.c | 73 ++++++++++++++++++++++++++++++++++++++++++++++---
> 1 file changed, 69 insertions(+), 4 deletions(-)
>
> diff --git a/tests/kms_vrr.c b/tests/kms_vrr.c
> index 15c62b34b..c392e10d8 100644
> --- a/tests/kms_vrr.c
> +++ b/tests/kms_vrr.c
> @@ -66,6 +66,11 @@
> * Description: Test to switch RR seamlessly without modeset.
> * Functionality: adaptive_sync, drrs
> *
> + * SUBTEST: seamless-rr-switch-virtual
> + * Description: Test to create a Virtual Mode in VRR range and switch to it
> + * without a full modeset.
> + * Functionality: LRR
> + *
> * SUBTEST: max-min
> * Description: Oscillates between highest and lowest refresh each frame for
> * manual flicker profiling
> @@ -89,9 +94,10 @@ enum {
> TEST_FLIPLINE = 1 << 3,
> TEST_SEAMLESS_VRR = 1 << 4,
> TEST_SEAMLESS_DRRS = 1 << 5,
> - TEST_FASTSET = 1 << 6,
> - TEST_MAXMIN = 1 << 7,
> - TEST_NEGATIVE = 1 << 8,
> + TEST_SEAMLESS_VIRTUAL_RR = 1 << 6,
> + TEST_FASTSET = 1 << 7,
> + TEST_MAXMIN = 1 << 8,
> + TEST_NEGATIVE = 1 << 9,
> };
>
> enum {
> @@ -214,6 +220,18 @@ low_rr_mode_with_same_res(igt_output_t *output, unsigned int vrr_min)
> return mode;
> }
>
> +static drmModeModeInfo
> +virtual_rr_vrr_range_mode(igt_output_t *output, unsigned int virtual_refresh_rate)
> +{
> + drmModeModeInfo mode = *igt_output_get_mode(output);
> + uint64_t clock_hz = mode.clock * 1000;
> +
> + mode.vtotal = clock_hz / (mode.htotal * virtual_refresh_rate);
> + mode.vrefresh = virtual_refresh_rate;
> +
> + return mode;
> +}
> +
> /* Read min and max vrr range from the connector debugfs. */
> static range_t
> get_vrr_range(data_t *data, igt_output_t *output)
> @@ -641,6 +659,49 @@ test_seamless_rr_basic(data_t *data, enum pipe pipe, igt_output_t *output, uint3
> vrr ? "on" : "off", vrr ? "not reached" : "exceeded", result);
> }
>
> +static void
> +test_seamless_virtual_rr_basic(data_t *data, enum pipe pipe, igt_output_t *output, uint32_t flags)
> +{
> + uint32_t result;
> + unsigned int vrefresh;
> + uint64_t rate[] = {0};
> +
> + igt_info("Use HIGH_RR Mode as default\n");
> + kmstest_dump_mode(&data->switch_modes[HIGH_RR_MODE]);
> +
> + prepare_test(data, output, pipe);
> + rate[0] = rate_from_refresh(data->switch_modes[HIGH_RR_MODE].vrefresh);
> +
> + /*
> + * Sink with DRR and VRR can be in downclock mode so
> + * switch to highest refresh rate mode.
> + */
> + igt_output_override_mode(output, &data->switch_modes[HIGH_RR_MODE]);
> + igt_assert(igt_display_try_commit_atomic(&data->display, DRM_MODE_PAGE_FLIP_EVENT, NULL) == 0);
> +
> + result = flip_and_measure(data, output, pipe, rate, 1, TEST_DURATION_NS);
> + igt_assert_f(result > 75,
> + "Refresh rate (%u Hz) %"PRIu64"ns: Target threshold not reached, result was %u%%\n",
> + data->switch_modes[HIGH_RR_MODE].vrefresh, rate[0], result);
> +
> + /* Switch to Virtual RR */
> + for (vrefresh = data->range.min + 10; vrefresh < data->range.max; vrefresh += 10) {
> + drmModeModeInfo virtual_mode = virtual_rr_vrr_range_mode(output, vrefresh);
> +
> + igt_info("Requesting Virtual Mode with Refresh Rate (%u Hz): \n", vrefresh);
> + kmstest_dump_mode(&virtual_mode);
> +
> + igt_output_override_mode(output, &virtual_mode);
> + igt_assert(igt_display_try_commit_atomic(&data->display, 0, NULL) == 0);
> +
> + rate[0] = rate_from_refresh(vrefresh);
> + result = flip_and_measure(data, output, pipe, rate, 1, TEST_DURATION_NS);
> + igt_assert_f(result > 75,
> + "Refresh rate (%u Hz) %"PRIu64"ns: Target threshold not reached, result was %u%%\n",
> + vrefresh, rate[0], result);
> + }
> +}
> +
> static void test_cleanup(data_t *data, enum pipe pipe, igt_output_t *output)
> {
> if (vrr_capable(output))
> @@ -686,7 +747,7 @@ static bool output_constraint(data_t *data, igt_output_t *output, uint32_t flags
> igt_output_override_mode(output, &data->switch_modes[HIGH_RR_MODE]);
>
> /* Search for a low refresh rate mode. */
> - if (!(flags & (TEST_SEAMLESS_VRR | TEST_SEAMLESS_DRRS)))
> + if (!(flags & (TEST_SEAMLESS_VRR | TEST_SEAMLESS_DRRS | TEST_SEAMLESS_VIRTUAL_RR)))
> return true;
>
> data->switch_modes[LOW_RR_MODE] = low_rr_mode_with_same_res(output, data->range.min);
> @@ -841,6 +902,10 @@ igt_main_args("drs:", long_opts, help_str, opt_handler, &data)
> "between flip timestamps converges to the requested rate");
> igt_subtest_with_dynamic("flip-basic-fastset")
> run_vrr_test(&data, test_basic, TEST_FASTSET);
> +
> + igt_describe("Test to switch to any custom virtual mode in VRR range without modeset.");
> + igt_subtest_with_dynamic("seamless-virtual-rr-switch")
Overall, the patch LGTM, but please update the test name to fix the
build errors in CI.
r/"seamless-virtual-rr-switch"/"seamless-rr-switch-virtual"/
- Bhanu
> + run_vrr_test(&data, test_seamless_virtual_rr_basic, TEST_SEAMLESS_VIRTUAL_RR);
> }
>
> igt_fixture {
^ permalink raw reply [flat|nested] 6+ messages in thread