[PATCH v3 1/2] tests/kms_vrr: Add a subtest for seamless modeset to a virtual LRR mode
Saarinen, Jani
jani.saarinen at intel.com
Fri Apr 26 07:48:36 UTC 2024
Hi,
> -----Original Message-----
> From: igt-dev <igt-dev-bounces at lists.freedesktop.org> On Behalf Of Modem,
> Bhanuprakash
> Sent: Friday, 26 April 2024 6.44
> To: Manasi Navare <navaremanasi at chromium.org>
> Cc: igt-dev at lists.freedesktop.org; Drew Davenport
> <ddavenport at chromium.org>; Ville Syrjälä <ville.syrjala at linux.intel.com>;
> Sean Paul <seanpaul at chromium.org>
> Subject: Re: [PATCH v3 1/2] tests/kms_vrr: Add a subtest for seamless
> modeset to a virtual LRR mode
>
> Hi Manasi,
>
> On 25-04-2024 08:50 pm, Manasi Navare wrote:
> > Hi Bhanu,
> >
> > Thanks for the review.
> > This is not specific to edp, it applies to all connectors.
> >
> > If the BAT results look okay and I have your r-b, could we get this merged?
Did you look those.
>
> Looks, BAT results are not OK to me.
Right. To me looks so too.
>
> The newly added test is getting skip on VRR configs:
> https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_11065/bat-
> all.html?testfilter=kms_vrr&hosts=bat-adlp-6%7Cbat-adlp-9%7Cbat-rpls-
> 4%7Cbat-adls-6
>
> - Bhanu
>
> >
> > Regards
> > Manasi
> >
> > On Thu, Apr 25, 2024 at 12:39 AM Modem, Bhanuprakash
> > <bhanuprakash.modem at intel.com> wrote:
> >>
> >> Hi Manasi,
> >>
> >> On 25-04-2024 01:43 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 at chromium.org>
> >>> Cc: Bhanuprakash Modem <bhanuprakash.modem at intel.com>
> >>> Cc: Ville Syrjälä <ville.syrjala at linux.intel.com>
> >>> Cc: Sean Paul <seanpaul at chromium.org>
> >>> Signed-off-by: Manasi Navare <navaremanasi at 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..7f64d6806 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)))
> >>
> >> Does this virtual RR applicable to eDP only or supports other
> >> connector types too? If it is eDP specific [*], then we must add a check for
> that.
> >>
> >> [*]:
> >> https://cgit.freedesktop.org/drm/igt-gpu-tools/tree/tests/kms_vrr.c#n
> >> 660
> >>
> >> With above comment addressed, this patch is
> >> Reviewed-by: Bhanuprakash Modem <bhanuprakash.modem at intel.com>
> >>
> >> - Bhanu
> >>
> >>> 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-rr-switch-virtual")
> >>> + run_vrr_test(&data,
> >>> + test_seamless_virtual_rr_basic, TEST_SEAMLESS_VIRTUAL_RR);
> >>> }
> >>>
> >>> igt_fixture {
More information about the igt-dev
mailing list