<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
</head>
<body>
<div dir="auto">
<div id="divRplyFwdMsg" style="font-size: 11pt;" dir="auto">
<div dir="auto">
<div dir="auto"><span><strong>From:</strong> Reddy Guddati, Santhosh <santhosh.reddy.guddati@intel.com><br>
</span></div>
<div dir="auto"><strong style="font-size:11pt">Sent:</strong><span style="font-size:11pt"> Wednesday, October 2, 2024 8:26:33 pm</span><br style="font-size:11pt">
</div>
<div dir="auto"><strong style="font-size:11pt">To:</strong><span style="font-size:11pt"> igt-dev@lists.freedesktop.org <igt-dev@lists.freedesktop.org></span><br style="font-size:11pt">
</div>
<div dir="auto"><strong style="font-size:11pt">Cc:</strong><span style="font-size:11pt"> Samala, Pranay <pranay.samala@intel.com>; Kandpal, Suraj <suraj.kandpal@intel.com>; Reddy Guddati, Santhosh <santhosh.reddy.guddati@intel.com></span><br style="font-size:11pt">
</div>
<div dir="auto"><strong style="font-size:11pt">Subject:</strong><span style="font-size:11pt"> [PATCH i-g-t v3 1/1] tests/kms_hdr: Test brightness manipulation in HDR mode</span><br style="font-size:11pt">
</div>
<div dir="auto"><br>
</div>
<div dir="auto"><span>Add subtest for backlight control on hdr enabled edp panels</span><br>
</div>
<div dir="auto"><span>by changing brightness via sysfs.</span><br>
</div>
<div dir="auto"><span></span><br>
</div>
<div dir="auto"><span>v2: adjust brightness range, refactor and restore brightness (Pranay)</span><br>
</div>
<div dir="auto"><span></span><span></span><br>
</div>
<div dir="auto"><span>v3: reuse functions, add flags to avoid duplicate code (Suraj)</span><br>
</div>
<div dir="auto"><span></span><br>
</div>
<div dir="auto"><span>Signed-off-by: Santhosh Reddy Guddati <santhosh.reddy.guddati@intel.com></span><br>
</div>
<div dir="auto"><span>---</span><br>
</div>
<div dir="auto"><span> tests/kms_hdr.c | 83 ++++++++++++++++++++++++++++++++++++++++++++++++-</span><br>
</div>
<div dir="auto"><span> 1 file changed, 82 insertions(+), 1 deletion(-)</span><br>
</div>
<div dir="auto"><span></span><br>
</div>
<div dir="auto"><span>diff --git a/tests/kms_hdr.c b/tests/kms_hdr.c</span><br>
</div>
<div dir="auto"><span>index f123c6b36..0f07e770b 100644</span><br>
</div>
<div dir="auto"><span>--- a/tests/kms_hdr.c</span><br>
</div>
<div dir="auto"><span>+++ b/tests/kms_hdr.c</span><br>
</div>
<div dir="auto"><span>@@ -64,6 +64,10 @@</span><br>
</div>
<div dir="auto"><span>  * Description: Tests static toggle with suspend</span><br>
</div>
<div dir="auto"><span>  * Functionality: colorspace, static_hdr, suspend</span><br>
</div>
<div dir="auto"><span>  *</span><br>
</div>
<div dir="auto"><span>+ * SUBTEST: brightness-with-hdr</span><br>
</div>
<div dir="auto"><span>+ * Description: Tests brightness with HDR</span><br>
</div>
<div dir="auto"><span>+ * Functionality: colorspace, static_hdr</span><br>
</div>
<div dir="auto"><span>+ *</span><br>
</div>
<div dir="auto"><span>  * SUBTEST: static-%s</span><br>
</div>
<div dir="auto"><span>  * Description: Tests %arg[1].</span><br>
</div>
<div dir="auto"><span>  * Functionality: colorspace, static_hdr</span><br>
</div>
<div dir="auto"><span>@@ -81,6 +85,8 @@ IGT_TEST_DESCRIPTION("Test HDR metadata interfaces and bpc switch");</span><br>
</div>
<div dir="auto"><span> #define HDR_STATIC_METADATA_BLOCK       0x06</span><br>
</div>
<div dir="auto"><span> #define USE_EXTENDED_TAG                0x07</span><br>
</div>
<div dir="auto"><span> </span><br>
</div>
<div dir="auto"><span>+#define INTEL_BACKLIGHT_PATH "/sys/class/backlight/intel_backlight"</span><br>
</div>
<div dir="auto"><span>+</span><br>
</div>
<div dir="auto"><span> /* DRM HDR definitions. Not in the UAPI header, unfortunately. */</span><br>
</div>
<div dir="auto"><span> enum hdmi_metadata_type {</span><br>
</div>
<div dir="auto"><span>         HDMI_STATIC_METADATA_TYPE1 = 0,</span><br>
</div>
<div dir="auto"><span>@@ -100,6 +106,7 @@ enum {</span><br>
</div>
<div dir="auto"><span>         TEST_SWAP = 1 << 3,</span><br>
</div>
<div dir="auto"><span>         TEST_INVALID_METADATA_SIZES = 1 << 4,</span><br>
</div>
<div dir="auto"><span>         TEST_INVALID_HDR = 1 << 5,</span><br>
</div>
<div dir="auto"><span>+       TEST_BRIGHTNESS = 1 << 6,</span><br>
</div>
<div dir="auto"><span> };</span><br>
</div>
<div dir="auto"><span> </span><br>
</div>
<div dir="auto"><span> /* BPC connector state. */</span><br>
</div>
<div dir="auto"><span>@@ -448,6 +455,72 @@ static void fill_hdr_output_metadata_st2048(struct hdr_output_metadata *meta)</span><br>
</div>
<div dir="auto"><span>         meta->hdmi_metadata_type1.max_cll = 500;   /* 500 nits */</span><br>
</div>
<div dir="auto"><span> }</span><br>
</div>
<div dir="auto"><span> </span><br>
</div>
<div dir="auto"><span>+/* TODO: Move adjust_brightness to lib/igt_sysfs to reuse in other tests. */</span><br>
</div>
<div dir="auto"><span>+static void adjust_brightness(data_t *data, uint32_t flags)</span><br>
</div>
<div dir="auto"><span>+{</span><br>
</div>
<div dir="auto"><span>+       char brightness_path[1024];</span><br>
</div>
<div dir="auto"><span>+       int brightness_fd;</span><br>
</div>
<div dir="auto"><span>+       char brightness_value[64];</span><br>
</div>
<div dir="auto"><span>+       int current_brightness;</span><br>
</div>
<div dir="auto"><span>+       int max_brightness;</span><br>
</div>
<div dir="auto"><span>+       int read_brightness;</span><br>
</div>
<div dir="auto"><span>+       int fd, i;</span><br>
</div>
<div dir="auto"><span>+</span><br>
</div>
<div dir="auto"><span>+       /* Get max brightness */</span><br>
</div>
<div dir="auto"><span>+       snprintf(brightness_path, sizeof(brightness_path),</span><br>
</div>
<div dir="auto"><span>+                "%s/%s", INTEL_BACKLIGHT_PATH, "max_brightness");</span><br>
</div>
<div dir="auto"><span>+       fd = open(brightness_path, O_RDONLY);</span><br>
</div>
<div dir="auto"><span>+       igt_assert_f(fd >= 0, "Failed to open %s\n", brightness_path);</span><br>
</div>
<div dir="auto"><span>+</span><br>
</div>
<div dir="auto"><span>+       igt_assert(read(fd, brightness_value, sizeof(brightness_value)) > 0);</span><br>
</div>
<div dir="auto"><span>+</span><br>
</div>
<div dir="auto"><span>+       max_brightness = atoi(brightness_value);</span><br>
</div>
<div dir="auto"><span>+</span><br>
</div>
<div dir="auto"><span>+       close(fd);</span><br>
</div>
<div dir="auto"><span>+</span><br>
</div>
<div dir="auto"><span>+       /* Get current brightness */</span><br>
</div>
<div dir="auto"><span>+       snprintf(brightness_path, sizeof(brightness_path),</span><br>
</div>
<div dir="auto"><span>+                "%s/%s", INTEL_BACKLIGHT_PATH, "brightness");</span><br>
</div>
<div dir="auto"><span>+       fd = open(brightness_path, O_RDONLY);</span><br>
</div>
<div dir="auto"><span>+       igt_assert_f(fd >= 0, "Failed to open %s\n", brightness_path);</span><br>
</div>
<div dir="auto"><span>+</span><br>
</div>
<div dir="auto"><span>+       igt_assert(read(fd, brightness_value, sizeof(brightness_value)) > 0);</span><br>
</div>
<div dir="auto"><span>+</span><br>
</div>
<div dir="auto"><span>+       current_brightness = atoi(brightness_value);</span><br>
</div>
<div dir="auto"><span>+</span><br>
</div>
<div dir="auto"><span>+       close(fd);</span><br>
</div>
<div dir="auto"><span>+</span><br>
</div>
<div dir="auto"><span>+       for (i = 0; i <= max_brightness; i += 50) {</span><br>
</div>
<div dir="auto"><span>+               fd = open(brightness_path, O_WRONLY);</span><br>
</div>
<div dir="auto"><span>+               igt_assert_f(fd >= 0, "Failed to open %s\n", brightness_path);</span><br>
</div>
<div dir="auto"><span>+</span><br>
</div>
<div dir="auto"><span>+               snprintf(brightness_value, sizeof(brightness_value), "%d", i);</span><br>
</div>
<div dir="auto"><span>+               igt_assert(write(fd, brightness_value, strlen(brightness_value)) > 0);</span><br>
</div>
<div dir="auto"><span>+</span><br>
</div>
<div dir="auto"><span>+               close(fd);</span><br>
</div>
<div dir="auto"><span>+</span><br>
</div>
<div dir="auto"><span>+               /* Verify brightness adjustment */</span><br>
</div>
<div dir="auto"><span>+               fd = open(brightness_path, O_RDONLY);</span><br>
</div>
<div dir="auto"><span>+               igt_assert(fd >= 0);</span><br>
</div>
<div dir="auto"><span>+</span><br>
</div>
<div dir="auto"><span>+               igt_assert(read(fd, brightness_value, sizeof(brightness_value)) > 0);</span><br>
</div>
<div dir="auto"><span>+</span><br>
</div>
<div dir="auto"><span>+               read_brightness = atoi(brightness_value);</span><br>
</div>
<div dir="auto"><span>+</span><br>
</div>
<div dir="auto"><span>+               igt_assert_eq(read_brightness, i);</span><br>
</div>
<div dir="auto"><span>+</span><br>
</div>
<div dir="auto"><span>+               close(fd);</span><br>
</div>
<div dir="auto"><span>+       }</span><br>
</div>
<div dir="auto"><span>+</span><br>
</div>
<div dir="auto"><span>+       fd = open(brightness_path, O_WRONLY);</span><br>
</div>
<div dir="auto"><span>+       igt_assert_f(fd >= 0, "Failed to open %s\n", brightness_path);</span><br>
</div>
<div dir="auto"><span>+</span><br>
</div>
<div dir="auto"><span>+       snprintf(brightness_value, sizeof(brightness_value), "%d", current_brightness);</span><br>
</div>
<div dir="auto"><span>+       igt_assert(write(brightness_fd, brightness_value, strlen(brightness_value)) > 0);</span><br>
</div>
<div dir="auto"><span>+</span><br>
</div>
<div dir="auto"><span>+       close(fd);</span><br>
</div>
<div dir="auto"><span>+}</span><br>
</div>
<div dir="auto"><span>+</span><br>
</div>
<div dir="auto"><span> static void test_static_toggle(data_t *data, enum pipe pipe,</span><br>
</div>
<div dir="auto"><span>                                igt_output_t *output,</span><br>
</div>
<div dir="auto"><span>                                uint32_t flags)</span><br>
</div>
<div dir="auto"><span>@@ -483,6 +556,9 @@ static void test_static_toggle(data_t *data, enum pipe pipe,</span><br>
</div>
<div dir="auto"><span>                 igt_assert_eq(system("dmesg|tail -n 1000|grep -E \"Unknown EOTF [0-9]+\""), 0);</span><br>
</div>
<div dir="auto"><span>                 goto cleanup;</span><br>
</div>
<div dir="auto"><span>         }</span><br>
</div>
<div dir="auto"><span>+       if (flags & TEST_BRIGHTNESS)</span><br>
</div>
<div dir="auto"><span>+               adjust_brightness(data, flags);</span><br>
</div>
<div dir="auto"><span>+</span><br>
</div>
<div dir="auto"><span>         igt_assert_output_bpc_equal(data->fd, pipe, output->name, 10);</span><br>
</div>
<div dir="auto"><span> </span><br>
</div>
<div dir="auto"><span>         /* Verify that the CRC are equal after DPMS or suspend. */</span><br>
</div>
<div dir="auto"><span>@@ -685,7 +761,8 @@ static void test_hdr(data_t *data, uint32_t flags)</span><br>
</div>
<div dir="auto"><span> </span><br>
</div>
<div dir="auto"><span>                         igt_dynamic_f("pipe-%s-%s",</span><br>
</div>
<div dir="auto"><span>                                       kmstest_pipe_name(pipe), output->name) {</span><br>
</div>
<div dir="auto"><span>-                               if (flags & (TEST_NONE | TEST_DPMS | TEST_SUSPEND | TEST_INVALID_HDR))</span><br>
</div>
<div dir="auto"><span>+                               if (flags & (TEST_NONE | TEST_DPMS | TEST_SUSPEND |</span><br>
</div>
<div dir="auto"><span>+                                            TEST_INVALID_HDR | TEST_BRIGHTNESS))</span><br>
</div>
<div dir="auto"><span>                                         test_static_toggle(data, pipe, output, flags);</span><br>
</div>
<div dir="auto"><span>                                 if (flags & TEST_SWAP)</span><br>
</div>
<div dir="auto"><span>                                         test_static_swap(data, pipe, output);</span><br>
</div>
<div dir="auto"><span>@@ -734,6 +811,10 @@ igt_main</span><br>
</div>
<div dir="auto"><span>         igt_subtest_with_dynamic("static-toggle-suspend")</span><br>
</div>
<div dir="auto"><span>                 test_hdr(&data, TEST_SUSPEND);</span><br>
</div>
<div dir="auto"><span> </span><br>
</div>
<div dir="auto"><span>+       igt_describe("Tests brightness while entering and exiting HDR mode");</span><br>
</div>
<div dir="auto"><span>+       igt_subtest_with_dynamic("brightness-with-hdr")</span><br>
</div>
<div dir="auto"><span>+               test_hdr(&data, TEST_BRIGHTNESS);</span><br>
</div>
<div dir="auto"><span>+</span><br>
</div>
<div dir="auto"><span>         igt_describe("Tests swapping static HDR metadata");</span><br>
</div>
<div dir="auto"><span>         igt_subtest_with_dynamic("static-swap")</span><br>
</div>
<div dir="auto"><span>                 test_hdr(&data, TEST_SWAP);</span><br>
</div>
<div dir="auto"><span>-- </span><br>
</div>
<div dir="auto"><span>2.34.1</span><br>
</div>
</div>
</div>
</div>
<div dir="auto">
<meta name="Generator" content="Microsoft Exchange Server">
<!-- converted from text --></div>
<div dir="auto"><font size="2"><span style="font-size:11pt;">
<div class="PlainText" dir="auto"><br>
</div>
</span></font><br>
</div>
</body>
</html>