From patchwork Wed Mar 6 12:09:29 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Gupta, Anshuman" X-Patchwork-Id: 10841073 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 9D02D1515 for ; Wed, 6 Mar 2019 12:09:51 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 88D122D3E4 for ; Wed, 6 Mar 2019 12:09:51 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 7CDE02D3F9; Wed, 6 Mar 2019 12:09:51 +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=-5.2 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, 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 7B9A62D3E4 for ; Wed, 6 Mar 2019 12:09:50 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id CF0016E10C; Wed, 6 Mar 2019 12:09:49 +0000 (UTC) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id D19AF6E0E2; Wed, 6 Mar 2019 12:09:47 +0000 (UTC) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga105.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 06 Mar 2019 04:09:47 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.58,447,1544515200"; d="scan'208";a="152530379" Received: from genxfsim-desktop.iind.intel.com ([10.223.34.158]) by fmsmga001.fm.intel.com with ESMTP; 06 Mar 2019 04:09:46 -0800 From: Anshuman Gupta To: intel-gfx@lists.freedesktop.org, igt-dev@lists.freedesktop.org Date: Wed, 6 Mar 2019 17:39:29 +0530 Message-Id: <1551874170-32222-2-git-send-email-anshuman.gupta@intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1551874170-32222-1-git-send-email-anshuman.gupta@intel.com> References: <1551874170-32222-1-git-send-email-anshuman.gupta@intel.com> Subject: [Intel-gfx] [PATCH i-g-t 1/2] tests/i915/i915_pm_rpm: Enable PC8+ residency test for ICL X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.23 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 Enabled has_pc8 global for ICL and Gen9. Added PC8+ residency test for display enabled case as well. Signed-off-by: Anshuman Gupta --- tests/i915/i915_pm_rpm.c | 75 +++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 68 insertions(+), 7 deletions(-) diff --git a/tests/i915/i915_pm_rpm.c b/tests/i915/i915_pm_rpm.c index be296f5..af7a5d0 100644 --- a/tests/i915/i915_pm_rpm.c +++ b/tests/i915/i915_pm_rpm.c @@ -90,7 +90,7 @@ enum plane_type { int drm_fd, msr_fd, pc8_status_fd; int debugfs; -bool has_runtime_pm, has_pc8; +bool has_runtime_pm, has_pc8, connected_screens; struct mode_set_data ms_data; /* Stuff used when creating FBs and mode setting. */ @@ -98,8 +98,8 @@ struct mode_set_data { drmModeResPtr res; drmModeConnectorPtr connectors[MAX_CONNECTORS]; drmModePropertyBlobPtr edids[MAX_CONNECTORS]; - uint32_t devid; + bool pc8_needs_screen_off; }; /* Stuff we query at different times so we can compare. */ @@ -121,6 +121,7 @@ struct modeset_params { struct modeset_params lpsp_mode_params; struct modeset_params non_lpsp_mode_params; struct modeset_params *default_mode_params; +struct modeset_params *screens_mode_params[MAX_CONNECTORS]; static int8_t *pm_data = NULL; @@ -297,6 +298,39 @@ static bool init_modeset_params_for_type(struct mode_set_data *data, return true; } +static bool init_modeset_params_for_all_screen(struct mode_set_data *data) +{ + drmModeConnectorPtr connector = NULL; + drmModeModeInfoPtr mode = NULL; + int screen = 0; + + if (!data->res) + return false; + + for (int i = 0; i < data->res->count_connectors; i++) { + drmModeConnectorPtr c = data->connectors[i]; + + if (c->connection == DRM_MODE_CONNECTED && c->count_modes) { + screens_mode_params[screen] = + malloc(sizeof(struct modeset_params)); + connector = c; + mode = &c->modes[0]; + igt_create_pattern_fb(drm_fd, mode->hdisplay, mode->vdisplay, + DRM_FORMAT_XRGB8888, LOCAL_DRM_FORMAT_MOD_NONE, + &screens_mode_params[screen]->fb); + screens_mode_params[screen]->crtc_id = + kmstest_find_crtc_for_connector(drm_fd, data->res, connector, 0); + screens_mode_params[screen]->connector_id = connector->connector_id; + screens_mode_params[screen]->mode = mode; + screen++; + } + } + + if (!connector) + return false; + + return true; +} static void init_modeset_cached_params(struct mode_set_data *data) { bool lpsp, non_lpsp; @@ -305,6 +339,7 @@ static void init_modeset_cached_params(struct mode_set_data *data) SCREEN_TYPE_LPSP); non_lpsp = init_modeset_params_for_type(data, &non_lpsp_mode_params, SCREEN_TYPE_NON_LPSP); + connected_screens = init_modeset_params_for_all_screen(data); if (lpsp) default_mode_params = &lpsp_mode_params; @@ -353,6 +388,23 @@ static bool enable_one_screen_with_type(struct mode_set_data *data, return set_mode_for_params(params); } +static void enable_all_screens(struct mode_set_data *data) +{ + struct modeset_params *params = NULL; + + /* SKIP if there are no connected screens. */ + igt_require(connected_screens); + + for (int i = 0; i < MAX_CONNECTORS ; i++) { + params = screens_mode_params[i]; + + if (params) + set_mode_for_params(params); + else + break; + } + return; +} static void enable_one_screen(struct mode_set_data *data) { /* SKIP if there are no connected screens. */ @@ -685,8 +737,12 @@ static void setup_pc8(void) { has_pc8 = false; - /* Only Haswell supports the PC8 feature. */ - if (!IS_HASWELL(ms_data.devid) && !IS_BROADWELL(ms_data.devid)) + if (IS_HASWELL(ms_data.devid) && IS_BROADWELL(ms_data.devid)) + ms_data.pc8_needs_screen_off = true; + else if (AT_LEAST_GEN(ms_data.devid, 9)) + ms_data.pc8_needs_screen_off = false; + /* Only Haswell supports the PC8 feature on lesser than GEN9. */ + else return; /* Make sure our Kernel supports MSR and the module is loaded. */ @@ -778,7 +834,6 @@ static void teardown_environment(void) igt_pm_restore_sata_link_power_management(pm_data); free(pm_data); - fini_mode_set_data(&ms_data); close(debugfs); @@ -808,9 +863,15 @@ static void pc8_residency_subtest(void) "configuration.\n"); /* Make sure PC8+ residencies stop! */ - enable_one_screen(&ms_data); - igt_assert_f(!pc8_plus_residency_changed(10), + if (ms_data.pc8_needs_screen_off) { + enable_one_screen(&ms_data); + igt_assert_f(!pc8_plus_residency_changed(10), "PC8+ residency didn't stop with screen enabled.\n"); + } else { + enable_all_screens(&ms_data); + igt_assert_f(pc8_plus_residency_changed(10), + "Machine is not reaching PC8+ states with all screen enabled.\n"); + } } static void modeset_subtest(enum screen_type type, int rounds, int wait_flags)