<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Aptos;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        font-size:12.0pt;
        font-family:"Aptos",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0in;
        font-size:10.0pt;
        font-family:"Courier New";}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:Consolas;}
span.EmailStyle21
        {mso-style-type:personal-reply;
        font-family:"Aptos",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;
        mso-ligatures:none;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple" style="word-wrap:break-word">
<div class="WordSection1">
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"> Joshi, Kunal1 <kunal1.joshi@intel.com>
<br>
<b>Sent:</b> Monday, July 22, 2024 2:47 PM<br>
<b>To:</b> B, Jeevan <jeevan.b@intel.com>; igt-dev@lists.freedesktop.org<br>
<b>Cc:</b> Manna, Animesh <animesh.manna@intel.com><br>
<b>Subject:</b> Re: [i-g-t,2/2] tests/kms_vrr: Add new test to validate LOBF<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p>Hello Jeevan,<br>
<br>
Please find my comment inline<o:p></o:p></p>
<div>
<p class="MsoNormal">On 7/22/2024 1:20 PM, Jeevan B wrote:<o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<pre>Validate pseudo static refresh rate changes in the VRR with<o:p></o:p></pre>
<pre>fixed refresh rate framework for non-psr scenarios.<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>Signed-off-by: Jeevan B <a href="mailto:jeevan.b@intel.com"><jeevan.b@intel.com></a><o:p></o:p></pre>
<pre>---<o:p></o:p></pre>
<pre> tests/kms_vrr.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++--<o:p></o:p></pre>
<pre> 1 file changed, 55 insertions(+), 2 deletions(-)<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>diff --git a/tests/kms_vrr.c b/tests/kms_vrr.c<o:p></o:p></pre>
<pre>index 7e8885f16..a79819303 100644<o:p></o:p></pre>
<pre>--- a/tests/kms_vrr.c<o:p></o:p></pre>
<pre>+++ b/tests/kms_vrr.c<o:p></o:p></pre>
<pre>@@ -31,12 +31,18 @@<o:p></o:p></pre>
<pre>  */<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre> #include "igt.h"<o:p></o:p></pre>
<pre>+#include "igt_psr.h"<o:p></o:p></pre>
<pre> #include "i915/intel_drrs.h"<o:p></o:p></pre>
<pre> #include "sw_sync.h"<o:p></o:p></pre>
<pre> #include <fcntl.h><o:p></o:p></pre>
<pre> #include <signal.h><o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre> /**<o:p></o:p></pre>
<pre>+ * SUBTEST: lobf<o:p></o:p></pre>
<pre>+ * Description: Test to validate link-off between active frames in non-psr<o:p></o:p></pre>
<pre>+ *              operation<o:p></o:p></pre>
<pre>+ * Functionality: LOBF<o:p></o:p></pre>
<pre>+ *<o:p></o:p></pre>
<pre>  * SUBTEST: cmrr<o:p></o:p></pre>
<pre>  * Description: Test to validate the content rate to exactly match with the<o:p></o:p></pre>
<pre>  *             requested rate without any frame drops.<o:p></o:p></pre>
<pre>@@ -106,7 +112,8 @@ enum {<o:p></o:p></pre>
<pre>        TEST_FASTSET = 1 << 7,<o:p></o:p></pre>
<pre>        TEST_MAXMIN = 1 << 8,<o:p></o:p></pre>
<pre>        TEST_CMRR = 1 << 9,<o:p></o:p></pre>
<pre>-       TEST_NEGATIVE = 1 << 10,<o:p></o:p></pre>
<pre>+       TEST_LINK_OFF = 1 << 10,<o:p></o:p></pre>
<pre>+       TEST_NEGATIVE = 1 << 11,<o:p></o:p></pre>
<pre> };<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre> enum {<o:p></o:p></pre>
<pre>@@ -129,6 +136,7 @@ typedef struct vtest_ns {<o:p></o:p></pre>
<pre> typedef struct data {<o:p></o:p></pre>
<pre>        igt_display_t display;<o:p></o:p></pre>
<pre>        int drm_fd;<o:p></o:p></pre>
<pre>+       int debugfs_fd;<o:p></o:p></pre>
<pre>        igt_plane_t *primary;<o:p></o:p></pre>
<pre>        igt_fb_t fb[2];<o:p></o:p></pre>
<pre>        range_t range;<o:p></o:p></pre>
<pre>@@ -784,6 +792,43 @@ test_seamless_virtual_rr_basic(data_t *data, enum pipe pipe, igt_output_t *outpu<o:p></o:p></pre>
<pre>        }<o:p></o:p></pre>
<pre> }<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>+static void<o:p></o:p></pre>
<pre>+test_lobf(data_t *data, enum pipe pipe, igt_output_t *output, uint32_t flags)<o:p></o:p></pre>
<pre>+{<o:p></o:p></pre>
<pre>+       bool change_mode = false;<o:p></o:p></pre>
<pre>+       time_t startTime = time(NULL);<o:p></o:p></pre>
<pre>+       time_t secs = 4, change_time = 3;<o:p></o:p></pre>
<pre>+       igt_plane_t *primary;<o:p></o:p></pre>
<pre>+       drmModeModeInfo mode = *igt_output_get_mode(output);<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre>+       igt_info("LOBF test execution on %s, PIPE %s with VRR range: (%u-%u) Hz\n",<o:p></o:p></pre>
<pre>+                output->name, kmstest_pipe_name(pipe), data->range.min, data->range.max);<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre>+       igt_require(output->config.connector->connector_type == DRM_MODE_CONNECTOR_eDP);<o:p></o:p></pre>
<pre>+       igt_require(!igt_get_i915_edp_lobf_status(data->drm_fd, output->name));<o:p></o:p></pre>
<pre>+       if (psr_sink_support(data->drm_fd, data->debugfs_fd, PSR_MODE_1, NULL))<o:p></o:p></pre>
</blockquote>
<p class="MsoNormal">How about PSR2, PR ...?<o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">This should cover for PSR2, PR is not required here I think.
<o:p></o:p></span></p>
<p class="MsoNormal"><br>
<br>
<br>
<o:p></o:p></p>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<pre><o:p> </o:p></pre>
<pre>+               psr_disable(data->drm_fd, data->debugfs_fd, NULL);<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre>+       primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);<o:p></o:p></pre>
<pre>+       igt_create_color_fb(data->drm_fd, mode.hdisplay, mode.vdisplay,<o:p></o:p></pre>
<pre>+                           DRM_FORMAT_XRGB8888, DRM_FORMAT_MOD_LINEAR,<o:p></o:p></pre>
<pre>+                           1, 1, 1, &data->fb[0]);<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre>+       igt_output_override_mode(output, &data->switch_modes[HIGH_RR_MODE]);<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre>+       while (time(NULL) - startTime < secs) {<o:p></o:p></pre>
<pre>+               igt_plane_set_fb(primary, &data->fb[0]);<o:p></o:p></pre>
<pre>+               igt_display_commit(&data->display);<o:p></o:p></pre>
<pre>+               if (!change_mode && time(NULL) - startTime >= change_time) {<o:p></o:p></pre>
<pre>+                       igt_output_override_mode(output, &data->switch_modes[LOW_RR_MODE]);<o:p></o:p></pre>
<pre>+                       change_time = true;<o:p></o:p></pre>
<pre>+               }<o:p></o:p></pre>
<pre>+       }<o:p></o:p></pre>
</blockquote>
<p class="MsoNormal">Can we add some kind of check that will tell if link off is possible if we switch from HIGH_RR_MODE to LOW_RR_MODE ?<br>
I mean if we can somehow know what extended vblank duration is needed in order to off the link and does the two modes<br>
will be able to have such extended vblank?<br>
<br>
<o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">Can you elaborate more on this please ?
<o:p></o:p></span></p>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<pre><o:p> </o:p></pre>
<pre>+<o:p></o:p></pre>
<pre>+       igt_assert_f(igt_get_i915_edp_lobf_status(data->drm_fd, output->name),<o:p></o:p></pre>
<pre>+                    "LOBF not enabled\n");<o:p></o:p></pre>
<pre>+}<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre> static void<o:p></o:p></pre>
<pre> test_cmrr(data_t *data, enum pipe pipe, igt_output_t *output, uint32_t flags)<o:p></o:p></pre>
<pre> {<o:p></o:p></pre>
<pre>@@ -973,6 +1018,7 @@ igt_main_args("drs:", long_opts, help_str, opt_handler, &data)<o:p></o:p></pre>
<pre> {<o:p></o:p></pre>
<pre>        igt_fixture {<o:p></o:p></pre>
<pre>                data.drm_fd = drm_open_driver_master(DRIVER_ANY);<o:p></o:p></pre>
<pre>+               data.debugfs_fd = igt_debugfs_dir(data.drm_fd);<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>                kmstest_set_vt_graphics_mode();<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>@@ -1030,13 +1076,20 @@ igt_main_args("drs:", long_opts, help_str, opt_handler, &data)<o:p></o:p></pre>
<pre>                igt_subtest_with_dynamic("seamless-rr-switch-virtual")<o:p></o:p></pre>
<pre>                        run_vrr_test(&data, test_seamless_virtual_rr_basic, TEST_SEAMLESS_VIRTUAL_RR);<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>-               igt_describe("Test to validate the the content rate exactly match with the "<o:p></o:p></pre>
<pre>+               igt_describe("Test to validate the content rate exactly match with the "<o:p></o:p></pre>
<pre>                             "requested rate without any frame drops.");<o:p></o:p></pre>
<pre>                igt_subtest_with_dynamic("cmrr") {<o:p></o:p></pre>
<pre>                 igt_require(intel_display_ver(intel_get_drm_devid(data.drm_fd)) >= 20);<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>                        run_vrr_test(&data, test_cmrr, TEST_CMRR);<o:p></o:p></pre>
<pre>                }<o:p></o:p></pre>
<pre>+               igt_describe("Test to validate the link-off between active frames in "<o:p></o:p></pre>
<pre>+                            "non-PSR operation.");<o:p></o:p></pre>
<pre>+               igt_subtest_with_dynamic("lobf") {<o:p></o:p></pre>
<pre>+                igt_require(intel_display_ver(intel_get_drm_devid(data.drm_fd)) >= 20);<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre>+                       run_vrr_test(&data, test_lobf, TEST_LINK_OFF);<o:p></o:p></pre>
<pre>+               }<o:p></o:p></pre>
<pre>        }<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>        igt_fixture {<o:p></o:p></pre>
</blockquote>
</div>
</div>
</body>
</html>