From patchwork Fri Jun 30 19:12:22 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: jim.bride@linux.intel.com X-Patchwork-Id: 9820279 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id D556360224 for ; Fri, 30 Jun 2017 19:14:57 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C62C528478 for ; Fri, 30 Jun 2017 19:14:57 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id BAC1428694; Fri, 30 Jun 2017 19:14:57 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 4AFA928478 for ; Fri, 30 Jun 2017 19:14:57 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 45CCC6E85E; Fri, 30 Jun 2017 19:14:56 +0000 (UTC) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id 16A4E6E85D for ; Fri, 30 Jun 2017 19:14:54 +0000 (UTC) Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga105.fm.intel.com with ESMTP; 30 Jun 2017 12:14:53 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.40,288,1496127600"; d="scan'208";a="280775235" Received: from shiv.jf.intel.com ([10.54.75.141]) by fmsmga004.fm.intel.com with ESMTP; 30 Jun 2017 12:14:53 -0700 From: Jim Bride To: intel-gfx@lists.freedesktop.org Date: Fri, 30 Jun 2017 12:12:22 -0700 Message-Id: <1498849944-26404-5-git-send-email-jim.bride@linux.intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1498849944-26404-1-git-send-email-jim.bride@linux.intel.com> References: <1498849944-26404-1-git-send-email-jim.bride@linux.intel.com> Cc: Paulo Zanoni , Rodrigo Vivi Subject: [Intel-gfx] [PATCH IGT v2 4/6] tests/kms_frontbuffer_tracking: Refactor to use IGT PSR library functions X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" X-Virus-Scanned: ClamAV using ClamSMTP v2: * Minor functional tweaks and bug fixes * Rebase Cc: Rodrigo Vivi Cc: Paulo Zanoni Signed-off-by: Jim Bride --- tests/kms_frontbuffer_tracking.c | 119 +++++++-------------------------------- 1 file changed, 19 insertions(+), 100 deletions(-) diff --git a/tests/kms_frontbuffer_tracking.c b/tests/kms_frontbuffer_tracking.c index c24e4a8..3a8b754 100644 --- a/tests/kms_frontbuffer_tracking.c +++ b/tests/kms_frontbuffer_tracking.c @@ -183,7 +183,7 @@ struct { }; -#define SINK_CRC_SIZE 12 +#define SINK_CRC_SIZE 6 typedef struct { char data[SINK_CRC_SIZE]; } sink_crc_t; @@ -327,28 +327,6 @@ drmModeModeInfo std_1024_mode = { .name = "Custom 1024x768", }; -static drmModeModeInfoPtr get_connector_smallest_mode(drmModeConnectorPtr c) -{ - int i; - drmModeModeInfoPtr smallest = NULL; - - for (i = 0; i < c->count_modes; i++) { - drmModeModeInfoPtr mode = &c->modes[i]; - - if (!smallest) - smallest = mode; - - if (mode->hdisplay * mode->vdisplay < - smallest->hdisplay * smallest->vdisplay) - smallest = mode; - } - - if (c->connector_type == DRM_MODE_CONNECTOR_eDP) - smallest = &std_1024_mode; - - return smallest; -} - static drmModeConnectorPtr get_connector(uint32_t id) { int i; @@ -421,30 +399,6 @@ static void init_mode_params(struct modeset_params *params, uint32_t crtc_id, params->sprite.h = 64; } -static bool connector_get_mode(drmModeConnectorPtr c, drmModeModeInfoPtr *mode) -{ - *mode = NULL; - - if (c->connection != DRM_MODE_CONNECTED || !c->count_modes) - return false; - - if (c->connector_type == DRM_MODE_CONNECTOR_eDP && opt.no_edp) - return false; - - if (opt.small_modes) - *mode = get_connector_smallest_mode(c); - else - *mode = &c->modes[0]; - - /* On HSW the CRC WA is so awful that it makes you think everything is - * bugged. */ - if (IS_HASWELL(intel_get_drm_devid(drm.fd)) && - c->connector_type == DRM_MODE_CONNECTOR_eDP) - *mode = &std_1024_mode; - - return true; -} - static bool connector_supports_pipe_a(drmModeConnectorPtr connector) { int i; @@ -473,7 +427,7 @@ static bool find_connector(bool edp_only, bool pipe_a, uint32_t forbidden_id, continue; if (c->connector_id == forbidden_id) continue; - if (!connector_get_mode(c, &mode)) + if (!igt_psr_find_good_mode(c, &mode)) continue; *ret_connector = c; @@ -804,23 +758,6 @@ static void fbc_print_status(void) igt_info("FBC status:\n%s\n", buf); } -static bool psr_is_enabled(void) -{ - char buf[256]; - - debugfs_read("i915_edp_psr_status", buf); - return strstr(buf, "\nActive: yes\n") && - strstr(buf, "\nHW Enabled & Active bit: yes\n"); -} - -static void psr_print_status(void) -{ - char buf[256]; - - debugfs_read("i915_edp_psr_status", buf); - igt_info("PSR status:\n%s\n", buf); -} - static struct timespec fbc_get_last_action(void) { struct timespec ret = { 0, 0 }; @@ -926,44 +863,31 @@ static bool fbc_wait_until_enabled(void) return igt_wait(fbc_is_enabled(), 2000, 1); } -static bool psr_wait_until_enabled(void) -{ - return igt_wait(psr_is_enabled(), 5000, 1); -} - #define fbc_enable() igt_set_module_param_int("enable_fbc", 1) #define fbc_disable() igt_set_module_param_int("enable_fbc", 0) -#define psr_enable() igt_set_module_param_int("enable_psr", 1) -#define psr_disable() igt_set_module_param_int("enable_psr", 0) static void get_sink_crc(sink_crc_t *crc, bool mandatory) { - int rc, errno_; + int rc; if (!sink_crc.supported) { memcpy(crc, "unsupported!", SINK_CRC_SIZE); return; } - lseek(sink_crc.fd, 0, SEEK_SET); - - rc = read(sink_crc.fd, crc->data, SINK_CRC_SIZE); - errno_ = errno; - - if (rc == -1 && errno_ == ENOTTY) { + rc = igt_psr_get_sink_crc(sink_crc.fd, crc->data); + if (rc == ENOTTY) { igt_info("Sink CRC not supported: panel doesn't support it\n"); sink_crc.supported = false; - } else if (rc == -1 && errno_ == ETIMEDOUT) { - if (sink_crc.reliable) { - igt_info("Sink CRC is unreliable on this machine.\n"); + } else if (rc == ETIMEDOUT) { + if (sink_crc.reliable) sink_crc.reliable = false; - } + if (mandatory) igt_skip("Sink CRC is unreliable on this machine.\n"); } else { - igt_assert_f(rc != -1, "Unexpected error: %d\n", errno_); - igt_assert(rc == SINK_CRC_SIZE); + igt_assert_f(rc == 0, "Unexpected error: %d\n", rc); } } @@ -1180,7 +1104,7 @@ static void disable_features(const struct test_mode *t) return; fbc_disable(); - psr_disable(); + igt_psr_disable(); } static void *busy_thread_func(void *data) @@ -1432,7 +1356,7 @@ static void setup_sink_crc(void) fill_fb_region(&prim_mode_params.fb, COLOR_PRIM_BG); set_mode_for_params(&prim_mode_params); - sink_crc.fd = openat(drm.debugfs, "i915_sink_crc_eDP1", O_RDONLY); + sink_crc.fd = igt_psr_open_sink_crc(drm.debugfs); igt_assert_lte(0, sink_crc.fd); /* Do a first read to try to detect if it's supported. */ @@ -1547,14 +1471,6 @@ static void teardown_fbc(void) { } -static bool psr_sink_has_support(void) -{ - char buf[256]; - - debugfs_read("i915_edp_psr_status", buf); - return strstr(buf, "Sink_Support: yes\n"); -} - static void setup_psr(void) { if (get_connector(prim_mode_params.connector_id)->connector_type != @@ -1563,7 +1479,7 @@ static void setup_psr(void) return; } - if (!psr_sink_has_support()) { + if (!igt_psr_sink_support(drm.fd)) { igt_info("Can't test PSR: not supported by sink.\n"); return; } @@ -1717,12 +1633,15 @@ static int adjust_assertion_flags(const struct test_mode *t, int flags) } \ \ if (flags_ & ASSERT_PSR_ENABLED) { \ - if (!psr_wait_until_enabled()) { \ - psr_print_status(); \ + if (!igt_psr_await_status(drm.fd, true)) { \ + igt_psr_print_status(drm.fd); \ igt_assert_f(false, "PSR disabled\n"); \ } \ } else if (flags_ & ASSERT_PSR_DISABLED) { \ - igt_assert(!psr_wait_until_enabled()); \ + if (!igt_psr_await_status(drm.fd, false)) { \ + igt_psr_print_status(drm.fd); \ + igt_assert_f(false, "PSR enabled\n"); \ + } \ } \ } while (0) @@ -1822,7 +1741,7 @@ static void enable_features_for_test(const struct test_mode *t) if (t->feature & FEATURE_FBC) fbc_enable(); if (t->feature & FEATURE_PSR) - psr_enable(); + igt_psr_enable(); } static void check_test_requirements(const struct test_mode *t)