From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id F1ACD10EBB0 for ; Thu, 24 Feb 2022 05:17:51 +0000 (UTC) From: Bhanuprakash Modem To: igt-dev@lists.freedesktop.org, manasi.d.navare@intel.com Date: Thu, 24 Feb 2022 10:46:47 +0530 Message-Id: <20220224051648.91470-5-bhanuprakash.modem@intel.com> In-Reply-To: <20220224051648.91470-1-bhanuprakash.modem@intel.com> References: <20220224051648.91470-1-bhanuprakash.modem@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [igt-dev] [i-g-t 4/5] tests/kms_vrr: Add a test for VRR range capability List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" List-ID: VRR range capability is parsed from EDID and reported to debugfs. The new tests check if the parsing is correct by reading it from EDID. Cc: Manasi Navare Signed-off-by: Bhanuprakash Modem --- tests/kms_vrr.c | 66 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/tests/kms_vrr.c b/tests/kms_vrr.c index 7deab77311..526c261436 100644 --- a/tests/kms_vrr.c +++ b/tests/kms_vrr.c @@ -24,6 +24,7 @@ #include "sw_sync.h" #include #include +#include "igt_edid.h" #define NSECS_PER_SEC (1000000000ull) @@ -485,6 +486,47 @@ test_negative_basic(data_t *data, enum pipe pipe, igt_remove_fb(data->drm_fd, &data->fb0); } +static void +test_vrr_range(data_t *data, enum pipe pipe, + igt_output_t *output, uint32_t flags) +{ + uint64_t edid_blob_id; + const struct edid *edid; + struct detailed_data_monitor_range expected_range; + drmModePropertyBlobPtr edid_blob = NULL; + drmModeConnector *connector = output->config.connector; + + igt_assert(kmstest_get_property(data->drm_fd, connector->connector_id, + DRM_MODE_OBJECT_CONNECTOR, "EDID", NULL, + &edid_blob_id, NULL)); + edid_blob = drmModeGetPropertyBlob(data->drm_fd, edid_blob_id); + igt_require_f(edid_blob, "EDID blob is NULL\n"); + + edid = (const struct edid *) edid_blob->data; + igt_assert(edid); + + prepare_negative_test(data, output, pipe); + expected_range = detailed_timing_get_monitor_range(edid); + drmModeFreePropertyBlob(edid_blob); + + igt_assert_f(data->range.min == expected_range.min_vfreq && + data->range.max == expected_range.max_vfreq, + "Expecting VRR range %d-%d, got %d-%d\n", + expected_range.min_vfreq, expected_range.max_vfreq, + data->range.min, data->range.max); + + igt_info("Monitor range from EDID: %d-%d, Kernel parsed VRR range as: %d-%d\n", + expected_range.min_vfreq, expected_range.max_vfreq, + data->range.min, data->range.max); + + /* Clean-up */ + igt_plane_set_fb(data->primary, NULL); + igt_output_set_pipe(output, PIPE_NONE); + set_vrr_on_pipe(data, pipe, false); + + igt_remove_fb(data->drm_fd, &data->fb0); +} + /* Runs tests on outputs that are VRR capable. */ static void run_vrr_test(data_t *data, test_t test, uint32_t flags) @@ -514,6 +556,25 @@ run_vrr_test(data_t *data, test_t test, uint32_t flags) } } +static void +run_parse_test(data_t *data, test_t test, uint32_t flags) +{ + igt_output_t *output; + + for_each_connected_output(&data->display, output) { + enum pipe pipe; + + for_each_pipe(&data->display, pipe) { + if (igt_pipe_connector_valid(pipe, output)) { + igt_dynamic_f("pipe-%s-%s", + kmstest_pipe_name(pipe), output->name) + test(data, pipe, output, flags); + break; + } + } + } +} + igt_main { data_t data = {}; @@ -551,6 +612,11 @@ igt_main igt_subtest_with_dynamic("negative-basic") run_vrr_test(&data, test_negative_basic, TEST_NEGATIVE); + igt_describe("Read the monitor RR range from monitor and make sure that " + "Kernel is parsing it properly."); + igt_subtest_with_dynamic("parse-vrr-range") + run_parse_test(&data, test_vrr_range, TEST_NONE); + igt_fixture { igt_display_fini(&data.display); } -- 2.35.0