From: "Naladala, Ramanaidu" <Ramanaidu.naladala@intel.com>
To: "Golani,
Mitulkumar Ajitkumar" <mitulkumar.ajitkumar.golani@intel.com>,
"igt-dev@lists.freedesktop.org" <igt-dev@lists.freedesktop.org>
Cc: "Borah, Chaitanya Kumar" <chaitanya.kumar.borah@intel.com>
Subject: Re: [PATCH i-g-t v2 1/2] lib/igt_vrr:Add VRR helper library for display refresh rate testing
Date: Wed, 12 Aug 2026 00:53:09 +0530 [thread overview]
Message-ID: <1c98532e-e90a-473b-b9b7-955d2413148f@intel.com> (raw)
In-Reply-To: <IA1PR11MB63488312022E8E0B51A69DEDB2DD2@IA1PR11MB6348.namprd11.prod.outlook.com>
Hi Mitul,
Thanks for the feedback.
I will fix review comments in next revision.
On 8/11/2026 11:01 AM, Golani, Mitulkumar Ajitkumar wrote:
>
>> -----Original Message-----
>> From: Naladala, Ramanaidu <ramanaidu.naladala@intel.com>
>> Sent: 11 August 2026 00:48
>> To: igt-dev@lists.freedesktop.org
>> Cc: Borah, Chaitanya Kumar <chaitanya.kumar.borah@intel.com>; Golani,
>> Mitulkumar Ajitkumar <mitulkumar.ajitkumar.golani@intel.com>; Naladala,
>> Ramanaidu <ramanaidu.naladala@intel.com>
>> Subject: [PATCH i-g-t v2 1/2] lib/igt_vrr:Add VRR helper library for display
>> refresh rate testing
>>
>> Introduce a new helper library for Variable Refresh Rate (VRR).
>>
>> Add helpers to validate targeted refresh-rate testing.
>>
>> v2: Modify debugfs with helpers.
>>
>> Signed-off-by: Naladala Ramanaidu <ramanaidu.naladala@intel.com>
>> ---
>> lib/igt_vrr.c | 118
>> ++++++++++++++++++++++++++++++++++++++++++++++++
>> lib/igt_vrr.h | 46 +++++++++++++++++++
>> lib/meson.build | 1 +
>> 3 files changed, 165 insertions(+)
>> create mode 100644 lib/igt_vrr.c
>> create mode 100644 lib/igt_vrr.h
>>
>> diff --git a/lib/igt_vrr.c b/lib/igt_vrr.c new file mode 100644 index
>> 000000000..09b008933
>> --- /dev/null
>> +++ b/lib/igt_vrr.c
>> @@ -0,0 +1,118 @@
>> +// SPDX-License-Identifier: MIT
>> +/*
>> + * Copyright © 2026 Intel Corporation
>> + */
>> +
>> +#include <inttypes.h>
>> +
>> +#include "igt_vrr.h"
>> +#include "igt_sysfs.h"
>> +
>> +/**
>> + * igt_target_rr_debugfs_write:
>> + * @fd: DRM file descriptor.
>> + * @crtc_index: Index of the CRTC.
>> + * @vrefresh: Target refresh rate to program.
>> + * @numerator: Numerator component of the target refresh rate fraction.
>> + * @denominator: Denominator component of the target refresh rate
>> fraction.
>> + *
>> + * Write the target refresh rate configuration to the per-CRTC
>> + * VRR debugfs interface.
>> + *
>> + * Returns: None.
>> + */
>> +void
>> +igt_target_rr_debugfs_write(int fd, int crtc_index,
>> + uint32_t vrefresh,
>> + uint32_t numerator,
>> + uint32_t denominator)
>> +{
>> + char buf[32];
>> + uint32_t ret, dir;
>> + uint64_t val;
>> +
>> + val = vrefresh * numerator;
>> +
>> + snprintf(buf, sizeof(buf), "%" PRIu64 "/%u",
>> + val, denominator);
>> +
>> + dir = igt_debugfs_crtc_dir(fd, crtc_index);
>> + igt_require_fd(dir);
>> +
>> + ret = igt_sysfs_write(dir, "intel_vrr_target_refresh_rate",
>> + buf, sizeof(buf) - 1);
>> + close(dir);
>> + igt_assert_f(ret == (sizeof(buf) - 1), "debugfs_write failed"); }
> NIT: Line 43 to 45, check for tab/space
>
>> +
>> +/**
>> + * igt_cmrr_debugfs_read:
>> + * @fd: DRM file descriptor.
>> + * @crtc_index: Index of the CRTC.
>> + *
>> + * Read the configured refresh rate from the per-CRTC VRR debugfs node.
>> + *
>> + * Return: None.
>> + */
>> +void
>> +igt_target_rr_debugfs_read(int fd, int crtc_index) {
>> + char buf[32];
>> + uint32_t ret, dir;
>> +
>> + dir = igt_debugfs_crtc_dir(fd, crtc_index);
>> + igt_require_fd(dir);
>> +
>> + ret = igt_sysfs_read(dir, "intel_vrr_target_refresh_rate",
>> + buf, sizeof(buf) - 1);
>> + igt_assert_f(ret >= 0,
>> + "Failed to read intel_vrr_target_refresh_rate.\n");
> dir/ret are uint32_t; igt_require_fd(dir) (dir >= 0) can never fail, and igt_sysfs_write(..., sizeof(buf)-1) writes 31 uninitialized bytes and asserts the handler consumed exactly 31. Use int for the fd/return, and write strlen(buf) asserting the return equals that. Also, dead ret >= 0 check + OOB buf[ret]
>
>> +
>> + buf[ret] = '\0';
>> +
>> + igt_info("%s\n", buf);
>> +}
>> +
>> +/**
>> + * igt_vrr_mode_line_refresh_hz:
>> + * @mode: DRM display mode used for the calculation
>> + *
>> + * Compute the refresh rate directly from the mode timing parameters.
>> + *
>> + * Returns: Refresh rate in Hz as a floating-point value.
>> + */
>> +double igt_vrr_mode_line_refresh_hz(const drmModeModeInfo *mode) {
>> + return (double)mode->clock * 1000.0 / ((double)mode->htotal *
>> +(double)mode->vtotal); }
>> +
>> +/**
>> + * igt_vrr_get_mode_with_video_timeing:
> typo "timing" -> "timing"
>
>> + * @output: Display output containing connector mode list
>> + * @fps: Requested integer refresh rate in Hz
>> + * @matched_mode: Returned mode that matches @fps
>> + *
>> + * Find and return a connector mode that matches the requested
>> + * video timing refresh rate in Hz.
>> + *
>> + * Returns: true when a mode is found, false otherwise */
>> +
>> +bool igt_vrr_get_mode_with_video_timeing(igt_output_t *output,
>> + uint32_t fps,
>> + drmModeModeInfo
>> *matched_mode)
>> +{
>> + drmModeConnectorPtr connector;
>> +
>> + connector = output->config.connector;
>> + if (!connector)
>> + return false;
>> +
>> + for (int i = 0; i < connector->count_modes; i++) {
>> + if (connector->modes[i].vrefresh == fps) {
>> + *matched_mode = connector->modes[i];
>> + return true;
>> + }
>> + }
>> + return false;
>> +}
>> diff --git a/lib/igt_vrr.h b/lib/igt_vrr.h new file mode 100644 index
>> 000000000..abea32a07
>> --- /dev/null
>> +++ b/lib/igt_vrr.h
>> @@ -0,0 +1,46 @@
>> +/* SPDX-License-Identifier: MIT */
>> +/*
>> + * Copyright © 2026 Intel Corporation
>> + */
>> +
>> +#ifndef IGT_VRR_H
>> +#define IGT_VRR_H
>> +
>> +#include <stdbool.h>
>> +#include <stdint.h>
>> +#include "igt.h"
>> +#include "igt_kms.h"
>> +
>> +#define CMRR_NUMERATOR 1000ULL
>> +#define CMRR_DENOMINATOR 1000ULL
>> +#define CMRR_VIDEO_MODE_DENOMINATOR 1001ULL #define
>> +TARGET_RR_SAMP_COUNT 100
>> +
>> +enum {
>> + CMRR_VIDEO_MODE,
>> + CMRR_NON_VIDEO_MODE,
>> + CMRR_DISABLE,
>> +};
>> +
>> +const uint32_t igt_vrr_standard_video_timing_fps[] = {
>> + 24, 25, 30, 48, 50, 60, 75, 90, 96, 100, 120, 144, 165, 180, 200, 240,
>> +};
> const uint32_t igt_vrr_standard_video_timing_fps[] (and its count) have external linkage and will cause a multiple-definition link error as soon as a second .c includes this header. Define them once in igt_vrr.c and expose extern declarations here.
>
>> +
>> +const uint32_t igt_vrr_standard_video_timing_fps_count =
>> + ARRAY_SIZE(igt_vrr_standard_video_timing_fps);
>> +
>> +void
>> +igt_target_rr_debugfs_write(int fd, int crtc_index,
>> + uint32_t vrefresh,
>> + uint32_t numerator,
>> + uint32_t denominator);
>> +void
>> +igt_target_rr_debugfs_read(int fd, int crtc_index);
>> +
>> +double igt_vrr_mode_line_refresh_hz(const drmModeModeInfo *mode);
>> +
>> +bool igt_vrr_get_mode_with_video_timeing(igt_output_t *output,
>> + uint32_t fps,
>> + drmModeModeInfo
>> *matched_mode);
>> +
>> +#endif
>> diff --git a/lib/meson.build b/lib/meson.build index 3001b473e..8675bd4a6
>> 100644
>> --- a/lib/meson.build
>> +++ b/lib/meson.build
>> @@ -22,6 +22,7 @@ lib_sources = [
>> 'igt_configfs.c',
>> 'igt_facts.c',
>> 'igt_crc.c',
>> + 'igt_vrr.c',
>> 'igt_debugfs.c',
>> 'igt_device.c',
>> 'igt_device_scan.c',
>> --
>> 2.43.0
next prev parent reply other threads:[~2026-08-11 19:24 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-10 19:17 [PATCH i-g-t v2 0/2] Add CMRR subtests Naladala Ramanaidu
2026-08-10 19:17 ` [PATCH i-g-t v2 1/2] lib/igt_vrr:Add VRR helper library for display refresh rate testing Naladala Ramanaidu
2026-08-11 5:31 ` Golani, Mitulkumar Ajitkumar
2026-08-11 19:23 ` Naladala, Ramanaidu [this message]
2026-08-10 19:17 ` [PATCH i-g-t v2 2/2] tests/kms_vrr: add CMRR fixed and video mode subtests Naladala Ramanaidu
2026-08-11 5:31 ` Golani, Mitulkumar Ajitkumar
2026-08-12 7:20 ` Naladala, Ramanaidu
2026-08-10 20:13 ` ✗ i915.CI.BAT: failure for Add CMRR subtests (rev2) Patchwork
2026-08-10 23:35 ` ✓ Xe.CI.FULL: success " Patchwork
2026-08-11 6:49 ` ✓ i915.CI.BAT: " Patchwork
2026-08-11 10:21 ` ✓ i915.CI.Full: " Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1c98532e-e90a-473b-b9b7-955d2413148f@intel.com \
--to=ramanaidu.naladala@intel.com \
--cc=chaitanya.kumar.borah@intel.com \
--cc=igt-dev@lists.freedesktop.org \
--cc=mitulkumar.ajitkumar.golani@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox