All of lore.kernel.org
 help / color / mirror / Atom feed
* [igt-dev] [i-g-t V2 0/7] Separate display PM tests from Core
@ 2023-09-05 12:53 Bhanuprakash Modem
  2023-09-05 12:53 ` [igt-dev] [i-g-t V2 1/7] tests/intel/pm: Rename i915_pm_backlight to kms_pm_backlight Bhanuprakash Modem
                   ` (8 more replies)
  0 siblings, 9 replies; 18+ messages in thread
From: Bhanuprakash Modem @ 2023-09-05 12:53 UTC (permalink / raw)
  To: igt-dev

Separate display specific tests from Core and maintain the
binary names with kms_ prefix.

V2: - Rebase

Bhanuprakash Modem (7):
  tests/intel/pm: Rename i915_pm_backlight to kms_pm_backlight
  tests/intel/kms_pm_backlight: Fix testplan documentation
  tests/intel/pm: Rename i915_pm_dc to kms_pm_dc
  tests/intel/kms_pm_dc: Fix testplan documentation
  tests/intel/pm: Rename i915_pm_lpsp to kms_pm_lpsp
  tests/intel/kms_pm_lpsp: Fix testplan documentation
  tests/intel/pm: Separate display specific tests from i915_pm_rpm

 tests/intel-ci/blacklist-pre-merge.txt        |    8 +-
 tests/intel-ci/blacklist.txt                  |    2 +-
 tests/intel-ci/fast-feedback.testlist         |    8 +-
 tests/intel/i915_pm_rpm.c                     |  869 ---------
 ...i915_pm_backlight.c => kms_pm_backlight.c} |   65 +-
 tests/intel/{i915_pm_dc.c => kms_pm_dc.c}     |   88 +-
 tests/intel/{i915_pm_lpsp.c => kms_pm_lpsp.c} |   39 +-
 tests/intel/kms_pm_rpm.c                      | 1628 +++++++++++++++++
 tests/meson.build                             |    7 +-
 9 files changed, 1734 insertions(+), 980 deletions(-)
 rename tests/intel/{i915_pm_backlight.c => kms_pm_backlight.c} (84%)
 rename tests/intel/{i915_pm_dc.c => kms_pm_dc.c} (91%)
 rename tests/intel/{i915_pm_lpsp.c => kms_pm_lpsp.c} (81%)
 create mode 100644 tests/intel/kms_pm_rpm.c

--
2.40.0

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [igt-dev] [i-g-t V2 1/7] tests/intel/pm: Rename i915_pm_backlight to kms_pm_backlight
  2023-09-05 12:53 [igt-dev] [i-g-t V2 0/7] Separate display PM tests from Core Bhanuprakash Modem
@ 2023-09-05 12:53 ` Bhanuprakash Modem
  2023-09-06  7:53   ` Sharma, Swati2
  2023-09-05 12:53 ` [igt-dev] [i-g-t V2 2/7] tests/intel/kms_pm_backlight: Fix testplan documentation Bhanuprakash Modem
                   ` (7 subsequent siblings)
  8 siblings, 1 reply; 18+ messages in thread
From: Bhanuprakash Modem @ 2023-09-05 12:53 UTC (permalink / raw)
  To: igt-dev

As i915_pm_backlight is a display specific test, rename it with
the "kms_" prefix, i.e kms_pm_backlight.

V2: - Rebase

Cc: Swati Sharma <swati2.sharma@intel.com>
Signed-off-by: Bhanuprakash Modem <bhanuprakash.modem@intel.com>
---
 tests/intel-ci/fast-feedback.testlist         |  2 +-
 ...i915_pm_backlight.c => kms_pm_backlight.c} | 25 ++-----------------
 tests/meson.build                             |  2 +-
 3 files changed, 4 insertions(+), 25 deletions(-)
 rename tests/intel/{i915_pm_backlight.c => kms_pm_backlight.c} (87%)

diff --git a/tests/intel-ci/fast-feedback.testlist b/tests/intel-ci/fast-feedback.testlist
index 841051058..51010a2f7 100644
--- a/tests/intel-ci/fast-feedback.testlist
+++ b/tests/intel-ci/fast-feedback.testlist
@@ -118,12 +118,12 @@ igt@kms_pipe_crc_basic@nonblocking-crc
 igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence
 igt@kms_pipe_crc_basic@read-crc
 igt@kms_pipe_crc_basic@read-crc-frame-sequence
+igt@kms_pm_backlight@basic-brightness
 igt@kms_psr@primary_page_flip
 igt@kms_psr@cursor_plane_move
 igt@kms_psr@sprite_plane_onoff
 igt@kms_psr@primary_mmap_gtt
 igt@kms_setmode@basic-clone-single-crtc
-igt@i915_pm_backlight@basic-brightness
 igt@i915_pm_rpm@basic-pci-d3-state
 igt@i915_pm_rpm@basic-rte
 igt@i915_pm_rps@basic-api
diff --git a/tests/intel/i915_pm_backlight.c b/tests/intel/kms_pm_backlight.c
similarity index 87%
rename from tests/intel/i915_pm_backlight.c
rename to tests/intel/kms_pm_backlight.c
index 3c73b054b..eca385518 100644
--- a/tests/intel/i915_pm_backlight.c
+++ b/tests/intel/kms_pm_backlight.c
@@ -1,27 +1,6 @@
+// SPDX-License-Identifier: MIT
 /*
- * Copyright © 2015 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- *
- * Author:
- *    Antti Koskipaa <antti.koskipaa@linux.intel.com>
+ * Copyright © 2023 Intel Corporation
  *
  */
 
diff --git a/tests/meson.build b/tests/meson.build
index aa8e3434c..442df7d84 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -221,7 +221,6 @@ intel_i915_progs = [
 	'i915_module_load',
 	'i915_pciid',
 	'i915_pipe_stress',
-	'i915_pm_backlight',
 	'i915_pm_freq_mult',
 	'i915_pm_lpsp',
 	'i915_pm_rpm',
@@ -262,6 +261,7 @@ intel_kms_progs = [
 	'kms_legacy_colorkey',
 	'kms_mmap_write_crc',
 	'kms_pipe_b_c_ivb',
+	'kms_pm_backlight',
 	'kms_psr',
 	'kms_psr2_sf',
 	'kms_psr2_su',
-- 
2.40.0

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [igt-dev] [i-g-t V2 2/7] tests/intel/kms_pm_backlight: Fix testplan documentation
  2023-09-05 12:53 [igt-dev] [i-g-t V2 0/7] Separate display PM tests from Core Bhanuprakash Modem
  2023-09-05 12:53 ` [igt-dev] [i-g-t V2 1/7] tests/intel/pm: Rename i915_pm_backlight to kms_pm_backlight Bhanuprakash Modem
@ 2023-09-05 12:53 ` Bhanuprakash Modem
  2023-09-06  7:56   ` Sharma, Swati2
  2023-09-05 12:53 ` [igt-dev] [i-g-t V2 3/7] tests/intel/pm: Rename i915_pm_dc to kms_pm_dc Bhanuprakash Modem
                   ` (6 subsequent siblings)
  8 siblings, 1 reply; 18+ messages in thread
From: Bhanuprakash Modem @ 2023-09-05 12:53 UTC (permalink / raw)
  To: igt-dev

As kms_pm_backlight is moved to display, update the test
documentation according to the kms testplan kms_test_config.json

Cc: Swati Sharma <swati2.sharma@intel.com>
Signed-off-by: Bhanuprakash Modem <bhanuprakash.modem@intel.com>
---
 tests/intel/kms_pm_backlight.c | 40 +++++++++++++++++++++++++---------
 1 file changed, 30 insertions(+), 10 deletions(-)

diff --git a/tests/intel/kms_pm_backlight.c b/tests/intel/kms_pm_backlight.c
index eca385518..7a2a4e06f 100644
--- a/tests/intel/kms_pm_backlight.c
+++ b/tests/intel/kms_pm_backlight.c
@@ -16,29 +16,49 @@
 #include "igt_device.h"
 #include "igt_device_scan.h"
 /**
- * TEST: i915 pm backlight
+ * TEST: kms pm backlight
+ * Category: Display
  * Description: Basic backlight sysfs test
- * Feature: backlight
  *
  * SUBTEST: bad-brightness
- * Description: test the bad brightness.
+ * Description: Test the bad brightness.
+ * Driver requirement: i915
+ * Functionality: backlight
+ * Mega feature: Display Power
  * Run type: FULL
+ * Test category: functionality test
  *
  * SUBTEST: basic-brightness
- * Description: test the basic brightness.
+ * Description: Test the basic brightness.
+ * Driver requirement: i915
+ * Functionality: backlight
+ * Mega feature: Display Power
  * Run type: BAT
+ * Test category: functionality test
  *
  * SUBTEST: fade
- * Description: test basic fade.
- * Run type: FULL
+ * Description: Test basic fade.
+ * Driver requirement: i915
+ * Functionality: backlight
+ * Mega feature: Display Power
+ * Run type: BAT
+ * Test category: functionality test
  *
  * SUBTEST: fade-with-dpms
- * Description: test the fade with DPMS.
- * Run type: FULL
+ * Description: Test the fade with DPMS.
+ * Driver requirement: i915
+ * Functionality: dpms, backlight
+ * Mega feature: Display Power
+ * Run type: BAT
+ * Test category: functionality test
  *
  * SUBTEST: fade-with-suspend
- * Description: test the fade with suspend.
- * Run type: FULL
+ * Description: Test the fade with suspend.
+ * Driver requirement: i915
+ * Functionality: backlight, suspend
+ * Mega feature: Display Power
+ * Run type: BAT
+ * Test category: functionality test
  */
 
 struct context {
-- 
2.40.0

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [igt-dev] [i-g-t V2 3/7] tests/intel/pm: Rename i915_pm_dc to kms_pm_dc
  2023-09-05 12:53 [igt-dev] [i-g-t V2 0/7] Separate display PM tests from Core Bhanuprakash Modem
  2023-09-05 12:53 ` [igt-dev] [i-g-t V2 1/7] tests/intel/pm: Rename i915_pm_backlight to kms_pm_backlight Bhanuprakash Modem
  2023-09-05 12:53 ` [igt-dev] [i-g-t V2 2/7] tests/intel/kms_pm_backlight: Fix testplan documentation Bhanuprakash Modem
@ 2023-09-05 12:53 ` Bhanuprakash Modem
  2023-09-06  7:59   ` Sharma, Swati2
  2023-09-05 12:53 ` [igt-dev] [i-g-t V2 4/7] tests/intel/kms_pm_dc: Fix testplan documentation Bhanuprakash Modem
                   ` (5 subsequent siblings)
  8 siblings, 1 reply; 18+ messages in thread
From: Bhanuprakash Modem @ 2023-09-05 12:53 UTC (permalink / raw)
  To: igt-dev

As i915_pm_dc is a display specific test, rename it with
the "kms_" prefix, i.e kms_pm_dc.

V2: - Rebase

Cc: Swati Sharma <swati2.sharma@intel.com>
Signed-off-by: Bhanuprakash Modem <bhanuprakash.modem@intel.com>
---
 tests/intel/{i915_pm_dc.c => kms_pm_dc.c} | 22 ++--------------------
 tests/meson.build                         |  2 +-
 2 files changed, 3 insertions(+), 21 deletions(-)
 rename tests/intel/{i915_pm_dc.c => kms_pm_dc.c} (94%)

diff --git a/tests/intel/i915_pm_dc.c b/tests/intel/kms_pm_dc.c
similarity index 94%
rename from tests/intel/i915_pm_dc.c
rename to tests/intel/kms_pm_dc.c
index 13ae31583..b5b38c976 100644
--- a/tests/intel/i915_pm_dc.c
+++ b/tests/intel/kms_pm_dc.c
@@ -1,24 +1,6 @@
+// SPDX-License-Identifier: MIT
 /*
- * Copyright © 2018 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
+ * Copyright © 2023 Intel Corporation
  *
  */
 
diff --git a/tests/meson.build b/tests/meson.build
index 442df7d84..ea8b60282 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -224,7 +224,6 @@ intel_i915_progs = [
 	'i915_pm_freq_mult',
 	'i915_pm_lpsp',
 	'i915_pm_rpm',
-	'i915_pm_dc',
 	'i915_pm_rc6_residency',
 	'i915_pm_rps',
 	'i915_pm_sseu',
@@ -262,6 +261,7 @@ intel_kms_progs = [
 	'kms_mmap_write_crc',
 	'kms_pipe_b_c_ivb',
 	'kms_pm_backlight',
+	'kms_pm_dc',
 	'kms_psr',
 	'kms_psr2_sf',
 	'kms_psr2_su',
-- 
2.40.0

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [igt-dev] [i-g-t V2 4/7] tests/intel/kms_pm_dc: Fix testplan documentation
  2023-09-05 12:53 [igt-dev] [i-g-t V2 0/7] Separate display PM tests from Core Bhanuprakash Modem
                   ` (2 preceding siblings ...)
  2023-09-05 12:53 ` [igt-dev] [i-g-t V2 3/7] tests/intel/pm: Rename i915_pm_dc to kms_pm_dc Bhanuprakash Modem
@ 2023-09-05 12:53 ` Bhanuprakash Modem
  2023-09-06  8:07   ` Sharma, Swati2
  2023-09-05 12:53 ` [igt-dev] [i-g-t V2 5/7] tests/intel/pm: Rename i915_pm_lpsp to kms_pm_lpsp Bhanuprakash Modem
                   ` (4 subsequent siblings)
  8 siblings, 1 reply; 18+ messages in thread
From: Bhanuprakash Modem @ 2023-09-05 12:53 UTC (permalink / raw)
  To: igt-dev

As kms_pm_dc is moved to display, update the test documentation
according to the kms testplan kms_test_config.json

Cc: Swati Sharma <swati2.sharma@intel.com>
Signed-off-by: Bhanuprakash Modem <bhanuprakash.modem@intel.com>
---
 tests/intel/kms_pm_dc.c | 66 ++++++++++++++++++++++++++++-------------
 1 file changed, 45 insertions(+), 21 deletions(-)

diff --git a/tests/intel/kms_pm_dc.c b/tests/intel/kms_pm_dc.c
index b5b38c976..dd810c0c2 100644
--- a/tests/intel/kms_pm_dc.c
+++ b/tests/intel/kms_pm_dc.c
@@ -19,45 +19,69 @@
 #include "time.h"
 #include "igt_pm.h"
 /**
- * TEST: i915 pm dc
+ * TEST: kms pm dc
+ * Category: Display
  * Description: Tests to validate display power DC states.
- * Run type: FULL
  *
  * SUBTEST: dc3co-vpb-simulation
- * Description:
- *   In this test we make sure that system enters DC3CO when PSR2 is active and system is in SLEEP
- *   state
- * Feature: dc3co, pm_dc
+ * Description: Make sure that system enters DC3CO when PSR2 is active and system
+ *              is in SLEEP state
+ * Driver requirement: i915
+ * Functionality: dc3co, pm_dc, psr2
+ * Mega feature: Display Power
+ * Run type: FULL
+ * Test category: functionality test
  *
  * SUBTEST: dc5-dpms
- * Description:
- *   This test validates display engine entry to DC5 state while all connectors's DPMS property
- *   set to OFF
- * Feature: pm_dc
+ * Description: Validate display engine entry to DC5 state while all connectors's
+ *              DPMS property set to OFF
+ * Driver requirement: i915
+ * Functionality: dpms, pm_dc
+ * Mega feature: Display Power
+ * Run type: FULL
+ * Test category: functionality test
  *
  * SUBTEST: dc5-dpms-negative
- * Description:
- *   This test validates negative scenario of DC5 display engine entry to DC5 state while all
- *   connectors's DPMS property set to ON
- * Feature: pm_dc
+ * Description: Validate negative scenario of DC5 display engine entry to DC5 state
+ *              while all connectors's DPMS property set to ON
+ * Driver requirement: i915
+ * Functionality: dpms, pm_dc
+ * Mega feature: Display Power
+ * Run type: FULL
+ * Test category: functionality test
  *
  * SUBTEST: dc5-psr
  * Description: This test validates display engine entry to DC5 state while PSR is active
- * Feature: pm_dc
+ * Driver requirement: i915
+ * Functionality: pm_dc, psr
+ * Mega feature: Display Power
+ * Run type: FULL
+ * Test category: functionality test
  *
  * SUBTEST: dc6-dpms
- * Description:
- *   This test validates display engine entry to DC6 state while all connectors's DPMS property
- *   set to OFF
- * Feature: pm_dc
+ * Description: Validate display engine entry to DC6 state while all connectors's
+ *              DPMS property set to OFF
+ * Driver requirement: i915
+ * Functionality: dpms, pm_dc
+ * Mega feature: Display Power
+ * Run type: FULL
+ * Test category: functionality test
  *
  * SUBTEST: dc6-psr
  * Description: This test validates display engine entry to DC6 state while PSR is active
- * Feature: pm_dc
+ * Driver requirement: i915
+ * Functionality: pm_dc, psr
+ * Mega feature: Display Power
+ * Run type: FULL
+ * Test category: functionality test
  *
  * SUBTEST: dc9-dpms
  * Description: This test validates display engine entry to DC9 state
- * Feature: pm_dc
+ * Driver requirement: i915
+ * Functionality: dpms, pm_dc
+ * Mega feature: Display Power
+ * Run type: FULL
+ * Test category: functionality test
  */
 
 /* DC State Flags */
-- 
2.40.0

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [igt-dev] [i-g-t V2 5/7] tests/intel/pm: Rename i915_pm_lpsp to kms_pm_lpsp
  2023-09-05 12:53 [igt-dev] [i-g-t V2 0/7] Separate display PM tests from Core Bhanuprakash Modem
                   ` (3 preceding siblings ...)
  2023-09-05 12:53 ` [igt-dev] [i-g-t V2 4/7] tests/intel/kms_pm_dc: Fix testplan documentation Bhanuprakash Modem
@ 2023-09-05 12:53 ` Bhanuprakash Modem
  2023-09-06  8:08   ` Sharma, Swati2
  2023-09-05 12:53 ` [igt-dev] [i-g-t V2 6/7] tests/intel/kms_pm_lpsp: Fix testplan documentation Bhanuprakash Modem
                   ` (3 subsequent siblings)
  8 siblings, 1 reply; 18+ messages in thread
From: Bhanuprakash Modem @ 2023-09-05 12:53 UTC (permalink / raw)
  To: igt-dev

As i915_pm_lpsp is a display specific test, rename it with
the "kms_" prefix, i.e kms_pm_lpsp.

V2: - Rebase

Cc: Swati Sharma <swati2.sharma@intel.com>
Signed-off-by: Bhanuprakash Modem <bhanuprakash.modem@intel.com>
---
 tests/intel/{i915_pm_lpsp.c => kms_pm_lpsp.c} | 24 ++-----------------
 tests/meson.build                             |  2 +-
 2 files changed, 3 insertions(+), 23 deletions(-)
 rename tests/intel/{i915_pm_lpsp.c => kms_pm_lpsp.c} (82%)

diff --git a/tests/intel/i915_pm_lpsp.c b/tests/intel/kms_pm_lpsp.c
similarity index 82%
rename from tests/intel/i915_pm_lpsp.c
rename to tests/intel/kms_pm_lpsp.c
index 291e56674..0adcb8cc0 100644
--- a/tests/intel/i915_pm_lpsp.c
+++ b/tests/intel/kms_pm_lpsp.c
@@ -1,26 +1,6 @@
+// SPDX-License-Identifier: MIT
 /*
- * Copyright © 2013 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- *
- * Author: Paulo Zanoni <paulo.r.zanoni@intel.com>
+ * Copyright © 2023 Intel Corporation
  *
  */
 
diff --git a/tests/meson.build b/tests/meson.build
index ea8b60282..92729e0c3 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -222,7 +222,6 @@ intel_i915_progs = [
 	'i915_pciid',
 	'i915_pipe_stress',
 	'i915_pm_freq_mult',
-	'i915_pm_lpsp',
 	'i915_pm_rpm',
 	'i915_pm_rc6_residency',
 	'i915_pm_rps',
@@ -262,6 +261,7 @@ intel_kms_progs = [
 	'kms_pipe_b_c_ivb',
 	'kms_pm_backlight',
 	'kms_pm_dc',
+	'kms_pm_lpsp',
 	'kms_psr',
 	'kms_psr2_sf',
 	'kms_psr2_su',
-- 
2.40.0

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [igt-dev] [i-g-t V2 6/7] tests/intel/kms_pm_lpsp: Fix testplan documentation
  2023-09-05 12:53 [igt-dev] [i-g-t V2 0/7] Separate display PM tests from Core Bhanuprakash Modem
                   ` (4 preceding siblings ...)
  2023-09-05 12:53 ` [igt-dev] [i-g-t V2 5/7] tests/intel/pm: Rename i915_pm_lpsp to kms_pm_lpsp Bhanuprakash Modem
@ 2023-09-05 12:53 ` Bhanuprakash Modem
  2023-09-06  8:12   ` Sharma, Swati2
  2023-09-05 12:53 ` [igt-dev] [i-g-t V2 7/7] tests/intel/pm: Separate display specific tests from i915_pm_rpm Bhanuprakash Modem
                   ` (2 subsequent siblings)
  8 siblings, 1 reply; 18+ messages in thread
From: Bhanuprakash Modem @ 2023-09-05 12:53 UTC (permalink / raw)
  To: igt-dev

As kms_pm_lpsp is moved to display, update the test documentation
according to the kms testplan kms_test_config.json

Cc: Swati Sharma <swati2.sharma@intel.com>
Signed-off-by: Bhanuprakash Modem <bhanuprakash.modem@intel.com>
---
 tests/intel/kms_pm_lpsp.c | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/tests/intel/kms_pm_lpsp.c b/tests/intel/kms_pm_lpsp.c
index 0adcb8cc0..407558a4f 100644
--- a/tests/intel/kms_pm_lpsp.c
+++ b/tests/intel/kms_pm_lpsp.c
@@ -13,16 +13,25 @@
 #include <fcntl.h>
 #include <unistd.h>
 /**
- * TEST: i915 pm lpsp
+ * TEST: kms pm lpsp
  * Description: These tests validates display Low Power Single Pipe configurations
- * Feature: pm_lpsp
- * Run type: FULL
+ * Category: Display
  *
  * SUBTEST: kms-lpsp
  * Description: This test validates lpsp on all connected outputs on low power PIPE_A
+ * Driver requirement: i915
+ * Functionality: pm_lpsp
+ * Mega feature: Display Power
+ * Run type: FULL
+ * Test category: functionality test
  *
  * SUBTEST: screens-disabled
  * Description: This test validates lpsp while all crtc are disabled
+ * Driver requirement: i915
+ * Functionality: pm_lpsp
+ * Mega feature: Display Power
+ * Run type: FULL
+ * Test category: functionality test
  */
 
 #define MAX_SINK_LPSP_INFO_BUF_LEN	4096
-- 
2.40.0

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [igt-dev] [i-g-t V2 7/7] tests/intel/pm: Separate display specific tests from i915_pm_rpm
  2023-09-05 12:53 [igt-dev] [i-g-t V2 0/7] Separate display PM tests from Core Bhanuprakash Modem
                   ` (5 preceding siblings ...)
  2023-09-05 12:53 ` [igt-dev] [i-g-t V2 6/7] tests/intel/kms_pm_lpsp: Fix testplan documentation Bhanuprakash Modem
@ 2023-09-05 12:53 ` Bhanuprakash Modem
  2023-09-06 13:35   ` Sharma, Swati2
  2023-09-05 17:07 ` [igt-dev] ✓ Fi.CI.BAT: success for Separate display PM tests from Core (rev2) Patchwork
  2023-09-05 20:26 ` [igt-dev] ✗ Fi.CI.IGT: failure " Patchwork
  8 siblings, 1 reply; 18+ messages in thread
From: Bhanuprakash Modem @ 2023-09-05 12:53 UTC (permalink / raw)
  To: igt-dev

Separate display specific tests, from i915_pm_rpm and create
a new binary "kms_pm_rpm" for them.

Note: This patch can be split into multiple, but still it is
a good starting point to review.

V2: - Drop unnecessary header files

Cc: Anshuman Gupta <anshuman.gupta@intel.com>
Cc: Swati Sharma <swati2.sharma@intel.com>
Signed-off-by: Bhanuprakash Modem <bhanuprakash.modem@intel.com>
---
 tests/intel-ci/blacklist-pre-merge.txt |    8 +-
 tests/intel-ci/blacklist.txt           |    2 +-
 tests/intel-ci/fast-feedback.testlist  |    6 +-
 tests/intel/i915_pm_rpm.c              |  869 -------------
 tests/intel/kms_pm_rpm.c               | 1628 ++++++++++++++++++++++++
 tests/meson.build                      |    1 +
 6 files changed, 1637 insertions(+), 877 deletions(-)
 create mode 100644 tests/intel/kms_pm_rpm.c

diff --git a/tests/intel-ci/blacklist-pre-merge.txt b/tests/intel-ci/blacklist-pre-merge.txt
index d4e5ef66e..0a1315aae 100644
--- a/tests/intel-ci/blacklist-pre-merge.txt
+++ b/tests/intel-ci/blacklist-pre-merge.txt
@@ -13,8 +13,8 @@
 #
 # Data acquired on 2020-02-19 by Martin Peres
 ###############################################################################
-igt@i915_pm_rpm@legacy-planes(-dpms)?
-igt@i915_pm_rpm@universal-planes(-dpms)?
+igt@kms_pm_rpm@legacy-planes(-dpms)?
+igt@kms_pm_rpm@universal-planes(-dpms)?
 
 
 ###############################################################################
@@ -67,7 +67,7 @@ igt@gem_exec_alignment@.*
 #
 # Data acquired on 2020-02-20 by Martin Peres
 ###############################################################################
-igt@i915_pm_rpm@debugfs-read
+igt@kms_pm_rpm@debugfs-read
 
 
 ###############################################################################
@@ -109,4 +109,4 @@ igt@gem_tiled_wc
 #
 # Data acquired on 2020-02-20 by Martin Peres
 ###############################################################################
-igt@i915_pm_rpm@modeset-stress-extra-wait
+igt@kms_pm_rpm@modeset-stress-extra-wait
diff --git a/tests/intel-ci/blacklist.txt b/tests/intel-ci/blacklist.txt
index e13759d3e..c8bce2e0e 100644
--- a/tests/intel-ci/blacklist.txt
+++ b/tests/intel-ci/blacklist.txt
@@ -13,7 +13,7 @@ igt@meta_test(@.*)?
 # failures in tests run afterwards.
 ###############################################
 #igt@i915_module_load(@.*)? # danger, danger; hope for taints!
-igt@i915_pm_rpm@module-reload
+igt@kms_pm_rpm@module-reload
 igt@i915_pm_rpm@gem-execbuf-stress-extra-wait
 ###############################################
 # GEM
diff --git a/tests/intel-ci/fast-feedback.testlist b/tests/intel-ci/fast-feedback.testlist
index 51010a2f7..3bbb7593a 100644
--- a/tests/intel-ci/fast-feedback.testlist
+++ b/tests/intel-ci/fast-feedback.testlist
@@ -119,13 +119,13 @@ igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence
 igt@kms_pipe_crc_basic@read-crc
 igt@kms_pipe_crc_basic@read-crc-frame-sequence
 igt@kms_pm_backlight@basic-brightness
+igt@kms_pm_rpm@basic-pci-d3-state
+igt@kms_pm_rpm@basic-rte
 igt@kms_psr@primary_page_flip
 igt@kms_psr@cursor_plane_move
 igt@kms_psr@sprite_plane_onoff
 igt@kms_psr@primary_mmap_gtt
 igt@kms_setmode@basic-clone-single-crtc
-igt@i915_pm_rpm@basic-pci-d3-state
-igt@i915_pm_rpm@basic-rte
 igt@i915_pm_rps@basic-api
 igt@prime_self_import@basic-llseek-bad
 igt@prime_self_import@basic-llseek-size
@@ -161,7 +161,7 @@ igt@gem_lmem_swapping@basic
 igt@gem_lmem_swapping@parallel-random-engines
 igt@gem_lmem_swapping@random-engines
 igt@gem_lmem_swapping@verify-random
-igt@i915_pm_rpm@module-reload
+igt@kms_pm_rpm@module-reload
 
 # Kernel selftests
 igt@i915_selftest@live
diff --git a/tests/intel/i915_pm_rpm.c b/tests/intel/i915_pm_rpm.c
index 17413ffe5..2a6b077a2 100644
--- a/tests/intel/i915_pm_rpm.c
+++ b/tests/intel/i915_pm_rpm.c
@@ -43,25 +43,10 @@
 /**
  * TEST: i915 pm rpm
  *
- * SUBTEST: basic-pci-d3-state
- * Description: Validate PCI device D3 state enter-exit scenario using runtime PM
- * Feature: pm_rpm
- * Functionality: D3 state entry-exit
- * Run type: BAT
- * Test category: pm_rpm
- *
  * SUBTEST: basic-rte
  * Feature: pm_rpm
  * Run type: BAT
  *
- * SUBTEST: cursor
- * Feature: pm_rpm
- * Run type: FULL
- *
- * SUBTEST: cursor-dpms
- * Feature: pm_rpm
- * Run type: FULL
- *
  * SUBTEST: debugfs-forcewake-user
  * Feature: pm_rpm
  * Run type: FULL
@@ -94,10 +79,6 @@
  * Feature: gtt, pm_rpm, synchronization
  * Run type: FULL
  *
- * SUBTEST: fences-dpms
- * Feature: gtt, pm_rpm, synchronization
- * Run type: FULL
- *
  * SUBTEST: gem-evict-pwrite
  * Feature: gtt, pm_rpm
  * Run type: FULL
@@ -127,50 +108,6 @@
  * Feature: pm_rpm
  * Run type: FULL
  *
- * SUBTEST: i2c
- * Feature: pm_rpm
- * Run type: FULL
- *
- * SUBTEST: legacy-planes
- * Feature: pm_rpm
- * Run type: FULL
- *
- * SUBTEST: legacy-planes-dpms
- * Feature: pm_rpm
- * Run type: FULL
- *
- * SUBTEST: modeset-lpsp
- * Feature: pm_rpm
- * Run type: FULL
- *
- * SUBTEST: modeset-lpsp-stress
- * Feature: pm_rpm
- * Run type: FULL
- *
- * SUBTEST: modeset-lpsp-stress-no-wait
- * Feature: pm_rpm
- * Run type: FULL
- *
- * SUBTEST: modeset-non-lpsp
- * Feature: non-lpsp, pm_rpm
- * Run type: FULL
- *
- * SUBTEST: modeset-non-lpsp-stress
- * Feature: non-lpsp, pm_rpm
- * Run type: FULL
- *
- * SUBTEST: modeset-non-lpsp-stress-no-wait
- * Feature: non-lpsp, pm_rpm
- * Run type: FULL
- *
- * SUBTEST: modeset-pc8-residency-stress
- * Feature: pm_rpm
- * Run type: FULL
- *
- * SUBTEST: modeset-stress-extra-wait
- * Feature: pm_rpm
- * Run type: FULL
- *
  * SUBTEST: module-reload
  * Feature: pm_rpm
  * Run type: BAT
@@ -214,18 +151,6 @@
  * SUBTEST: system-suspend-execbuf
  * Feature: pm_rpm
  * Run type: FULL
- *
- * SUBTEST: system-suspend-modeset
- * Feature: pm_rpm
- * Run type: FULL
- *
- * SUBTEST: universal-planes
- * Feature: pm_rpm
- * Run type: FULL
- *
- * SUBTEST: universal-planes-dpms
- * Feature: pm_rpm
- * Run type: FULL
  */
 
 #if defined(__linux__)
@@ -707,343 +632,6 @@ static void fini_mode_set_data(struct mode_set_data *data)
 	}
 }
 
-static void get_drm_info(struct compare_data *data)
-{
-	int i;
-
-	data->res = drmModeGetResources(drm_fd);
-	if (!data->res)
-		return;
-
-	igt_assert(data->res->count_connectors <= MAX_CONNECTORS);
-	igt_assert(data->res->count_encoders <= MAX_ENCODERS);
-	igt_assert(data->res->count_crtcs <= MAX_CRTCS);
-
-	for (i = 0; i < data->res->count_connectors; i++) {
-		/* Don't use GetConnectorCurrent, we want to force a reprobe
-		 * here. */
-		data->connectors[i] = drmModeGetConnector(drm_fd,
-						data->res->connectors[i]);
-		data->edids[i] = get_connector_edid(data->connectors[i], i);
-	}
-	for (i = 0; i < data->res->count_encoders; i++)
-		data->encoders[i] = drmModeGetEncoder(drm_fd,
-						data->res->encoders[i]);
-	for (i = 0; i < data->res->count_crtcs; i++)
-		data->crtcs[i] = drmModeGetCrtc(drm_fd, data->res->crtcs[i]);
-}
-
-static void free_drm_info(struct compare_data *data)
-{
-	int i;
-
-	if (!data->res)
-		return;
-
-	for (i = 0; i < data->res->count_connectors; i++) {
-		drmModeFreeConnector(data->connectors[i]);
-		drmModeFreePropertyBlob(data->edids[i]);
-	}
-	for (i = 0; i < data->res->count_encoders; i++)
-		drmModeFreeEncoder(data->encoders[i]);
-	for (i = 0; i < data->res->count_crtcs; i++)
-		drmModeFreeCrtc(data->crtcs[i]);
-
-	drmModeFreeResources(data->res);
-}
-
-#define COMPARE(d1, d2, data) igt_assert_eq(d1->data, d2->data)
-#define COMPARE_ARRAY(d1, d2, size, data) do { \
-	for (i = 0; i < size; i++) \
-		igt_assert(d1->data[i] == d2->data[i]); \
-} while (0)
-
-static void assert_drm_resources_equal(struct compare_data *d1,
-				       struct compare_data *d2)
-{
-	COMPARE(d1, d2, res->count_connectors);
-	COMPARE(d1, d2, res->count_encoders);
-	COMPARE(d1, d2, res->count_crtcs);
-	COMPARE(d1, d2, res->min_width);
-	COMPARE(d1, d2, res->max_width);
-	COMPARE(d1, d2, res->min_height);
-	COMPARE(d1, d2, res->max_height);
-}
-
-static void assert_modes_equal(drmModeModeInfoPtr m1, drmModeModeInfoPtr m2)
-{
-	COMPARE(m1, m2, clock);
-	COMPARE(m1, m2, hdisplay);
-	COMPARE(m1, m2, hsync_start);
-	COMPARE(m1, m2, hsync_end);
-	COMPARE(m1, m2, htotal);
-	COMPARE(m1, m2, hskew);
-	COMPARE(m1, m2, vdisplay);
-	COMPARE(m1, m2, vsync_start);
-	COMPARE(m1, m2, vsync_end);
-	COMPARE(m1, m2, vtotal);
-	COMPARE(m1, m2, vscan);
-	COMPARE(m1, m2, vrefresh);
-	COMPARE(m1, m2, flags);
-	COMPARE(m1, m2, type);
-	igt_assert(strcmp(m1->name, m2->name) == 0);
-}
-
-static void assert_drm_connectors_equal(drmModeConnectorPtr c1,
-					drmModeConnectorPtr c2)
-{
-	int i;
-
-	COMPARE(c1, c2, connector_id);
-	COMPARE(c1, c2, connector_type);
-	COMPARE(c1, c2, connector_type_id);
-	COMPARE(c1, c2, mmWidth);
-	COMPARE(c1, c2, mmHeight);
-	COMPARE(c1, c2, count_modes);
-	COMPARE(c1, c2, count_props);
-	COMPARE(c1, c2, count_encoders);
-	COMPARE_ARRAY(c1, c2, c1->count_props, props);
-	COMPARE_ARRAY(c1, c2, c1->count_encoders, encoders);
-
-	for (i = 0; i < c1->count_modes; i++)
-		assert_modes_equal(&c1->modes[0], &c2->modes[0]);
-}
-
-static void assert_drm_encoders_equal(drmModeEncoderPtr e1,
-				      drmModeEncoderPtr e2)
-{
-	COMPARE(e1, e2, encoder_id);
-	COMPARE(e1, e2, encoder_type);
-	COMPARE(e1, e2, possible_crtcs);
-	COMPARE(e1, e2, possible_clones);
-}
-
-static void assert_drm_crtcs_equal(drmModeCrtcPtr c1, drmModeCrtcPtr c2)
-{
-	COMPARE(c1, c2, crtc_id);
-}
-
-static void assert_drm_edids_equal(drmModePropertyBlobPtr e1,
-				   drmModePropertyBlobPtr e2)
-{
-	if (!e1 && !e2)
-		return;
-	igt_assert(e1 && e2);
-
-	COMPARE(e1, e2, length);
-
-	igt_assert(memcmp(e1->data, e2->data, e1->length) == 0);
-}
-
-static void assert_drm_infos_equal(struct compare_data *d1,
-				   struct compare_data *d2)
-{
-	int i;
-
-	if (d1->res == d2->res)
-		return;
-
-	igt_assert(d1->res);
-	igt_assert(d2->res);
-
-	assert_drm_resources_equal(d1, d2);
-
-	for (i = 0; i < d1->res->count_connectors; i++) {
-		assert_drm_connectors_equal(d1->connectors[i],
-					    d2->connectors[i]);
-		assert_drm_edids_equal(d1->edids[i], d2->edids[i]);
-	}
-
-	for (i = 0; i < d1->res->count_encoders; i++)
-		assert_drm_encoders_equal(d1->encoders[i], d2->encoders[i]);
-
-	for (i = 0; i < d1->res->count_crtcs; i++)
-		assert_drm_crtcs_equal(d1->crtcs[i], d2->crtcs[i]);
-}
-
-static bool find_i2c_path(const char *connector_name,
-			  char *i2c_path, size_t i2c_path_size)
-{
-	struct dirent *dirent;
-	DIR *dir;
-	int sysfs_card_fd = igt_sysfs_open(drm_fd);
-	int connector_fd = -1;
-	bool found_i2c_file = false;
-	ssize_t r;
-
-	dir = fdopendir(sysfs_card_fd);
-	igt_assert(dir);
-
-	while ((dirent = readdir(dir))) {
-		/* Skip "cardx-" prefix */
-		char *dirname = strchr(dirent->d_name, '-');
-		if (dirname==NULL)
-			continue;
-		++dirname;
-
-		if (strcmp(dirname, connector_name) == 0) {
-			connector_fd = openat(sysfs_card_fd, dirent->d_name, O_RDONLY);
-			break;
-		}
-	}
-	closedir(dir);
-
-	if (connector_fd < 0)
-		return false;
-
-	/* try the standard "ddc" symlink first */
-	r = readlinkat(connector_fd, "ddc", i2c_path, i2c_path_size);
-	if (r > 0 && r != i2c_path_size) {
-		int num;
-
-		i2c_path[r] = '\0';
-
-		if (sscanf(basename(i2c_path), "i2c-%d", &num) == 1) {
-			snprintf(i2c_path, i2c_path_size, "/dev/i2c-%d", num);
-			return true;
-		}
-	}
-
-	dir = fdopendir(connector_fd);
-	igt_assert(dir);
-
-	/* fall back to old "i2c-?" symlink */
-	/* FIXME nuke this at some point */
-	while ((dirent = readdir(dir))) {
-		if (strncmp(dirent->d_name, "i2c-", 4) == 0) {
-			sprintf(i2c_path, "/dev/%s", dirent->d_name);
-			found_i2c_file = true;
-		}
-	}
-	closedir(dir);
-	return found_i2c_file;
-}
-
-
-static bool i2c_read_edid(const char *connector_name, unsigned char *edid)
-{
-	char i2c_path[PATH_MAX];
-	bool result;
-	int rc, fd;
-	struct i2c_msg msgs[] = {
-		{ /* Start at 0. */
-			.addr = 0x50,
-			.flags = 0,
-			.len = 1,
-			.buf = edid,
-		}, { /* Now read the EDID. */
-			.addr = 0x50,
-			.flags = I2C_M_RD,
-			.len = 128,
-			.buf = edid,
-		}
-	};
-	struct i2c_rdwr_ioctl_data msgset = {
-		.msgs = msgs,
-		.nmsgs = 2,
-	};
-
-	result = find_i2c_path(connector_name, i2c_path, sizeof(i2c_path));
-	if (!result)
-		return false;
-
-	igt_info("Testing %s %s\n", connector_name, i2c_path);
-
-	fd = open(i2c_path, O_RDWR);
-	igt_assert_neq(fd, -1);
-
-	rc = ioctl(fd, I2C_RDWR, &msgset);
-	if (rc==-1) {
-		igt_debug("I2C access failed with errno %d, %s\n",
-				errno, strerror(errno));
-		errno = 0;
-	}
-
-	close(fd);
-	return rc >= 0;
-}
-
-static void format_hex_string(const unsigned char edid[static EDID_BLOCK_SIZE],
-			      char buf[static EDID_BLOCK_SIZE * 5 + 1])
-{
-	for (int i = 0; i < EDID_BLOCK_SIZE; ++i)
-		sprintf(buf+i*5, "0x%02x ", edid[i]);
-}
-
-static bool is_mst_connector(int fd, uint32_t connector_id)
-{
-	return kmstest_get_property(fd, connector_id,
-				    DRM_MODE_OBJECT_CONNECTOR,
-				    "PATH", NULL, NULL, NULL);
-}
-
-static void test_i2c(struct mode_set_data *data)
-{
-	bool edid_mistmach_i2c_vs_drm = false;
-	igt_display_t display;
-	igt_display_require(&display, drm_fd);
-
-	for (int i = 0; i < data->res->count_connectors; i++) {
-		unsigned char *drm_edid = data->edids[i] ? data->edids[i]->data : NULL;
-		unsigned char i2c_edid[EDID_BLOCK_SIZE] = {};
-
-		igt_output_t *output = igt_output_from_connector(&display,
-								 data->connectors[i]);
-		char *connector_name = (char *) igt_output_name(output);
-
-		bool got_i2c_edid = i2c_read_edid(connector_name, i2c_edid);
-		bool got_drm_edid = drm_edid != NULL;
-		bool is_vga = data->connectors[i]->connector_type == DRM_MODE_CONNECTOR_VGA;
-
-		bool edids_equal;
-
-		if (data->connectors[i]->connection != DRM_MODE_CONNECTED ||
-		    is_mst_connector(drm_fd, data->connectors[i]->connector_id))
-			continue;
-
-		/* We fail to detect some VGA monitors using our i2c method. If you look
-		 * at the dmesg of these cases, you'll see the Kernel complaining about
-		 * the EDID reading mostly FFs and then disabling bit-banging. Since we
-		 * don't want to reimplement everything the Kernel does, let's just
-		 * accept the fact that some VGA outputs won't be properly detected. */
-		if (is_vga)
-			continue;
-
-		if (!got_i2c_edid && !got_drm_edid)
-			continue;
-
-		if (got_i2c_edid && got_drm_edid)
-			edids_equal = (0 == memcmp(drm_edid, i2c_edid, EDID_BLOCK_SIZE));
-		else
-			edids_equal = false;
-
-
-		if (!edids_equal) {
-			char buf[5 * EDID_BLOCK_SIZE + 1];
-			igt_critical("Detected EDID mismatch on connector %s\n",
-				     connector_name);
-
-			if(got_i2c_edid)
-				format_hex_string(i2c_edid, buf);
-			else
-				sprintf(buf, "NULL");
-
-			igt_critical("i2c: %s\n", buf);
-
-			if(got_drm_edid)
-				format_hex_string(drm_edid, buf);
-			else
-				sprintf(buf, "NULL");
-
-			igt_critical("drm: %s\n", buf);
-
-			edid_mistmach_i2c_vs_drm = true;
-		}
-	}
-	igt_fail_on_f(edid_mistmach_i2c_vs_drm,
-			"There is an EDID mismatch between i2c and DRM!\n");
-}
-
 static void setup_pc8(void)
 {
 	has_pc8 = false;
@@ -1165,102 +753,6 @@ static void pc8_residency_subtest(void)
 		     "PC8+ residency didn't stop with screen enabled.\n");
 }
 
-static void modeset_subtest(enum screen_type type, int rounds, int wait_flags)
-{
-	int i;
-
-	if (wait_flags & WAIT_PC8_RES)
-		igt_require(has_pc8);
-
-	if (wait_flags & WAIT_EXTRA)
-		rounds /= 2;
-
-	for (i = 0; i < rounds; i++) {
-		if (wait_flags & USE_DPMS)
-			disable_all_screens_dpms(&ms_data);
-		else
-			disable_all_screens(&ms_data);
-
-		if (wait_flags & WAIT_STATUS)
-			igt_assert(wait_for_suspended());
-		if (wait_flags & WAIT_PC8_RES)
-			igt_assert(pc8_plus_residency_changed(30));
-		if (wait_flags & WAIT_EXTRA)
-			sleep(5);
-
-		/* If we skip this line it's because the type of screen we want
-		 * is not connected. */
-		igt_require(enable_one_screen_with_type(&ms_data, type));
-		if (wait_flags & WAIT_STATUS)
-			igt_assert(wait_for_active());
-		if (wait_flags & WAIT_PC8_RES)
-			igt_assert(!pc8_plus_residency_changed(5));
-		if (wait_flags & WAIT_EXTRA)
-			sleep(5);
-	}
-}
-
-/* Test of the DRM resources reported by the IOCTLs are still the same. This
- * ensures we still see the monitors with the same eyes. We get the EDIDs and
- * compare them, which ensures we use DP AUX or GMBUS depending on what's
- * connected. */
-static void drm_resources_equal_subtest(void)
-{
-	struct compare_data pre_suspend, during_suspend, post_suspend;
-
-	enable_one_screen_and_wait(&ms_data);
-	get_drm_info(&pre_suspend);
-	igt_assert(wait_for_active());
-
-	disable_all_screens_and_wait(&ms_data);
-	get_drm_info(&during_suspend);
-	igt_assert(wait_for_suspended());
-
-	enable_one_screen_and_wait(&ms_data);
-	get_drm_info(&post_suspend);
-	igt_assert(wait_for_active());
-
-	assert_drm_infos_equal(&pre_suspend, &during_suspend);
-	assert_drm_infos_equal(&pre_suspend, &post_suspend);
-
-	free_drm_info(&pre_suspend);
-	free_drm_info(&during_suspend);
-	free_drm_info(&post_suspend);
-}
-
-static void i2c_subtest_check_environment(void)
-{
-	int i2c_dev_files = 0;
-	DIR *dev_dir;
-	struct dirent *dirent;
-
-	/* Make sure the /dev/i2c-* files exist. */
-	igt_require(modprobe("i2c-dev") == 0);
-
-	dev_dir = opendir("/dev");
-	igt_assert(dev_dir);
-	while ((dirent = readdir(dev_dir))) {
-		if (strncmp(dirent->d_name, "i2c-", 4) == 0)
-			i2c_dev_files++;
-	}
-	closedir(dev_dir);
-	igt_require(i2c_dev_files);
-}
-
-/* Try to use raw I2C, which also needs interrupts. */
-static void i2c_subtest(void)
-{
-	i2c_subtest_check_environment();
-
-	enable_one_screen_and_wait(&ms_data);
-
-	disable_all_screens_and_wait(&ms_data);
-	test_i2c(&ms_data);
-	igt_assert(wait_for_suspended());
-
-	enable_one_screen(&ms_data);
-}
-
 struct read_entry_elapsed {
 	uint64_t elapsed;
 	char *path;
@@ -1875,27 +1367,6 @@ static bool device_in_pci_d3(struct pci_device *pci_dev)
 	return (val & 0x3) == 0x3;
 }
 
-static void pci_d3_state_subtest(void)
-{
-	struct pci_device *pci_dev, *bridge_pci_dev;
-
-	igt_require(has_runtime_pm);
-
-	pci_dev = igt_device_get_pci_device(drm_fd);
-	bridge_pci_dev = pci_device_get_parent_bridge(pci_dev);
-
-	disable_all_screens_and_wait(&ms_data);
-	igt_assert(igt_wait(device_in_pci_d3(pci_dev), 2000, 100));
-
-	if (gem_has_lmem(drm_fd))
-		igt_require_f(pci_device_has_kernel_driver(bridge_pci_dev),
-			      "pci bridge device does not bind with pcieport driver\n");
-
-	enable_one_screen_or_forcewake_get_and_wait(&ms_data);
-	igt_assert(!device_in_pci_d3(pci_dev));
-	forcewake_put(&ms_data);
-}
-
 __noreturn static void stay_subtest(void)
 {
 	disable_all_screens_and_wait(&ms_data);
@@ -1951,287 +1422,6 @@ static void system_suspend_execbuf_subtest(void)
 	gem_close(drm_fd, handle);
 }
 
-static void system_suspend_modeset_subtest(void)
-{
-	disable_all_screens_and_wait(&ms_data);
-	igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE);
-	igt_assert(wait_for_suspended());
-
-	enable_one_screen_and_wait(&ms_data);
-	disable_all_screens_and_wait(&ms_data);
-}
-
-/* Enable a screen, activate DPMS, then do a modeset. At some point our driver
- * produced WARNs on this case. */
-static void dpms_mode_unset_subtest(enum screen_type type)
-{
-	disable_all_screens_and_wait(&ms_data);
-
-	igt_require(enable_one_screen_with_type(&ms_data, type));
-	igt_assert(wait_for_active());
-
-	disable_all_screens_dpms(&ms_data);
-	igt_assert(wait_for_suspended());
-
-	disable_all_screens_and_wait(&ms_data);
-}
-
-static void fill_igt_fb(struct igt_fb *fb, uint32_t color)
-{
-	int i;
-	uint32_t *ptr;
-
-	ptr = gem_mmap__device_coherent(drm_fd, fb->gem_handle, 0, fb->size, PROT_WRITE);
-	for (i = 0; i < fb->size/sizeof(uint32_t); i++)
-		ptr[i] = color;
-	igt_assert(munmap(ptr, fb->size) == 0);
-}
-
-/* At some point, this test triggered WARNs in the Kernel. */
-static void cursor_subtest(bool dpms)
-{
-	int rc;
-	struct igt_fb cursor_fb1, cursor_fb2, cursor_fb3;
-	uint32_t crtc_id;
-
-	disable_all_screens_and_wait(&ms_data);
-
-	igt_require(default_mode_params);
-	crtc_id = default_mode_params->crtc_id;
-
-	igt_create_fb(drm_fd, 64, 64, DRM_FORMAT_ARGB8888,
-		      DRM_FORMAT_MOD_LINEAR, &cursor_fb1);
-	igt_create_fb(drm_fd, 64, 64, DRM_FORMAT_ARGB8888,
-		      DRM_FORMAT_MOD_LINEAR, &cursor_fb2);
-	igt_create_fb(drm_fd, 64, 64, DRM_FORMAT_XRGB8888,
-		      I915_FORMAT_MOD_X_TILED, &cursor_fb3);
-
-	fill_igt_fb(&cursor_fb1, 0xFF00FFFF);
-	fill_igt_fb(&cursor_fb2, 0xFF00FF00);
-	fill_igt_fb(&cursor_fb3, 0xFFFF0000);
-
-	set_mode_for_params_and_wait(default_mode_params);
-
-	rc = drmModeSetCursor(drm_fd, crtc_id, cursor_fb1.gem_handle,
-			      cursor_fb1.width, cursor_fb1.height);
-	igt_assert_eq(rc, 0);
-	rc = drmModeMoveCursor(drm_fd, crtc_id, 0, 0);
-	igt_assert_eq(rc, 0);
-	igt_assert(wait_for_active());
-
-	disable_or_dpms_all_screens_and_wait(&ms_data, dpms);
-
-	/* First, just move the cursor. */
-	rc = drmModeMoveCursor(drm_fd, crtc_id, 1, 1);
-	igt_assert_eq(rc, 0);
-	igt_assert(wait_for_suspended());
-
-	/* Then unset it, and set a new one. */
-	rc = drmModeSetCursor(drm_fd, crtc_id, 0, 0, 0);
-	igt_assert_eq(rc, 0);
-	igt_assert(wait_for_suspended());
-
-	rc = drmModeSetCursor(drm_fd, crtc_id, cursor_fb2.gem_handle,
-			      cursor_fb1.width, cursor_fb2.height);
-	igt_assert_eq(rc, 0);
-	igt_assert(wait_for_suspended());
-
-	/* Move the new cursor. */
-	rc = drmModeMoveCursor(drm_fd, crtc_id, 2, 2);
-	igt_assert_eq(rc, 0);
-	igt_assert(wait_for_suspended());
-
-	/* Now set a new one without unsetting the previous one. */
-	rc = drmModeSetCursor(drm_fd, crtc_id, cursor_fb1.gem_handle,
-			      cursor_fb1.width, cursor_fb1.height);
-	igt_assert_eq(rc, 0);
-	igt_assert(wait_for_suspended());
-
-	/* Cursor 3 was created with tiling and painted with a GTT mmap, so
-	 * hopefully it has some fences around it. */
-	rc = drmModeRmFB(drm_fd, cursor_fb3.fb_id);
-	igt_assert_eq(rc, 0);
-	__gem_set_tiling(drm_fd, cursor_fb3.gem_handle, false, cursor_fb3.strides[0]);
-	igt_assert(wait_for_suspended());
-
-	rc = drmModeSetCursor(drm_fd, crtc_id, cursor_fb3.gem_handle,
-			      cursor_fb3.width, cursor_fb3.height);
-	igt_assert_eq(rc, 0);
-	igt_assert(wait_for_suspended());
-
-	/* Make sure nothing remains for the other tests. */
-	rc = drmModeSetCursor(drm_fd, crtc_id, 0, 0, 0);
-	igt_assert_eq(rc, 0);
-	igt_assert(wait_for_suspended());
-}
-
-static enum plane_type get_plane_type(uint32_t plane_id)
-{
-	int i;
-	bool found;
-	uint64_t prop_value;
-	drmModePropertyPtr prop;
-	const char *enum_name = NULL;
-	enum plane_type type;
-
-	found = kmstest_get_property(drm_fd, plane_id, DRM_MODE_OBJECT_PLANE,
-				     "type", NULL, &prop_value, &prop);
-	igt_assert(found);
-
-	igt_assert(prop->flags & DRM_MODE_PROP_ENUM);
-	igt_assert(prop_value < prop->count_enums);
-
-	for (i = 0; i < prop->count_enums; i++) {
-		if (prop->enums[i].value == prop_value) {
-			enum_name = prop->enums[i].name;
-			break;
-		}
-	}
-	igt_assert(enum_name);
-
-	if (strcmp(enum_name, "Overlay") == 0)
-		type = PLANE_OVERLAY;
-	else if (strcmp(enum_name, "Primary") == 0)
-		type = PLANE_PRIMARY;
-	else if (strcmp(enum_name, "Cursor") == 0)
-		type = PLANE_CURSOR;
-	else
-		igt_assert(0);
-
-	drmModeFreeProperty(prop);
-
-	return type;
-}
-
-static void test_one_plane(bool dpms, uint32_t plane_id,
-			   enum plane_type plane_type)
-{
-	int rc;
-	uint32_t plane_format, plane_w, plane_h;
-	uint32_t crtc_id;
-	struct igt_fb plane_fb1, plane_fb2;
-	int32_t crtc_x = 0, crtc_y = 0;
-	uint64_t modifier;
-
-	disable_all_screens_and_wait(&ms_data);
-
-	crtc_id = default_mode_params->crtc_id;
-
-	switch (plane_type) {
-	case PLANE_OVERLAY:
-		plane_format = DRM_FORMAT_XRGB8888;
-		plane_w = 64;
-		plane_h = 64;
-		modifier = I915_FORMAT_MOD_X_TILED;
-		break;
-	case PLANE_PRIMARY:
-		plane_format = DRM_FORMAT_XRGB8888;
-		plane_w = default_mode_params->mode->hdisplay;
-		plane_h = default_mode_params->mode->vdisplay;
-		modifier = I915_FORMAT_MOD_X_TILED;
-		break;
-	case PLANE_CURSOR:
-		plane_format = DRM_FORMAT_ARGB8888;
-		plane_w = 64;
-		plane_h = 64;
-		modifier = DRM_FORMAT_MOD_LINEAR;
-		break;
-	default:
-		igt_assert(0);
-		break;
-	}
-
-	igt_create_fb(drm_fd, plane_w, plane_h, plane_format, modifier,
-		      &plane_fb1);
-	igt_create_fb(drm_fd, plane_w, plane_h, plane_format, modifier,
-		      &plane_fb2);
-	fill_igt_fb(&plane_fb1, 0xFF00FFFF);
-	fill_igt_fb(&plane_fb2, 0xFF00FF00);
-
-	set_mode_for_params_and_wait(default_mode_params);
-
-	rc = drmModeSetPlane(drm_fd, plane_id, crtc_id, plane_fb1.fb_id, 0,
-			     0, 0, plane_fb1.width, plane_fb1.height,
-			     0 << 16, 0 << 16, plane_fb1.width << 16,
-			     plane_fb1.height << 16);
-	igt_assert_eq(rc, 0);
-
-	disable_or_dpms_all_screens_and_wait(&ms_data, dpms);
-
-	/* Just move the plane around. */
-	if (plane_type != PLANE_PRIMARY) {
-		crtc_x++;
-		crtc_y++;
-	}
-	rc = drmModeSetPlane(drm_fd, plane_id, crtc_id, plane_fb1.fb_id, 0,
-			     crtc_x, crtc_y, plane_fb1.width, plane_fb1.height,
-			     0 << 16, 0 << 16, plane_fb1.width << 16,
-			     plane_fb1.height << 16);
-	igt_assert_eq(rc, 0);
-	igt_assert(wait_for_suspended());
-
-	/* Unset, then change the plane. */
-	rc = drmModeSetPlane(drm_fd, plane_id, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
-	igt_assert_eq(rc, 0);
-	igt_assert(wait_for_suspended());
-
-	rc = drmModeSetPlane(drm_fd, plane_id, crtc_id, plane_fb2.fb_id, 0,
-			     crtc_x, crtc_y, plane_fb2.width, plane_fb2.height,
-			     0 << 16, 0 << 16, plane_fb2.width << 16,
-			     plane_fb2.height << 16);
-	igt_assert_eq(rc, 0);
-	igt_assert(wait_for_suspended());
-
-	/* Now change the plane without unsetting first. */
-	rc = drmModeSetPlane(drm_fd, plane_id, crtc_id, plane_fb1.fb_id, 0,
-			     crtc_x, crtc_y, plane_fb1.width, plane_fb1.height,
-			     0 << 16, 0 << 16, plane_fb1.width << 16,
-			     plane_fb1.height << 16);
-	igt_assert_eq(rc, 0);
-	igt_assert(wait_for_suspended());
-
-	/* Make sure nothing remains for the other tests. */
-	rc = drmModeSetPlane(drm_fd, plane_id, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
-	igt_assert_eq(rc, 0);
-	igt_assert(wait_for_suspended());
-}
-
-/* This one also triggered WARNs on our driver at some point in time. */
-static void planes_subtest(bool universal, bool dpms)
-{
-	int i, crtc_idx;
-	drmModePlaneResPtr planes;
-
-	igt_require(default_mode_params);
-	crtc_idx = kmstest_get_crtc_idx(ms_data.res,
-					default_mode_params->crtc_id);
-
-	igt_assert_eq(drmSetClientCap(drm_fd, DRM_CLIENT_CAP_UNIVERSAL_PLANES,
-				      universal), 0);
-
-	planes = drmModeGetPlaneResources(drm_fd);
-	for (i = 0; i < planes->count_planes; i++) {
-		drmModePlanePtr plane;
-
-		plane = drmModeGetPlane(drm_fd, planes->planes[i]);
-		igt_assert(plane);
-
-		if (plane->possible_crtcs & (1 << crtc_idx)) {
-			enum plane_type type;
-
-			type = universal ? get_plane_type(plane->plane_id) :
-					   PLANE_OVERLAY;
-			igt_dynamic_f("plane-%d", plane->plane_id)
-				test_one_plane(dpms, plane->plane_id, type);
-		}
-		drmModeFreePlane(plane);
-	}
-	drmModeFreePlaneResources(planes);
-
-	igt_assert_eq(drmSetClientCap(drm_fd, DRM_CLIENT_CAP_UNIVERSAL_PLANES,
-				      1), 0);
-}
-
 static void pm_test_tiling(void)
 {
 	uint32_t *handles;
@@ -2436,22 +1626,6 @@ igt_main_args("", long_options, help_str, opt_handler, NULL)
 		igt_subtest("stay")
 			stay_subtest();
 
-	/* Essential things */
-	igt_subtest("drm-resources-equal")
-		drm_resources_equal_subtest();
-	igt_subtest("basic-pci-d3-state")
-		pci_d3_state_subtest();
-
-	/* Basic modeset */
-	igt_subtest("modeset-lpsp")
-		modeset_subtest(SCREEN_TYPE_LPSP, 1, WAIT_STATUS);
-	igt_subtest("modeset-non-lpsp")
-		modeset_subtest(SCREEN_TYPE_NON_LPSP, 1, WAIT_STATUS);
-	igt_subtest("dpms-lpsp")
-		modeset_subtest(SCREEN_TYPE_LPSP, 1, WAIT_STATUS | USE_DPMS);
-	igt_subtest("dpms-non-lpsp")
-		modeset_subtest(SCREEN_TYPE_NON_LPSP, 1, WAIT_STATUS | USE_DPMS);
-
 	/* GEM */
 	igt_subtest_with_dynamic("gem-mmap-type") {
 		for_each_mmap_offset_type(drm_fd, t) {
@@ -2477,25 +1651,9 @@ igt_main_args("", long_options, help_str, opt_handler, NULL)
 		gem_evict_pwrite_subtest();
 	}
 
-	/* Planes and cursors */
-	igt_subtest("cursor")
-		cursor_subtest(false);
-	igt_subtest("cursor-dpms")
-		cursor_subtest(true);
-	igt_subtest_with_dynamic("legacy-planes")
-		planes_subtest(false, false);
-	igt_subtest_with_dynamic("legacy-planes-dpms")
-		planes_subtest(false, true);
-	igt_subtest_with_dynamic("universal-planes")
-		planes_subtest(true, false);
-	igt_subtest_with_dynamic("universal-planes-dpms")
-		planes_subtest(true, true);
-
 	/* Misc */
 	igt_subtest("reg-read-ioctl")
 		reg_read_ioctl_subtest();
-	igt_subtest("i2c")
-		i2c_subtest();
 	igt_subtest("pc8-residency")
 		pc8_residency_subtest();
 	igt_subtest("debugfs-read")
@@ -2504,33 +1662,10 @@ igt_main_args("", long_options, help_str, opt_handler, NULL)
 		debugfs_forcewake_user_subtest();
 	igt_subtest("sysfs-read")
 		sysfs_read_subtest();
-	igt_subtest("dpms-mode-unset-lpsp")
-		dpms_mode_unset_subtest(SCREEN_TYPE_LPSP);
-	igt_subtest("dpms-mode-unset-non-lpsp")
-		dpms_mode_unset_subtest(SCREEN_TYPE_NON_LPSP);
 	igt_subtest("fences") {
 		gem_require_mappable_ggtt(drm_fd);
 		fences_subtest(false);
 	}
-	igt_subtest("fences-dpms") {
-		gem_require_mappable_ggtt(drm_fd);
-		fences_subtest(true);
-	}
-
-	/* Modeset stress */
-	igt_subtest("modeset-lpsp-stress")
-		modeset_subtest(SCREEN_TYPE_LPSP, rounds, WAIT_STATUS);
-	igt_subtest("modeset-non-lpsp-stress")
-		modeset_subtest(SCREEN_TYPE_NON_LPSP, rounds, WAIT_STATUS);
-	igt_subtest("modeset-lpsp-stress-no-wait")
-		modeset_subtest(SCREEN_TYPE_LPSP, rounds, DONT_WAIT);
-	igt_subtest("modeset-non-lpsp-stress-no-wait")
-		modeset_subtest(SCREEN_TYPE_NON_LPSP, rounds, DONT_WAIT);
-	igt_subtest("modeset-pc8-residency-stress")
-		modeset_subtest(SCREEN_TYPE_ANY, rounds, WAIT_PC8_RES);
-	igt_subtest("modeset-stress-extra-wait")
-		modeset_subtest(SCREEN_TYPE_ANY, rounds,
-				WAIT_STATUS | WAIT_EXTRA);
 
 	/* System suspend */
 	igt_subtest("system-suspend-devices")
@@ -2539,8 +1674,6 @@ igt_main_args("", long_options, help_str, opt_handler, NULL)
 		system_suspend_subtest(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE);
 	igt_subtest("system-suspend-execbuf")
 		system_suspend_execbuf_subtest();
-	igt_subtest("system-suspend-modeset")
-		system_suspend_modeset_subtest();
 	igt_subtest("system-hibernate-devices")
 		system_suspend_subtest(SUSPEND_STATE_DISK,
 				       SUSPEND_TEST_DEVICES);
@@ -2600,8 +1733,6 @@ igt_main_args("", long_options, help_str, opt_handler, NULL)
 		igt_assert(setup_environment(true));
 		pci_dev = igt_device_get_pci_device(drm_fd);
 		igt_assert(igt_wait(device_in_pci_d3(pci_dev), 2000, 100));
-		if (enable_one_screen_with_type(&ms_data, SCREEN_TYPE_ANY))
-			drm_resources_equal_subtest();
 		teardown_environment(true);
 
 		/* Remove our mmio_debugging module */
diff --git a/tests/intel/kms_pm_rpm.c b/tests/intel/kms_pm_rpm.c
new file mode 100644
index 000000000..fa0fce413
--- /dev/null
+++ b/tests/intel/kms_pm_rpm.c
@@ -0,0 +1,1628 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2023 Intel Corporation
+ *
+ */
+
+#if defined(__linux__)
+#include <linux/i2c.h>
+#include <linux/i2c-dev.h>
+#elif defined(__FreeBSD__)
+#include <dev/iicbus/iic.h>
+#define	addr	slave
+#endif
+
+#include <dirent.h>
+
+#include "config.h"
+#include "i915/gem.h"
+#include "i915/gem_create.h"
+#include "igt.h"
+#include "igt_debugfs.h"
+#include "igt_device.h"
+#include "igt_edid.h"
+#include "igt_kmod.h"
+#include "igt_sysfs.h"
+#include "intel_blt.h"
+
+/**
+ * TEST: kms pm rpm
+ * Category: Display
+ * Description: Test to validate Runtime PM
+ *
+ * SUBTEST: basic-pci-d3-state
+ * Description: Validate PCI device D3 state enter-exit scenario using runtime PM
+ * Driver requirement: i915
+ * Functionality: pm_rpm
+ * Mega feature: Display Power
+ * Run type: FULL
+ * Test category: functionality test
+ *
+ * SUBTEST: cursor
+ * Description: Validate cursor movements along with suspends using runtime PM
+ * Driver requirement: i915
+ * Functionality: cursor, pm_rpm, suspend
+ * Mega feature: Display Power
+ * Run type: FULL
+ * Test category: functionality test
+ *
+ * SUBTEST: cursor-dpms
+ * Description: Validate cursor movements along with dpms using runtime PM
+ * Driver requirement: i915
+ * Functionality: cursor, dpms, pm_rpm
+ * Mega feature: Display Power
+ * Run type: FULL
+ * Test category: functionality test
+ *
+ * SUBTEST: dpms-lpsp
+ * Description: Validate basic modeset with dpms on lpsp screen using runtime PM
+ * Driver requirement: i915
+ * Functionality: dpms, pm_rpm
+ * Mega feature: Display Power
+ * Run type: FULL
+ * Test category: functionality test
+ *
+ * SUBTEST: dpms-mode-unset-lpsp
+ * Description: Validate basic modeset (negative) with dpms on lpsp screen using runtime PM
+ * Driver requirement: i915
+ * Functionality: dpms, pm_rpm
+ * Mega feature: Display Power
+ * Run type: FULL
+ * Test category: functionality test
+ *
+ * SUBTEST: dpms-mode-unset-non-lpsp
+ * Description: Validate basic modeset (negative) with dpms on non-lpsp screen using runtime PM
+ * Driver requirement: i915
+ * Functionality: dpms, pm_rpm
+ * Mega feature: Display Power
+ * Run type: FULL
+ * Test category: functionality test
+ *
+ * SUBTEST: dpms-non-lpsp
+ * Description: Validate basic modeset with dpms on non-lpsp screen using runtime PM
+ * Driver requirement: i915
+ * Functionality: dpms, pm_rpm
+ * Mega feature: Display Power
+ * Run type: FULL
+ * Test category: functionality test
+ *
+ * SUBTEST: drm-resources-equal
+ * Description: Validate the DRM resources reported by the IOCTLs are still the same.
+ * Driver requirement: i915
+ * Functionality: pm_rpm
+ * Mega feature: Display Power
+ * Run type: FULL
+ * Test category: functionality test
+ *
+ * SUBTEST: fences-dpms
+ * Description: Sanity test for drm fences with dpms.
+ * Driver requirement: i915
+ * Functionality: dpms, pm_rpm
+ * Mega feature: Display Power
+ * Run type: FULL
+ * Test category: functionality test
+ *
+ * SUBTEST: i2c
+ * Description: Validate exposed edids using raw I2C read method.
+ * Driver requirement: i915
+ * Functionality: pm_rpm
+ * Mega feature: Display Power
+ * Run type: FULL
+ * Test category: functionality test
+ *
+ * SUBTEST: legacy-planes
+ * Description: Validate legacy plane (set/unset/change).
+ * Driver requirement: i915
+ * Functionality: pm_rpm, plane
+ * Mega feature: Display Power
+ * Run type: FULL
+ * Test category: functionality test
+ *
+ * SUBTEST: legacy-planes-dpms
+ * Description: Validate legacy plane (set/unset/change) with dpms.
+ * Driver requirement: i915
+ * Functionality: pm_rpm, plane
+ * Mega feature: Display Power
+ * Run type: FULL
+ * Test category: functionality test
+ *
+ * SUBTEST: modeset-lpsp
+ * Description: Validate basic modeset on lpsp screen using runtime PM
+ * Driver requirement: i915
+ * Functionality: pm_rpm
+ * Mega feature: Display Power
+ * Run type: FULL
+ * Test category: functionality test
+ *
+ * SUBTEST: modeset-lpsp-stress
+ * Description: Stress test with modeset on lpsp screen using runtime PM
+ * Driver requirement: i915
+ * Functionality: pm_rpm
+ * Mega feature: Display Power
+ * Run type: FULL
+ * Test category: functionality test
+ *
+ * SUBTEST: modeset-lpsp-stress-no-wait
+ * Description: Stress test with modeset (no wait)on lpsp screen using runtime PM
+ * Driver requirement: i915
+ * Functionality: pm_rpm
+ * Mega feature: Display Power
+ * Run type: FULL
+ * Test category: functionality test
+ *
+ * SUBTEST: modeset-non-lpsp
+ * Description: Validate basic modeset on non-lpsp screen using runtime PM
+ * Driver requirement: i915
+ * Functionality: pm_rpm
+ * Mega feature: Display Power
+ * Run type: FULL
+ * Test category: functionality test
+ *
+ * SUBTEST: modeset-non-lpsp-stress
+ * Description: Stress test with modeset on non-lpsp screen using runtime PM
+ * Driver requirement: i915
+ * Functionality: pm_rpm
+ * Mega feature: Display Power
+ * Run type: FULL
+ * Test category: functionality test
+ *
+ * SUBTEST: modeset-non-lpsp-stress-no-wait
+ * Description: Stress test with modeset (no wait) on non-lpsp screen using runtime PM
+ * Driver requirement: i915
+ * Functionality: pm_rpm
+ * Mega feature: Display Power
+ * Run type: FULL
+ * Test category: functionality test
+ *
+ * SUBTEST: modeset-pc8-residency-stress
+ * Description: Stress test with modeset (pc8 residency) using runtime PM
+ * Driver requirement: i915
+ * Functionality: pm_rpm
+ * Mega feature: Display Power
+ * Run type: FULL
+ * Test category: functionality test
+ *
+ * SUBTEST: modeset-stress-extra-wait
+ * Description: Stress test with modeset (extra wait) using runtime PM
+ * Driver requirement: i915
+ * Functionality: pm_rpm
+ * Mega feature: Display Power
+ * Run type: FULL
+ * Test category: functionality test
+ *
+ * SUBTEST: system-suspend-modeset
+ * Description: Validate basic modeset with suspend
+ * Driver requirement: i915
+ * Functionality: pm_rpm, suspend
+ * Mega feature: Display Power
+ * Run type: FULL
+ * Test category: functionality test
+ *
+ * SUBTEST: universal-planes
+ * Description: Validate universal plane (set/unset/change).
+ * Driver requirement: i915
+ * Functionality: pm_rpm, plane
+ * Mega feature: Display Power
+ * Run type: FULL
+ * Test category: functionality test
+ *
+ * SUBTEST: universal-planes-dpms
+ * Description: Validate universal plane (set/unset/change) with dpms.
+ * Driver requirement: i915
+ * Functionality: pm_rpm, plane
+ * Mega feature: Display Power
+ * Run type: FULL
+ * Test category: functionality test
+ */
+
+#define MSR_PC8_RES	0x630
+#define MSR_PC9_RES	0x631
+#define MSR_PC10_RES	0x632
+
+#define MAX_CONNECTORS	32
+#define MAX_ENCODERS	32
+#define MAX_CRTCS	16
+
+#define WIDTH 64
+#define HEIGHT 64
+#define STRIDE (WIDTH)
+#define SIZE (HEIGHT * STRIDE)
+
+enum pc8_status {
+	PC8_ENABLED,
+	PC8_DISABLED
+};
+
+enum screen_type {
+	SCREEN_TYPE_LPSP,
+	SCREEN_TYPE_NON_LPSP,
+	SCREEN_TYPE_ANY,
+};
+
+enum plane_type {
+	PLANE_OVERLAY,
+	PLANE_PRIMARY,
+	PLANE_CURSOR,
+};
+
+/* Wait flags */
+#define DONT_WAIT	0
+#define WAIT_STATUS	1
+#define WAIT_PC8_RES	2
+#define WAIT_EXTRA	4
+#define USE_DPMS	8
+
+int drm_fd, msr_fd, pc8_status_fd;
+int debugfs;
+bool has_runtime_pm, has_pc8;
+struct mode_set_data ms_data;
+
+/* Stuff used when creating FBs and mode setting. */
+struct mode_set_data {
+	drmModeResPtr res;
+	drmModeConnectorPtr connectors[MAX_CONNECTORS];
+	drmModePropertyBlobPtr edids[MAX_CONNECTORS];
+	igt_display_t display;
+
+	uint32_t devid;
+	int fw_fd;
+};
+
+/* Stuff we query at different times so we can compare. */
+struct compare_data {
+	drmModeResPtr res;
+	drmModeEncoderPtr encoders[MAX_ENCODERS];
+	drmModeConnectorPtr connectors[MAX_CONNECTORS];
+	drmModeCrtcPtr crtcs[MAX_CRTCS];
+	drmModePropertyBlobPtr edids[MAX_CONNECTORS];
+};
+
+struct modeset_params {
+	uint32_t crtc_id;
+	uint32_t connector_id;
+	struct igt_fb fb;
+	drmModeModeInfoPtr mode;
+};
+
+struct data_t {
+	int width;
+	int height;
+	uint32_t region;
+};
+
+struct modeset_params lpsp_mode_params;
+struct modeset_params non_lpsp_mode_params;
+struct modeset_params *default_mode_params;
+
+static int modprobe(const char *driver)
+{
+	return igt_kmod_load(driver, NULL);
+}
+
+/* If the read fails, then the machine doesn't support PC8+ residencies. */
+static bool supports_pc8_plus_residencies(void)
+{
+	int rc;
+	uint64_t val;
+
+	rc = pread(msr_fd, &val, sizeof(uint64_t), MSR_PC8_RES);
+	if (rc != sizeof(val))
+		return false;
+	rc = pread(msr_fd, &val, sizeof(uint64_t), MSR_PC9_RES);
+	if (rc != sizeof(val))
+		return false;
+	rc = pread(msr_fd, &val, sizeof(uint64_t), MSR_PC10_RES);
+	if (rc != sizeof(val))
+		return false;
+
+	return igt_pm_pc8_plus_residencies_enabled(msr_fd);
+}
+
+static uint64_t get_residency(uint32_t type)
+{
+	int rc;
+	uint64_t ret;
+
+	rc = pread(msr_fd, &ret, sizeof(uint64_t), type);
+	igt_assert(rc == sizeof(ret));
+
+	return ret;
+}
+
+static bool pc8_plus_residency_changed(unsigned int timeout_sec)
+{
+	uint64_t res_pc8, res_pc9, res_pc10;
+
+	res_pc8 = get_residency(MSR_PC8_RES);
+	res_pc9 = get_residency(MSR_PC9_RES);
+	res_pc10 = get_residency(MSR_PC10_RES);
+
+	return igt_wait(res_pc8 != get_residency(MSR_PC8_RES) ||
+			res_pc9 != get_residency(MSR_PC9_RES) ||
+			res_pc10 != get_residency(MSR_PC10_RES),
+			timeout_sec * 1000, 100);
+}
+
+static enum pc8_status get_pc8_status(void)
+{
+	ssize_t n_read;
+	char buf[150]; /* The whole file has less than 100 chars. */
+
+	lseek(pc8_status_fd, 0, SEEK_SET);
+	n_read = read(pc8_status_fd, buf, ARRAY_SIZE(buf));
+	igt_assert(n_read >= 0);
+	buf[n_read] = '\0';
+
+	if (strstr(buf, "\nEnabled: yes\n"))
+		return PC8_ENABLED;
+	else
+		return PC8_DISABLED;
+}
+
+static bool wait_for_pc8_status(enum pc8_status status)
+{
+	return igt_wait(get_pc8_status() == status, 10000, 100);
+}
+
+static bool wait_for_suspended(void)
+{
+	if (has_pc8 && !has_runtime_pm) {
+		return wait_for_pc8_status(PC8_ENABLED);
+	} else {
+		bool suspended = igt_wait_for_pm_status(IGT_RUNTIME_PM_STATUS_SUSPENDED);
+
+		if (!suspended) {
+			/* Dump runtime pm status even if test skips */
+			__igt_debugfs_dump(drm_fd, "i915_runtime_pm_status", IGT_LOG_INFO);
+		}
+
+		return suspended;
+	}
+}
+
+static bool wait_for_active(void)
+{
+	if (has_pc8 && !has_runtime_pm)
+		return wait_for_pc8_status(PC8_DISABLED);
+	else
+		return igt_wait_for_pm_status(IGT_RUNTIME_PM_STATUS_ACTIVE);
+}
+
+static void disable_all_screens_dpms(struct mode_set_data *data)
+{
+	if (!data->res)
+		return;
+
+	for (int i = 0; i < data->res->count_connectors; i++) {
+		drmModeConnectorPtr c = data->connectors[i];
+
+		kmstest_set_connector_dpms(drm_fd, c, DRM_MODE_DPMS_OFF);
+	}
+}
+
+static void disable_all_screens(struct mode_set_data *data)
+{
+	if (data->res)
+		kmstest_unset_all_crtcs(drm_fd, data->res);
+}
+
+#define disable_all_screens_and_wait(data) do { \
+	disable_all_screens(data); \
+	igt_assert(wait_for_suspended()); \
+} while (0)
+
+static void disable_or_dpms_all_screens(struct mode_set_data *data, bool dpms)
+{
+	if (dpms)
+		disable_all_screens_dpms(&ms_data);
+	else
+		disable_all_screens(&ms_data);
+}
+
+#define disable_or_dpms_all_screens_and_wait(data, dpms) do { \
+	disable_or_dpms_all_screens((data), (dpms)); \
+	igt_assert(wait_for_suspended()); \
+} while (0)
+
+static bool init_modeset_params_for_type(struct mode_set_data *data,
+					 struct modeset_params *params,
+					 enum screen_type type)
+{
+	drmModeConnectorPtr connector = NULL;
+	drmModeModeInfoPtr mode = NULL;
+	igt_output_t *output = NULL;
+	igt_display_t *display = &data->display;
+
+	if (!data->res || !display)
+		return false;
+
+	for_each_connected_output(display, output) {
+		drmModeConnectorPtr c = output->config.connector;
+
+		if (type == SCREEN_TYPE_LPSP &&
+		     !i915_output_is_lpsp_capable(drm_fd, output))
+			continue;
+
+		if (type == SCREEN_TYPE_NON_LPSP &&
+		    i915_output_is_lpsp_capable(drm_fd, output))
+			continue;
+
+		connector = c;
+		mode = igt_output_get_mode(output);
+		break;
+	}
+
+	if (!connector || !mode)
+		return false;
+
+	igt_create_pattern_fb(drm_fd, mode->hdisplay, mode->vdisplay,
+			      DRM_FORMAT_XRGB8888, DRM_FORMAT_MOD_LINEAR,
+			      &params->fb);
+
+	params->crtc_id = kmstest_find_crtc_for_connector(drm_fd, data->res,
+							  connector, 0);
+	params->connector_id = connector->connector_id;
+	params->mode = mode;
+
+	return true;
+}
+
+static void init_modeset_cached_params(struct mode_set_data *data)
+{
+	bool lpsp, non_lpsp;
+
+	lpsp = init_modeset_params_for_type(data, &lpsp_mode_params,
+					    SCREEN_TYPE_LPSP);
+	non_lpsp = init_modeset_params_for_type(data, &non_lpsp_mode_params,
+						SCREEN_TYPE_NON_LPSP);
+
+	if (lpsp)
+		default_mode_params = &lpsp_mode_params;
+	else if (non_lpsp)
+		default_mode_params = &non_lpsp_mode_params;
+	else
+		default_mode_params = NULL;
+}
+
+static bool set_mode_for_params(struct modeset_params *params)
+{
+	int rc;
+
+	rc = drmModeSetCrtc(drm_fd, params->crtc_id, params->fb.fb_id, 0, 0,
+			    &params->connector_id, 1, params->mode);
+	return (rc == 0);
+}
+
+#define set_mode_for_params_and_wait(params) do { \
+	igt_assert(set_mode_for_params(params)); \
+	igt_assert(wait_for_active()); \
+} while (0)
+
+static bool enable_one_screen_with_type(struct mode_set_data *data,
+					enum screen_type type)
+{
+	struct modeset_params *params = NULL;
+
+	switch (type) {
+	case SCREEN_TYPE_ANY:
+		params = default_mode_params;
+		break;
+	case SCREEN_TYPE_LPSP:
+		params = &lpsp_mode_params;
+		break;
+	case SCREEN_TYPE_NON_LPSP:
+		params = &non_lpsp_mode_params;
+		break;
+	default:
+		igt_assert(0);
+	}
+
+	if (!params)
+		return false;
+
+	return set_mode_for_params(params);
+}
+
+static void enable_one_screen(struct mode_set_data *data)
+{
+	/* SKIP if there are no connected screens. */
+	igt_require(enable_one_screen_with_type(data, SCREEN_TYPE_ANY));
+}
+
+#define enable_one_screen_and_wait(data) do { \
+	enable_one_screen(data); \
+	igt_assert(wait_for_active()); \
+} while (0)
+
+static void
+enable_one_screen_or_forcewake_get_and_wait(struct mode_set_data *data)
+{
+	bool headless;
+
+	/* Try to resume by enabling any type of display */
+	headless = !enable_one_screen_with_type(data, SCREEN_TYPE_ANY);
+
+	/*
+	 * Get User Forcewake to trigger rpm resume in case of headless
+	 * as well as no display being connected.
+	 */
+	if (headless) {
+		data->fw_fd = igt_open_forcewake_handle(drm_fd);
+		igt_require(data->fw_fd > 0);
+	}
+	igt_assert(wait_for_active());
+}
+
+static void forcewake_put(struct mode_set_data *data)
+{
+	if (data->fw_fd <= 0)
+		return;
+
+	data->fw_fd = close(data->fw_fd);
+	igt_assert_eq(data->fw_fd, 0);
+}
+
+static drmModePropertyBlobPtr get_connector_edid(drmModeConnectorPtr connector,
+						 int index)
+{
+	bool found;
+	uint64_t prop_value;
+	drmModePropertyPtr prop;
+	drmModePropertyBlobPtr blob = NULL;
+
+	found = kmstest_get_property(drm_fd, connector->connector_id,
+				     DRM_MODE_OBJECT_CONNECTOR, "EDID",
+				     NULL, &prop_value, &prop);
+
+	if (found) {
+		igt_assert(prop->flags & DRM_MODE_PROP_BLOB);
+		igt_assert(prop->count_blobs == 0);
+
+		blob = drmModeGetPropertyBlob(drm_fd, prop_value);
+
+		drmModeFreeProperty(prop);
+	}
+
+	return blob;
+}
+
+static void init_mode_set_data(struct mode_set_data *data)
+{
+	data->res = drmModeGetResources(drm_fd);
+	if (data->res) {
+		igt_assert(data->res->count_connectors <= MAX_CONNECTORS);
+		for (int i = 0; i < data->res->count_connectors; i++) {
+			data->connectors[i] =
+				drmModeGetConnector(drm_fd,
+						    data->res->connectors[i]);
+			data->edids[i] = get_connector_edid(data->connectors[i], i);
+		}
+
+		kmstest_set_vt_graphics_mode();
+		igt_display_require(&data->display, drm_fd);
+	}
+
+	init_modeset_cached_params(&ms_data);
+}
+
+static void fini_mode_set_data(struct mode_set_data *data)
+{
+	if (data->res) {
+		for (int i = 0; i < data->res->count_connectors; i++) {
+			drmModeFreeConnector(data->connectors[i]);
+			drmModeFreePropertyBlob(data->edids[i]);
+		}
+		drmModeFreeResources(data->res);
+		igt_display_fini(&data->display);
+	}
+}
+
+static void get_drm_info(struct compare_data *data)
+{
+	int i;
+
+	data->res = drmModeGetResources(drm_fd);
+	if (!data->res)
+		return;
+
+	igt_assert(data->res->count_connectors <= MAX_CONNECTORS);
+	igt_assert(data->res->count_encoders <= MAX_ENCODERS);
+	igt_assert(data->res->count_crtcs <= MAX_CRTCS);
+
+	for (i = 0; i < data->res->count_connectors; i++) {
+		/* Don't use GetConnectorCurrent, we want to force a reprobe
+		 * here. */
+		data->connectors[i] = drmModeGetConnector(drm_fd,
+						data->res->connectors[i]);
+		data->edids[i] = get_connector_edid(data->connectors[i], i);
+	}
+	for (i = 0; i < data->res->count_encoders; i++)
+		data->encoders[i] = drmModeGetEncoder(drm_fd,
+						data->res->encoders[i]);
+	for (i = 0; i < data->res->count_crtcs; i++)
+		data->crtcs[i] = drmModeGetCrtc(drm_fd, data->res->crtcs[i]);
+}
+
+static void free_drm_info(struct compare_data *data)
+{
+	int i;
+
+	if (!data->res)
+		return;
+
+	for (i = 0; i < data->res->count_connectors; i++) {
+		drmModeFreeConnector(data->connectors[i]);
+		drmModeFreePropertyBlob(data->edids[i]);
+	}
+	for (i = 0; i < data->res->count_encoders; i++)
+		drmModeFreeEncoder(data->encoders[i]);
+	for (i = 0; i < data->res->count_crtcs; i++)
+		drmModeFreeCrtc(data->crtcs[i]);
+
+	drmModeFreeResources(data->res);
+}
+
+#define COMPARE(d1, d2, data) igt_assert_eq(d1->data, d2->data)
+#define COMPARE_ARRAY(d1, d2, size, data) do { \
+	for (i = 0; i < size; i++) \
+		igt_assert(d1->data[i] == d2->data[i]); \
+} while (0)
+
+static void assert_drm_resources_equal(struct compare_data *d1,
+				       struct compare_data *d2)
+{
+	COMPARE(d1, d2, res->count_connectors);
+	COMPARE(d1, d2, res->count_encoders);
+	COMPARE(d1, d2, res->count_crtcs);
+	COMPARE(d1, d2, res->min_width);
+	COMPARE(d1, d2, res->max_width);
+	COMPARE(d1, d2, res->min_height);
+	COMPARE(d1, d2, res->max_height);
+}
+
+static void assert_modes_equal(drmModeModeInfoPtr m1, drmModeModeInfoPtr m2)
+{
+	COMPARE(m1, m2, clock);
+	COMPARE(m1, m2, hdisplay);
+	COMPARE(m1, m2, hsync_start);
+	COMPARE(m1, m2, hsync_end);
+	COMPARE(m1, m2, htotal);
+	COMPARE(m1, m2, hskew);
+	COMPARE(m1, m2, vdisplay);
+	COMPARE(m1, m2, vsync_start);
+	COMPARE(m1, m2, vsync_end);
+	COMPARE(m1, m2, vtotal);
+	COMPARE(m1, m2, vscan);
+	COMPARE(m1, m2, vrefresh);
+	COMPARE(m1, m2, flags);
+	COMPARE(m1, m2, type);
+	igt_assert(strcmp(m1->name, m2->name) == 0);
+}
+
+static void assert_drm_connectors_equal(drmModeConnectorPtr c1,
+					drmModeConnectorPtr c2)
+{
+	int i;
+
+	COMPARE(c1, c2, connector_id);
+	COMPARE(c1, c2, connector_type);
+	COMPARE(c1, c2, connector_type_id);
+	COMPARE(c1, c2, mmWidth);
+	COMPARE(c1, c2, mmHeight);
+	COMPARE(c1, c2, count_modes);
+	COMPARE(c1, c2, count_props);
+	COMPARE(c1, c2, count_encoders);
+	COMPARE_ARRAY(c1, c2, c1->count_props, props);
+	COMPARE_ARRAY(c1, c2, c1->count_encoders, encoders);
+
+	for (i = 0; i < c1->count_modes; i++)
+		assert_modes_equal(&c1->modes[0], &c2->modes[0]);
+}
+
+static void assert_drm_encoders_equal(drmModeEncoderPtr e1,
+				      drmModeEncoderPtr e2)
+{
+	COMPARE(e1, e2, encoder_id);
+	COMPARE(e1, e2, encoder_type);
+	COMPARE(e1, e2, possible_crtcs);
+	COMPARE(e1, e2, possible_clones);
+}
+
+static void assert_drm_crtcs_equal(drmModeCrtcPtr c1, drmModeCrtcPtr c2)
+{
+	COMPARE(c1, c2, crtc_id);
+}
+
+static void assert_drm_edids_equal(drmModePropertyBlobPtr e1,
+				   drmModePropertyBlobPtr e2)
+{
+	if (!e1 && !e2)
+		return;
+	igt_assert(e1 && e2);
+
+	COMPARE(e1, e2, length);
+
+	igt_assert(memcmp(e1->data, e2->data, e1->length) == 0);
+}
+
+static void assert_drm_infos_equal(struct compare_data *d1,
+				   struct compare_data *d2)
+{
+	int i;
+
+	if (d1->res == d2->res)
+		return;
+
+	igt_assert(d1->res);
+	igt_assert(d2->res);
+
+	assert_drm_resources_equal(d1, d2);
+
+	for (i = 0; i < d1->res->count_connectors; i++) {
+		assert_drm_connectors_equal(d1->connectors[i],
+					    d2->connectors[i]);
+		assert_drm_edids_equal(d1->edids[i], d2->edids[i]);
+	}
+
+	for (i = 0; i < d1->res->count_encoders; i++)
+		assert_drm_encoders_equal(d1->encoders[i], d2->encoders[i]);
+
+	for (i = 0; i < d1->res->count_crtcs; i++)
+		assert_drm_crtcs_equal(d1->crtcs[i], d2->crtcs[i]);
+}
+
+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))
+		return;
+
+	/* Make sure our Kernel supports MSR and the module is loaded. */
+	igt_require(modprobe("msr") == 0);
+
+	msr_fd = open("/dev/cpu/0/msr", O_RDONLY);
+	igt_assert_f(msr_fd >= 0,
+		     "Can't open /dev/cpu/0/msr.\n");
+
+	/* Non-ULT machines don't support PC8+. */
+	if (!supports_pc8_plus_residencies())
+		return;
+
+	pc8_status_fd = openat(debugfs, "i915_pc8_status", O_RDONLY);
+	if (pc8_status_fd == -1)
+		pc8_status_fd = openat(debugfs,
+				       "i915_runtime_pm_status", O_RDONLY);
+	igt_assert_f(pc8_status_fd >= 0,
+		     "Can't open /sys/kernel/debug/dri/0/i915_runtime_pm_status");
+
+	has_pc8 = true;
+}
+
+static void dump_file(int dir, const char *filename)
+{
+	char *contents;
+
+	contents = igt_sysfs_get(dir, filename);
+	if (!contents)
+		return;
+
+	igt_info("%s:\n%s\n", filename, contents);
+	free(contents);
+}
+
+static bool setup_environment(bool display_enabled)
+{
+	if (has_runtime_pm)
+		goto out;
+
+	drm_fd = __drm_open_driver(DRIVER_INTEL);
+	igt_require(drm_fd != -1);
+	igt_device_set_master(drm_fd);
+
+	debugfs = igt_debugfs_dir(drm_fd);
+	igt_require(debugfs != -1);
+
+	ms_data.devid = intel_get_drm_devid(drm_fd);
+
+	if (display_enabled)
+		init_mode_set_data(&ms_data);
+
+	igt_pm_enable_sata_link_power_management();
+
+	has_runtime_pm = igt_setup_runtime_pm(drm_fd);
+	setup_pc8();
+
+	igt_info("Runtime PM support: %d\n", has_runtime_pm);
+	igt_info("PC8 residency support: %d\n", has_pc8);
+	igt_require(has_runtime_pm);
+	igt_require(igt_pm_dmc_loaded(debugfs));
+
+out:
+	if (display_enabled)
+		disable_all_screens(&ms_data);
+	dump_file(debugfs, "i915_runtime_pm_status");
+
+	return wait_for_suspended();
+}
+
+static void teardown_environment(bool display_enabled)
+{
+	close(msr_fd);
+	if (has_pc8)
+		close(pc8_status_fd);
+
+	igt_restore_runtime_pm();
+
+	igt_pm_restore_sata_link_power_management();
+
+	if (display_enabled)
+		fini_mode_set_data(&ms_data);
+
+	close(debugfs);
+	close(drm_fd);
+
+	has_runtime_pm = false;
+}
+
+static void modeset_subtest(enum screen_type type, int rounds, int wait_flags)
+{
+	int i;
+
+	if (wait_flags & WAIT_PC8_RES)
+		igt_require(has_pc8);
+
+	if (wait_flags & WAIT_EXTRA)
+		rounds /= 2;
+
+	for (i = 0; i < rounds; i++) {
+		if (wait_flags & USE_DPMS)
+			disable_all_screens_dpms(&ms_data);
+		else
+			disable_all_screens(&ms_data);
+
+		if (wait_flags & WAIT_STATUS)
+			igt_assert(wait_for_suspended());
+		if (wait_flags & WAIT_PC8_RES)
+			igt_assert(pc8_plus_residency_changed(30));
+		if (wait_flags & WAIT_EXTRA)
+			sleep(5);
+
+		/* If we skip this line it's because the type of screen we want
+		 * is not connected. */
+		igt_require(enable_one_screen_with_type(&ms_data, type));
+		if (wait_flags & WAIT_STATUS)
+			igt_assert(wait_for_active());
+		if (wait_flags & WAIT_PC8_RES)
+			igt_assert(!pc8_plus_residency_changed(5));
+		if (wait_flags & WAIT_EXTRA)
+			sleep(5);
+	}
+}
+
+/* Test of the DRM resources reported by the IOCTLs are still the same. This
+ * ensures we still see the monitors with the same eyes. We get the EDIDs and
+ * compare them, which ensures we use DP AUX or GMBUS depending on what's
+ * connected. */
+static void drm_resources_equal_subtest(void)
+{
+	struct compare_data pre_suspend, during_suspend, post_suspend;
+
+	enable_one_screen_and_wait(&ms_data);
+	get_drm_info(&pre_suspend);
+	igt_assert(wait_for_active());
+
+	disable_all_screens_and_wait(&ms_data);
+	get_drm_info(&during_suspend);
+	igt_assert(wait_for_suspended());
+
+	enable_one_screen_and_wait(&ms_data);
+	get_drm_info(&post_suspend);
+	igt_assert(wait_for_active());
+
+	assert_drm_infos_equal(&pre_suspend, &during_suspend);
+	assert_drm_infos_equal(&pre_suspend, &post_suspend);
+
+	free_drm_info(&pre_suspend);
+	free_drm_info(&during_suspend);
+	free_drm_info(&post_suspend);
+}
+
+static bool find_i2c_path(const char *connector_name,
+			  char *i2c_path, size_t i2c_path_size)
+{
+	struct dirent *dirent;
+	DIR *dir;
+	int sysfs_card_fd = igt_sysfs_open(drm_fd);
+	int connector_fd = -1;
+	bool found_i2c_file = false;
+	ssize_t r;
+
+	dir = fdopendir(sysfs_card_fd);
+	igt_assert(dir);
+
+	while ((dirent = readdir(dir))) {
+		/* Skip "cardx-" prefix */
+		char *dirname = strchr(dirent->d_name, '-');
+		if (dirname==NULL)
+			continue;
+		++dirname;
+
+		if (strcmp(dirname, connector_name) == 0) {
+			connector_fd = openat(sysfs_card_fd, dirent->d_name, O_RDONLY);
+			break;
+		}
+	}
+	closedir(dir);
+
+	if (connector_fd < 0)
+		return false;
+
+	/* try the standard "ddc" symlink first */
+	r = readlinkat(connector_fd, "ddc", i2c_path, i2c_path_size);
+	if (r > 0 && r != i2c_path_size) {
+		int num;
+
+		i2c_path[r] = '\0';
+
+		if (sscanf(basename(i2c_path), "i2c-%d", &num) == 1) {
+			snprintf(i2c_path, i2c_path_size, "/dev/i2c-%d", num);
+			return true;
+		}
+	}
+
+	dir = fdopendir(connector_fd);
+	igt_assert(dir);
+
+	/* fall back to old "i2c-?" symlink */
+	/* FIXME nuke this at some point */
+	while ((dirent = readdir(dir))) {
+		if (strncmp(dirent->d_name, "i2c-", 4) == 0) {
+			sprintf(i2c_path, "/dev/%s", dirent->d_name);
+			found_i2c_file = true;
+		}
+	}
+	closedir(dir);
+	return found_i2c_file;
+}
+
+static bool i2c_read_edid(const char *connector_name, unsigned char *edid)
+{
+	char i2c_path[PATH_MAX];
+	bool result;
+	int rc, fd;
+	struct i2c_msg msgs[] = {
+		{ /* Start at 0. */
+			.addr = 0x50,
+			.flags = 0,
+			.len = 1,
+			.buf = edid,
+		}, { /* Now read the EDID. */
+			.addr = 0x50,
+			.flags = I2C_M_RD,
+			.len = 128,
+			.buf = edid,
+		}
+	};
+	struct i2c_rdwr_ioctl_data msgset = {
+		.msgs = msgs,
+		.nmsgs = 2,
+	};
+
+	result = find_i2c_path(connector_name, i2c_path, sizeof(i2c_path));
+	if (!result)
+		return false;
+
+	igt_info("Testing %s %s\n", connector_name, i2c_path);
+
+	fd = open(i2c_path, O_RDWR);
+	igt_assert_neq(fd, -1);
+
+	rc = ioctl(fd, I2C_RDWR, &msgset);
+	if (rc==-1) {
+		igt_debug("I2C access failed with errno %d, %s\n",
+				errno, strerror(errno));
+		errno = 0;
+	}
+
+	close(fd);
+	return rc >= 0;
+}
+
+static void format_hex_string(const unsigned char edid[static EDID_BLOCK_SIZE],
+			      char buf[static EDID_BLOCK_SIZE * 5 + 1])
+{
+	for (int i = 0; i < EDID_BLOCK_SIZE; ++i)
+		sprintf(buf+i*5, "0x%02x ", edid[i]);
+}
+
+static bool is_mst_connector(int fd, uint32_t connector_id)
+{
+	return kmstest_get_property(fd, connector_id,
+				    DRM_MODE_OBJECT_CONNECTOR,
+				    "PATH", NULL, NULL, NULL);
+}
+
+static void test_i2c(struct mode_set_data *data)
+{
+	bool edid_mistmach_i2c_vs_drm = false;
+	igt_display_t display;
+	igt_display_require(&display, drm_fd);
+
+	for (int i = 0; i < data->res->count_connectors; i++) {
+		unsigned char *drm_edid = data->edids[i] ? data->edids[i]->data : NULL;
+		unsigned char i2c_edid[EDID_BLOCK_SIZE] = {};
+
+		igt_output_t *output = igt_output_from_connector(&display,
+								 data->connectors[i]);
+		char *connector_name = (char *) igt_output_name(output);
+
+		bool got_i2c_edid = i2c_read_edid(connector_name, i2c_edid);
+		bool got_drm_edid = drm_edid != NULL;
+		bool is_vga = data->connectors[i]->connector_type == DRM_MODE_CONNECTOR_VGA;
+
+		bool edids_equal;
+
+		if (data->connectors[i]->connection != DRM_MODE_CONNECTED ||
+		    is_mst_connector(drm_fd, data->connectors[i]->connector_id))
+			continue;
+
+		/* We fail to detect some VGA monitors using our i2c method. If you look
+		 * at the dmesg of these cases, you'll see the Kernel complaining about
+		 * the EDID reading mostly FFs and then disabling bit-banging. Since we
+		 * don't want to reimplement everything the Kernel does, let's just
+		 * accept the fact that some VGA outputs won't be properly detected. */
+		if (is_vga)
+			continue;
+
+		if (!got_i2c_edid && !got_drm_edid)
+			continue;
+
+		if (got_i2c_edid && got_drm_edid)
+			edids_equal = (0 == memcmp(drm_edid, i2c_edid, EDID_BLOCK_SIZE));
+		else
+			edids_equal = false;
+
+
+		if (!edids_equal) {
+			char buf[5 * EDID_BLOCK_SIZE + 1];
+			igt_critical("Detected EDID mismatch on connector %s\n",
+				     connector_name);
+
+			if(got_i2c_edid)
+				format_hex_string(i2c_edid, buf);
+			else
+				sprintf(buf, "NULL");
+
+			igt_critical("i2c: %s\n", buf);
+
+			if(got_drm_edid)
+				format_hex_string(drm_edid, buf);
+			else
+				sprintf(buf, "NULL");
+
+			igt_critical("drm: %s\n", buf);
+
+			edid_mistmach_i2c_vs_drm = true;
+		}
+	}
+	igt_fail_on_f(edid_mistmach_i2c_vs_drm,
+			"There is an EDID mismatch between i2c and DRM!\n");
+}
+
+static void i2c_subtest_check_environment(void)
+{
+	int i2c_dev_files = 0;
+	DIR *dev_dir;
+	struct dirent *dirent;
+
+	/* Make sure the /dev/i2c-* files exist. */
+	igt_require(modprobe("i2c-dev") == 0);
+
+	dev_dir = opendir("/dev");
+	igt_assert(dev_dir);
+	while ((dirent = readdir(dev_dir))) {
+		if (strncmp(dirent->d_name, "i2c-", 4) == 0)
+			i2c_dev_files++;
+	}
+	closedir(dev_dir);
+	igt_require(i2c_dev_files);
+}
+
+/* Try to use raw I2C, which also needs interrupts. */
+static void i2c_subtest(void)
+{
+	i2c_subtest_check_environment();
+
+	enable_one_screen_and_wait(&ms_data);
+
+	disable_all_screens_and_wait(&ms_data);
+	test_i2c(&ms_data);
+	igt_assert(wait_for_suspended());
+
+	enable_one_screen(&ms_data);
+}
+
+struct read_entry_elapsed {
+	uint64_t elapsed;
+	char *path;
+} max_read_entry;
+
+static bool device_in_pci_d3(struct pci_device *pci_dev)
+{
+	uint16_t val;
+	int rc;
+
+	rc = pci_device_cfg_read_u16(pci_dev, &val, 0xd4);
+	igt_assert_eq(rc, 0);
+
+	igt_debug("%s: PCI D3 state=%d\n", __func__, val & 0x3);
+	return (val & 0x3) == 0x3;
+}
+
+static void pci_d3_state_subtest(void)
+{
+	struct pci_device *pci_dev, *bridge_pci_dev;
+
+	igt_require(has_runtime_pm);
+
+	pci_dev = igt_device_get_pci_device(drm_fd);
+	bridge_pci_dev = pci_device_get_parent_bridge(pci_dev);
+
+	disable_all_screens_and_wait(&ms_data);
+	igt_assert(igt_wait(device_in_pci_d3(pci_dev), 2000, 100));
+
+	if (gem_has_lmem(drm_fd))
+		igt_require_f(pci_device_has_kernel_driver(bridge_pci_dev),
+			      "pci bridge device does not bind with pcieport driver\n");
+
+	enable_one_screen_or_forcewake_get_and_wait(&ms_data);
+	igt_assert(!device_in_pci_d3(pci_dev));
+	forcewake_put(&ms_data);
+}
+
+__noreturn static void stay_subtest(void)
+{
+	disable_all_screens_and_wait(&ms_data);
+
+	while (1)
+		sleep(600);
+}
+
+static void system_suspend_modeset_subtest(void)
+{
+	disable_all_screens_and_wait(&ms_data);
+	igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE);
+	igt_assert(wait_for_suspended());
+
+	enable_one_screen_and_wait(&ms_data);
+	disable_all_screens_and_wait(&ms_data);
+}
+
+/* Enable a screen, activate DPMS, then do a modeset. At some point our driver
+ * produced WARNs on this case. */
+static void dpms_mode_unset_subtest(enum screen_type type)
+{
+	disable_all_screens_and_wait(&ms_data);
+
+	igt_require(enable_one_screen_with_type(&ms_data, type));
+	igt_assert(wait_for_active());
+
+	disable_all_screens_dpms(&ms_data);
+	igt_assert(wait_for_suspended());
+
+	disable_all_screens_and_wait(&ms_data);
+}
+
+static void fill_igt_fb(struct igt_fb *fb, uint32_t color)
+{
+	int i;
+	uint32_t *ptr;
+
+	ptr = gem_mmap__device_coherent(drm_fd, fb->gem_handle, 0, fb->size, PROT_WRITE);
+	for (i = 0; i < fb->size/sizeof(uint32_t); i++)
+		ptr[i] = color;
+	igt_assert(munmap(ptr, fb->size) == 0);
+}
+
+/* At some point, this test triggered WARNs in the Kernel. */
+static void cursor_subtest(bool dpms)
+{
+	int rc;
+	struct igt_fb cursor_fb1, cursor_fb2, cursor_fb3;
+	uint32_t crtc_id;
+
+	disable_all_screens_and_wait(&ms_data);
+
+	igt_require(default_mode_params);
+	crtc_id = default_mode_params->crtc_id;
+
+	igt_create_fb(drm_fd, 64, 64, DRM_FORMAT_ARGB8888,
+		      DRM_FORMAT_MOD_LINEAR, &cursor_fb1);
+	igt_create_fb(drm_fd, 64, 64, DRM_FORMAT_ARGB8888,
+		      DRM_FORMAT_MOD_LINEAR, &cursor_fb2);
+	igt_create_fb(drm_fd, 64, 64, DRM_FORMAT_XRGB8888,
+		      I915_FORMAT_MOD_X_TILED, &cursor_fb3);
+
+	fill_igt_fb(&cursor_fb1, 0xFF00FFFF);
+	fill_igt_fb(&cursor_fb2, 0xFF00FF00);
+	fill_igt_fb(&cursor_fb3, 0xFFFF0000);
+
+	set_mode_for_params_and_wait(default_mode_params);
+
+	rc = drmModeSetCursor(drm_fd, crtc_id, cursor_fb1.gem_handle,
+			      cursor_fb1.width, cursor_fb1.height);
+	igt_assert_eq(rc, 0);
+	rc = drmModeMoveCursor(drm_fd, crtc_id, 0, 0);
+	igt_assert_eq(rc, 0);
+	igt_assert(wait_for_active());
+
+	disable_or_dpms_all_screens_and_wait(&ms_data, dpms);
+
+	/* First, just move the cursor. */
+	rc = drmModeMoveCursor(drm_fd, crtc_id, 1, 1);
+	igt_assert_eq(rc, 0);
+	igt_assert(wait_for_suspended());
+
+	/* Then unset it, and set a new one. */
+	rc = drmModeSetCursor(drm_fd, crtc_id, 0, 0, 0);
+	igt_assert_eq(rc, 0);
+	igt_assert(wait_for_suspended());
+
+	rc = drmModeSetCursor(drm_fd, crtc_id, cursor_fb2.gem_handle,
+			      cursor_fb1.width, cursor_fb2.height);
+	igt_assert_eq(rc, 0);
+	igt_assert(wait_for_suspended());
+
+	/* Move the new cursor. */
+	rc = drmModeMoveCursor(drm_fd, crtc_id, 2, 2);
+	igt_assert_eq(rc, 0);
+	igt_assert(wait_for_suspended());
+
+	/* Now set a new one without unsetting the previous one. */
+	rc = drmModeSetCursor(drm_fd, crtc_id, cursor_fb1.gem_handle,
+			      cursor_fb1.width, cursor_fb1.height);
+	igt_assert_eq(rc, 0);
+	igt_assert(wait_for_suspended());
+
+	/* Cursor 3 was created with tiling and painted with a GTT mmap, so
+	 * hopefully it has some fences around it. */
+	rc = drmModeRmFB(drm_fd, cursor_fb3.fb_id);
+	igt_assert_eq(rc, 0);
+	__gem_set_tiling(drm_fd, cursor_fb3.gem_handle, false, cursor_fb3.strides[0]);
+	igt_assert(wait_for_suspended());
+
+	rc = drmModeSetCursor(drm_fd, crtc_id, cursor_fb3.gem_handle,
+			      cursor_fb3.width, cursor_fb3.height);
+	igt_assert_eq(rc, 0);
+	igt_assert(wait_for_suspended());
+
+	/* Make sure nothing remains for the other tests. */
+	rc = drmModeSetCursor(drm_fd, crtc_id, 0, 0, 0);
+	igt_assert_eq(rc, 0);
+	igt_assert(wait_for_suspended());
+}
+
+static enum plane_type get_plane_type(uint32_t plane_id)
+{
+	int i;
+	bool found;
+	uint64_t prop_value;
+	drmModePropertyPtr prop;
+	const char *enum_name = NULL;
+	enum plane_type type;
+
+	found = kmstest_get_property(drm_fd, plane_id, DRM_MODE_OBJECT_PLANE,
+				     "type", NULL, &prop_value, &prop);
+	igt_assert(found);
+
+	igt_assert(prop->flags & DRM_MODE_PROP_ENUM);
+	igt_assert(prop_value < prop->count_enums);
+
+	for (i = 0; i < prop->count_enums; i++) {
+		if (prop->enums[i].value == prop_value) {
+			enum_name = prop->enums[i].name;
+			break;
+		}
+	}
+	igt_assert(enum_name);
+
+	if (strcmp(enum_name, "Overlay") == 0)
+		type = PLANE_OVERLAY;
+	else if (strcmp(enum_name, "Primary") == 0)
+		type = PLANE_PRIMARY;
+	else if (strcmp(enum_name, "Cursor") == 0)
+		type = PLANE_CURSOR;
+	else
+		igt_assert(0);
+
+	drmModeFreeProperty(prop);
+
+	return type;
+}
+
+static void test_one_plane(bool dpms, uint32_t plane_id,
+			   enum plane_type plane_type)
+{
+	int rc;
+	uint32_t plane_format, plane_w, plane_h;
+	uint32_t crtc_id;
+	struct igt_fb plane_fb1, plane_fb2;
+	int32_t crtc_x = 0, crtc_y = 0;
+	uint64_t modifier;
+
+	disable_all_screens_and_wait(&ms_data);
+
+	crtc_id = default_mode_params->crtc_id;
+
+	switch (plane_type) {
+	case PLANE_OVERLAY:
+		plane_format = DRM_FORMAT_XRGB8888;
+		plane_w = 64;
+		plane_h = 64;
+		modifier = I915_FORMAT_MOD_X_TILED;
+		break;
+	case PLANE_PRIMARY:
+		plane_format = DRM_FORMAT_XRGB8888;
+		plane_w = default_mode_params->mode->hdisplay;
+		plane_h = default_mode_params->mode->vdisplay;
+		modifier = I915_FORMAT_MOD_X_TILED;
+		break;
+	case PLANE_CURSOR:
+		plane_format = DRM_FORMAT_ARGB8888;
+		plane_w = 64;
+		plane_h = 64;
+		modifier = DRM_FORMAT_MOD_LINEAR;
+		break;
+	default:
+		igt_assert(0);
+		break;
+	}
+
+	igt_create_fb(drm_fd, plane_w, plane_h, plane_format, modifier,
+		      &plane_fb1);
+	igt_create_fb(drm_fd, plane_w, plane_h, plane_format, modifier,
+		      &plane_fb2);
+	fill_igt_fb(&plane_fb1, 0xFF00FFFF);
+	fill_igt_fb(&plane_fb2, 0xFF00FF00);
+
+	set_mode_for_params_and_wait(default_mode_params);
+
+	rc = drmModeSetPlane(drm_fd, plane_id, crtc_id, plane_fb1.fb_id, 0,
+			     0, 0, plane_fb1.width, plane_fb1.height,
+			     0 << 16, 0 << 16, plane_fb1.width << 16,
+			     plane_fb1.height << 16);
+	igt_assert_eq(rc, 0);
+
+	disable_or_dpms_all_screens_and_wait(&ms_data, dpms);
+
+	/* Just move the plane around. */
+	if (plane_type != PLANE_PRIMARY) {
+		crtc_x++;
+		crtc_y++;
+	}
+	rc = drmModeSetPlane(drm_fd, plane_id, crtc_id, plane_fb1.fb_id, 0,
+			     crtc_x, crtc_y, plane_fb1.width, plane_fb1.height,
+			     0 << 16, 0 << 16, plane_fb1.width << 16,
+			     plane_fb1.height << 16);
+	igt_assert_eq(rc, 0);
+	igt_assert(wait_for_suspended());
+
+	/* Unset, then change the plane. */
+	rc = drmModeSetPlane(drm_fd, plane_id, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+	igt_assert_eq(rc, 0);
+	igt_assert(wait_for_suspended());
+
+	rc = drmModeSetPlane(drm_fd, plane_id, crtc_id, plane_fb2.fb_id, 0,
+			     crtc_x, crtc_y, plane_fb2.width, plane_fb2.height,
+			     0 << 16, 0 << 16, plane_fb2.width << 16,
+			     plane_fb2.height << 16);
+	igt_assert_eq(rc, 0);
+	igt_assert(wait_for_suspended());
+
+	/* Now change the plane without unsetting first. */
+	rc = drmModeSetPlane(drm_fd, plane_id, crtc_id, plane_fb1.fb_id, 0,
+			     crtc_x, crtc_y, plane_fb1.width, plane_fb1.height,
+			     0 << 16, 0 << 16, plane_fb1.width << 16,
+			     plane_fb1.height << 16);
+	igt_assert_eq(rc, 0);
+	igt_assert(wait_for_suspended());
+
+	/* Make sure nothing remains for the other tests. */
+	rc = drmModeSetPlane(drm_fd, plane_id, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+	igt_assert_eq(rc, 0);
+	igt_assert(wait_for_suspended());
+}
+
+/* This one also triggered WARNs on our driver at some point in time. */
+static void planes_subtest(bool universal, bool dpms)
+{
+	int i, crtc_idx;
+	drmModePlaneResPtr planes;
+
+	igt_require(default_mode_params);
+	crtc_idx = kmstest_get_crtc_idx(ms_data.res,
+					default_mode_params->crtc_id);
+
+	igt_assert_eq(drmSetClientCap(drm_fd, DRM_CLIENT_CAP_UNIVERSAL_PLANES,
+				      universal), 0);
+
+	planes = drmModeGetPlaneResources(drm_fd);
+	for (i = 0; i < planes->count_planes; i++) {
+		drmModePlanePtr plane;
+
+		plane = drmModeGetPlane(drm_fd, planes->planes[i]);
+		igt_assert(plane);
+
+		if (plane->possible_crtcs & (1 << crtc_idx)) {
+			enum plane_type type;
+
+			type = universal ? get_plane_type(plane->plane_id) :
+					   PLANE_OVERLAY;
+			igt_dynamic_f("plane-%d", plane->plane_id)
+				test_one_plane(dpms, plane->plane_id, type);
+		}
+		drmModeFreePlane(plane);
+	}
+	drmModeFreePlaneResources(planes);
+
+	igt_assert_eq(drmSetClientCap(drm_fd, DRM_CLIENT_CAP_UNIVERSAL_PLANES,
+				      1), 0);
+}
+
+static void fences_subtest(void)
+{
+	int i;
+	uint32_t *buf_ptr;
+	uint32_t tiling = false, swizzle;
+	struct modeset_params params;
+	drmModeConnectorPtr c = NULL;
+
+	disable_all_screens_and_wait(&ms_data);
+
+	igt_require(default_mode_params);
+	params.crtc_id = default_mode_params->crtc_id;
+	params.connector_id = default_mode_params->connector_id;
+	params.mode = default_mode_params->mode;
+	igt_create_fb(drm_fd, params.mode->hdisplay, params.mode->vdisplay,
+		      DRM_FORMAT_XRGB8888, I915_FORMAT_MOD_X_TILED,
+		      &params.fb);
+
+	/* Even though we passed "true" as the tiling argument, double-check
+	 * that the fb is really tiled. */
+	gem_get_tiling(drm_fd, params.fb.gem_handle, &tiling, &swizzle);
+	igt_assert(tiling);
+
+	buf_ptr = gem_mmap__gtt(drm_fd, params.fb.gem_handle, params.fb.size,
+				PROT_WRITE | PROT_READ);
+	for (i = 0; i < params.fb.size/sizeof(uint32_t); i++)
+		buf_ptr[i] = i;
+
+	set_mode_for_params_and_wait(&params);
+
+	disable_or_dpms_all_screens_and_wait(&ms_data, true);
+
+	for (i = 0; i < params.fb.size/sizeof(uint32_t); i++)
+		igt_assert_eq(buf_ptr[i], i);
+	igt_assert(wait_for_suspended());
+
+	for (i = 0; i < ms_data.res->count_connectors; i++)
+		if (ms_data.connectors[i]->connector_id ==
+		    params.connector_id)
+			c = ms_data.connectors[i];
+	igt_assert(c);
+
+	kmstest_set_connector_dpms(drm_fd, c, DRM_MODE_DPMS_ON);
+	igt_assert(wait_for_active());
+
+	for (i = 0; i < params.fb.size/sizeof(uint32_t); i++)
+		igt_assert_eq(buf_ptr[i], i);
+
+	igt_assert(munmap(buf_ptr, params.fb.size) == 0);
+}
+
+int rounds = 10;
+bool stay = false;
+
+static int opt_handler(int opt, int opt_index, void *data)
+{
+	switch (opt) {
+	case 'l':
+		rounds = 50;
+		break;
+	case 's':
+		stay = true;
+		break;
+	default:
+		return IGT_OPT_HANDLER_ERROR;
+	}
+
+	return IGT_OPT_HANDLER_SUCCESS;
+}
+
+const char *help_str =
+	"  --stress\t\tMake the stress-tests more stressful.\n"
+	"  --stay\t\tDisable all screen and try to go into runtime pm. Useful for debugging.";
+static struct option long_options[] = {
+	{"stress", 0, 0, 'l'},
+	{"stay", 0, 0, 's'},
+	{ 0, 0, 0, 0 }
+};
+
+igt_main_args("", long_options, help_str, opt_handler, NULL)
+{
+	igt_fixture {
+		igt_require(setup_environment(true));
+	}
+
+	if (stay)
+		igt_subtest("stay")
+			stay_subtest();
+
+	/* Essential things */
+	igt_subtest("drm-resources-equal")
+		drm_resources_equal_subtest();
+	igt_subtest("basic-pci-d3-state")
+		pci_d3_state_subtest();
+
+	/* Basic modeset */
+	igt_subtest("modeset-lpsp")
+		modeset_subtest(SCREEN_TYPE_LPSP, 1, WAIT_STATUS);
+	igt_subtest("modeset-non-lpsp")
+		modeset_subtest(SCREEN_TYPE_NON_LPSP, 1, WAIT_STATUS);
+	igt_subtest("dpms-lpsp")
+		modeset_subtest(SCREEN_TYPE_LPSP, 1, WAIT_STATUS | USE_DPMS);
+	igt_subtest("dpms-non-lpsp")
+		modeset_subtest(SCREEN_TYPE_NON_LPSP, 1, WAIT_STATUS | USE_DPMS);
+
+	/* Planes and cursors */
+	igt_subtest("cursor")
+		cursor_subtest(false);
+	igt_subtest("cursor-dpms")
+		cursor_subtest(true);
+	igt_subtest_with_dynamic("legacy-planes")
+		planes_subtest(false, false);
+	igt_subtest_with_dynamic("legacy-planes-dpms")
+		planes_subtest(false, true);
+	igt_subtest_with_dynamic("universal-planes")
+		planes_subtest(true, false);
+	igt_subtest_with_dynamic("universal-planes-dpms")
+		planes_subtest(true, true);
+
+	/* Misc */
+	igt_subtest("i2c")
+		i2c_subtest();
+	igt_subtest("dpms-mode-unset-lpsp")
+		dpms_mode_unset_subtest(SCREEN_TYPE_LPSP);
+	igt_subtest("dpms-mode-unset-non-lpsp")
+		dpms_mode_unset_subtest(SCREEN_TYPE_NON_LPSP);
+	igt_subtest("fences-dpms") {
+		gem_require_mappable_ggtt(drm_fd);
+		fences_subtest();
+	}
+
+	/* Modeset stress */
+	igt_subtest("modeset-lpsp-stress")
+		modeset_subtest(SCREEN_TYPE_LPSP, rounds, WAIT_STATUS);
+	igt_subtest("modeset-non-lpsp-stress")
+		modeset_subtest(SCREEN_TYPE_NON_LPSP, rounds, WAIT_STATUS);
+	igt_subtest("modeset-lpsp-stress-no-wait")
+		modeset_subtest(SCREEN_TYPE_LPSP, rounds, DONT_WAIT);
+	igt_subtest("modeset-non-lpsp-stress-no-wait")
+		modeset_subtest(SCREEN_TYPE_NON_LPSP, rounds, DONT_WAIT);
+	igt_subtest("modeset-pc8-residency-stress")
+		modeset_subtest(SCREEN_TYPE_ANY, rounds, WAIT_PC8_RES);
+	igt_subtest("modeset-stress-extra-wait")
+		modeset_subtest(SCREEN_TYPE_ANY, rounds,
+				WAIT_STATUS | WAIT_EXTRA);
+
+	/* System suspend */
+	igt_subtest("system-suspend-modeset")
+		system_suspend_modeset_subtest();
+
+	igt_fixture {
+		teardown_environment(true);
+		forcewake_put(&ms_data);
+	}
+}
diff --git a/tests/meson.build b/tests/meson.build
index 92729e0c3..37d101281 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -262,6 +262,7 @@ intel_kms_progs = [
 	'kms_pm_backlight',
 	'kms_pm_dc',
 	'kms_pm_lpsp',
+	'kms_pm_rpm',
 	'kms_psr',
 	'kms_psr2_sf',
 	'kms_psr2_su',
-- 
2.40.0

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [igt-dev] ✓ Fi.CI.BAT: success for Separate display PM tests from Core (rev2)
  2023-09-05 12:53 [igt-dev] [i-g-t V2 0/7] Separate display PM tests from Core Bhanuprakash Modem
                   ` (6 preceding siblings ...)
  2023-09-05 12:53 ` [igt-dev] [i-g-t V2 7/7] tests/intel/pm: Separate display specific tests from i915_pm_rpm Bhanuprakash Modem
@ 2023-09-05 17:07 ` Patchwork
  2023-09-05 20:26 ` [igt-dev] ✗ Fi.CI.IGT: failure " Patchwork
  8 siblings, 0 replies; 18+ messages in thread
From: Patchwork @ 2023-09-05 17:07 UTC (permalink / raw)
  To: Bhanuprakash Modem; +Cc: igt-dev

[-- Attachment #1: Type: text/plain, Size: 19214 bytes --]

== Series Details ==

Series: Separate display PM tests from Core (rev2)
URL   : https://patchwork.freedesktop.org/series/122790/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_13599 -> IGTPW_9720
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/index.html

Participating hosts (38 -> 39)
------------------------------

  Additional (2): fi-kbl-soraka bat-dg2-8 
  Missing    (1): fi-snb-2520m 

Possible new issues
-------------------

  Here are the unknown changes that may have been introduced in IGTPW_9720:

### IGT changes ###

#### Possible regressions ####

  * {igt@kms_pm_backlight@basic-brightness} (NEW):
    - fi-rkl-11600:       NOTRUN -> [SKIP][1] +2 other tests skip
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/fi-rkl-11600/igt@kms_pm_backlight@basic-brightness.html
    - {bat-dg2-14}:       NOTRUN -> [SKIP][2]
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/bat-dg2-14/igt@kms_pm_backlight@basic-brightness.html

  * {igt@kms_pm_rpm@basic-pci-d3-state} (NEW):
    - {bat-dg2-14}:       NOTRUN -> [INCOMPLETE][3]
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/bat-dg2-14/igt@kms_pm_rpm@basic-pci-d3-state.html

  * {igt@kms_pm_rpm@basic-rte} (NEW):
    - bat-atsm-1:         NOTRUN -> [SKIP][4] +1 other test skip
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/bat-atsm-1/igt@kms_pm_rpm@basic-rte.html
    - bat-dg2-9:          NOTRUN -> [SKIP][5] +2 other tests skip
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/bat-dg2-9/igt@kms_pm_rpm@basic-rte.html
    - bat-dg2-11:         NOTRUN -> [SKIP][6] +2 other tests skip
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/bat-dg2-11/igt@kms_pm_rpm@basic-rte.html
    - bat-dg2-8:          NOTRUN -> [SKIP][7] +2 other tests skip
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/bat-dg2-8/igt@kms_pm_rpm@basic-rte.html
    - bat-adlm-1:         NOTRUN -> [SKIP][8] +2 other tests skip
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/bat-adlm-1/igt@kms_pm_rpm@basic-rte.html
    - fi-tgl-1115g4:      NOTRUN -> [SKIP][9] +2 other tests skip
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/fi-tgl-1115g4/igt@kms_pm_rpm@basic-rte.html
    - bat-rpls-1:         NOTRUN -> [SKIP][10] +2 other tests skip
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/bat-rpls-1/igt@kms_pm_rpm@basic-rte.html
    - bat-mtlp-8:         NOTRUN -> [SKIP][11] +1 other test skip
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/bat-mtlp-8/igt@kms_pm_rpm@basic-rte.html

  * {igt@kms_pm_rpm@module-reload} (NEW):
    - bat-adls-5:         NOTRUN -> [SKIP][12] +2 other tests skip
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/bat-adls-5/igt@kms_pm_rpm@module-reload.html
    - bat-dg1-5:          NOTRUN -> [SKIP][13] +2 other tests skip
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/bat-dg1-5/igt@kms_pm_rpm@module-reload.html
    - bat-adlp-9:         NOTRUN -> [SKIP][14] +2 other tests skip
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/bat-adlp-9/igt@kms_pm_rpm@module-reload.html

  
New tests
---------

  New tests have been introduced between CI_DRM_13599 and IGTPW_9720:

### New IGT tests (5) ###

  * igt@kms_pm_backlight@basic-brightness:
    - Statuses : 28 skip(s)
    - Exec time: [0.0] s

  * igt@kms_pm_backlight@basic-brightness@edp-1:
    - Statuses : 2 abort(s) 6 pass(s)
    - Exec time: [0.0] s

  * igt@kms_pm_rpm@basic-pci-d3-state:
    - Statuses : 1 abort(s) 1 incomplete(s) 28 pass(s) 4 skip(s)
    - Exec time: [0.0] s

  * igt@kms_pm_rpm@basic-rte:
    - Statuses : 32 skip(s)
    - Exec time: [0.0] s

  * igt@kms_pm_rpm@module-reload:
    - Statuses : 32 skip(s)
    - Exec time: [0.0] s

  

Known issues
------------

  Here are the changes found in IGTPW_9720 that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@gem_huc_copy@huc-copy:
    - fi-kbl-soraka:      NOTRUN -> [SKIP][15] ([fdo#109271] / [i915#2190])
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/fi-kbl-soraka/igt@gem_huc_copy@huc-copy.html

  * igt@gem_lmem_swapping@basic:
    - fi-kbl-soraka:      NOTRUN -> [SKIP][16] ([fdo#109271] / [i915#4613]) +3 other tests skip
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/fi-kbl-soraka/igt@gem_lmem_swapping@basic.html

  * igt@gem_mmap@basic:
    - bat-dg2-8:          NOTRUN -> [SKIP][17] ([i915#4083])
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/bat-dg2-8/igt@gem_mmap@basic.html

  * igt@gem_mmap_gtt@basic:
    - bat-dg2-8:          NOTRUN -> [SKIP][18] ([i915#4077]) +2 other tests skip
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/bat-dg2-8/igt@gem_mmap_gtt@basic.html

  * igt@gem_tiled_pread_basic:
    - bat-dg2-8:          NOTRUN -> [SKIP][19] ([i915#4079]) +1 other test skip
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/bat-dg2-8/igt@gem_tiled_pread_basic.html

  * igt@i915_pm_rps@basic-api:
    - bat-dg2-8:          NOTRUN -> [SKIP][20] ([i915#6621])
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/bat-dg2-8/igt@i915_pm_rps@basic-api.html

  * igt@i915_selftest@live@execlists:
    - fi-bsw-nick:        [PASS][21] -> [ABORT][22] ([i915#7911] / [i915#7913])
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/fi-bsw-nick/igt@i915_selftest@live@execlists.html
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/fi-bsw-nick/igt@i915_selftest@live@execlists.html

  * igt@i915_selftest@live@gt_pm:
    - fi-kbl-soraka:      NOTRUN -> [DMESG-FAIL][23] ([i915#1886] / [i915#7913])
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/fi-kbl-soraka/igt@i915_selftest@live@gt_pm.html

  * igt@i915_suspend@basic-s3-without-i915:
    - bat-dg2-8:          NOTRUN -> [SKIP][24] ([i915#6645])
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/bat-dg2-8/igt@i915_suspend@basic-s3-without-i915.html

  * igt@kms_addfb_basic@addfb25-y-tiled-small-legacy:
    - bat-dg2-8:          NOTRUN -> [SKIP][25] ([i915#5190])
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/bat-dg2-8/igt@kms_addfb_basic@addfb25-y-tiled-small-legacy.html

  * igt@kms_addfb_basic@basic-y-tiled-legacy:
    - bat-dg2-8:          NOTRUN -> [SKIP][26] ([i915#4215] / [i915#5190])
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/bat-dg2-8/igt@kms_addfb_basic@basic-y-tiled-legacy.html

  * igt@kms_addfb_basic@framebuffer-vs-set-tiling:
    - bat-dg2-8:          NOTRUN -> [SKIP][27] ([i915#4212]) +7 other tests skip
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/bat-dg2-8/igt@kms_addfb_basic@framebuffer-vs-set-tiling.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic:
    - fi-kbl-soraka:      NOTRUN -> [SKIP][28] ([fdo#109271]) +10 other tests skip
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/fi-kbl-soraka/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy:
    - bat-dg2-8:          NOTRUN -> [SKIP][29] ([i915#4103] / [i915#4213]) +1 other test skip
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/bat-dg2-8/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html

  * igt@kms_force_connector_basic@force-load-detect:
    - bat-dg2-8:          NOTRUN -> [SKIP][30] ([fdo#109285])
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/bat-dg2-8/igt@kms_force_connector_basic@force-load-detect.html

  * igt@kms_force_connector_basic@prune-stale-modes:
    - bat-dg2-8:          NOTRUN -> [SKIP][31] ([i915#5274])
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/bat-dg2-8/igt@kms_force_connector_basic@prune-stale-modes.html

  * {igt@kms_pm_backlight@basic-brightness} (NEW):
    - fi-blb-e6850:       NOTRUN -> [SKIP][32] ([fdo#109271]) +3 other tests skip
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/fi-blb-e6850/igt@kms_pm_backlight@basic-brightness.html
    - bat-kbl-2:          NOTRUN -> [SKIP][33] ([fdo#109271]) +2 other tests skip
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/bat-kbl-2/igt@kms_pm_backlight@basic-brightness.html
    - bat-atsm-1:         NOTRUN -> [SKIP][34] ([i915#6078])
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/bat-atsm-1/igt@kms_pm_backlight@basic-brightness.html

  * {igt@kms_pm_backlight@basic-brightness@edp-1} (NEW):
    - bat-adlp-6:         NOTRUN -> [ABORT][35] ([i915#8668])
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/bat-adlp-6/igt@kms_pm_backlight@basic-brightness@edp-1.html
    - bat-rplp-1:         NOTRUN -> [ABORT][36] ([i915#8668])
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/bat-rplp-1/igt@kms_pm_backlight@basic-brightness@edp-1.html

  * {igt@kms_pm_rpm@basic-pci-d3-state} (NEW):
    - bat-adln-1:         NOTRUN -> [ABORT][37] ([i915#8668])
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/bat-adln-1/igt@kms_pm_rpm@basic-pci-d3-state.html
    - fi-ivb-3770:        NOTRUN -> [SKIP][38] ([fdo#109271]) +3 other tests skip
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/fi-ivb-3770/igt@kms_pm_rpm@basic-pci-d3-state.html
    - fi-elk-e7500:       NOTRUN -> [SKIP][39] ([fdo#109271]) +3 other tests skip
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/fi-elk-e7500/igt@kms_pm_rpm@basic-pci-d3-state.html
    - fi-ilk-650:         NOTRUN -> [SKIP][40] ([fdo#109271]) +3 other tests skip
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/fi-ilk-650/igt@kms_pm_rpm@basic-pci-d3-state.html

  * {igt@kms_pm_rpm@basic-rte} (NEW):
    - bat-jsl-3:          NOTRUN -> [SKIP][41] ([fdo#112080]) +1 other test skip
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/bat-jsl-3/igt@kms_pm_rpm@basic-rte.html
    - fi-skl-guc:         NOTRUN -> [SKIP][42] ([fdo#109271]) +2 other tests skip
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/fi-skl-guc/igt@kms_pm_rpm@basic-rte.html
    - fi-kbl-x1275:       NOTRUN -> [SKIP][43] ([fdo#109271]) +2 other tests skip
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/fi-kbl-x1275/igt@kms_pm_rpm@basic-rte.html
    - fi-hsw-4770:        NOTRUN -> [SKIP][44] ([fdo#109271]) +2 other tests skip
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/fi-hsw-4770/igt@kms_pm_rpm@basic-rte.html
    - fi-cfl-8109u:       NOTRUN -> [SKIP][45] ([fdo#109271]) +2 other tests skip
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/fi-cfl-8109u/igt@kms_pm_rpm@basic-rte.html
    - fi-kbl-8809g:       NOTRUN -> [SKIP][46] ([fdo#109271]) +2 other tests skip
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/fi-kbl-8809g/igt@kms_pm_rpm@basic-rte.html
    - fi-bsw-nick:        NOTRUN -> [SKIP][47] ([fdo#109271]) +2 other tests skip
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/fi-bsw-nick/igt@kms_pm_rpm@basic-rte.html
    - fi-kbl-guc:         NOTRUN -> [SKIP][48] ([fdo#109271]) +2 other tests skip
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/fi-kbl-guc/igt@kms_pm_rpm@basic-rte.html
    - fi-cfl-guc:         NOTRUN -> [SKIP][49] ([fdo#109271]) +2 other tests skip
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/fi-cfl-guc/igt@kms_pm_rpm@basic-rte.html
    - fi-skl-6600u:       NOTRUN -> [SKIP][50] ([fdo#109271]) +1 other test skip
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/fi-skl-6600u/igt@kms_pm_rpm@basic-rte.html
    - bat-jsl-1:          NOTRUN -> [SKIP][51] ([fdo#112080]) +1 other test skip
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/bat-jsl-1/igt@kms_pm_rpm@basic-rte.html
    - fi-cfl-8700k:       NOTRUN -> [SKIP][52] ([fdo#109271]) +2 other tests skip
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/fi-cfl-8700k/igt@kms_pm_rpm@basic-rte.html

  * {igt@kms_pm_rpm@module-reload} (NEW):
    - fi-apl-guc:         NOTRUN -> [SKIP][53] ([fdo#109271]) +2 other tests skip
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/fi-apl-guc/igt@kms_pm_rpm@module-reload.html
    - fi-glk-j4005:       NOTRUN -> [SKIP][54] ([fdo#109271]) +2 other tests skip
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/fi-glk-j4005/igt@kms_pm_rpm@module-reload.html

  * igt@kms_psr@cursor_plane_move:
    - bat-dg2-8:          NOTRUN -> [SKIP][55] ([i915#1072]) +3 other tests skip
   [55]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/bat-dg2-8/igt@kms_psr@cursor_plane_move.html

  * igt@kms_setmode@basic-clone-single-crtc:
    - bat-dg2-8:          NOTRUN -> [SKIP][56] ([i915#3555])
   [56]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/bat-dg2-8/igt@kms_setmode@basic-clone-single-crtc.html

  * igt@prime_vgem@basic-fence-flip:
    - bat-dg2-8:          NOTRUN -> [SKIP][57] ([i915#3708])
   [57]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/bat-dg2-8/igt@prime_vgem@basic-fence-flip.html

  * igt@prime_vgem@basic-fence-mmap:
    - bat-dg2-8:          NOTRUN -> [SKIP][58] ([i915#3708] / [i915#4077]) +1 other test skip
   [58]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/bat-dg2-8/igt@prime_vgem@basic-fence-mmap.html

  * igt@prime_vgem@basic-write:
    - bat-dg2-8:          NOTRUN -> [SKIP][59] ([i915#3291] / [i915#3708]) +2 other tests skip
   [59]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/bat-dg2-8/igt@prime_vgem@basic-write.html

  
#### Possible fixes ####

  * igt@kms_flip@basic-flip-vs-wf_vblank@a-dp6:
    - bat-adlp-11:        [FAIL][60] ([i915#6121]) -> [PASS][61] +4 other tests pass
   [60]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/bat-adlp-11/igt@kms_flip@basic-flip-vs-wf_vblank@a-dp6.html
   [61]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/bat-adlp-11/igt@kms_flip@basic-flip-vs-wf_vblank@a-dp6.html

  * igt@kms_flip@basic-flip-vs-wf_vblank@c-dp5:
    - bat-adlp-11:        [DMESG-WARN][62] ([i915#6868]) -> [PASS][63]
   [62]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/bat-adlp-11/igt@kms_flip@basic-flip-vs-wf_vblank@c-dp5.html
   [63]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/bat-adlp-11/igt@kms_flip@basic-flip-vs-wf_vblank@c-dp5.html

  
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [fdo#109285]: https://bugs.freedesktop.org/show_bug.cgi?id=109285
  [fdo#112080]: https://bugs.freedesktop.org/show_bug.cgi?id=112080
  [i915#1072]: https://gitlab.freedesktop.org/drm/intel/issues/1072
  [i915#1886]: https://gitlab.freedesktop.org/drm/intel/issues/1886
  [i915#2190]: https://gitlab.freedesktop.org/drm/intel/issues/2190
  [i915#3291]: https://gitlab.freedesktop.org/drm/intel/issues/3291
  [i915#3555]: https://gitlab.freedesktop.org/drm/intel/issues/3555
  [i915#3708]: https://gitlab.freedesktop.org/drm/intel/issues/3708
  [i915#4077]: https://gitlab.freedesktop.org/drm/intel/issues/4077
  [i915#4079]: https://gitlab.freedesktop.org/drm/intel/issues/4079
  [i915#4083]: https://gitlab.freedesktop.org/drm/intel/issues/4083
  [i915#4103]: https://gitlab.freedesktop.org/drm/intel/issues/4103
  [i915#4212]: https://gitlab.freedesktop.org/drm/intel/issues/4212
  [i915#4213]: https://gitlab.freedesktop.org/drm/intel/issues/4213
  [i915#4215]: https://gitlab.freedesktop.org/drm/intel/issues/4215
  [i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613
  [i915#5190]: https://gitlab.freedesktop.org/drm/intel/issues/5190
  [i915#5274]: https://gitlab.freedesktop.org/drm/intel/issues/5274
  [i915#6078]: https://gitlab.freedesktop.org/drm/intel/issues/6078
  [i915#6121]: https://gitlab.freedesktop.org/drm/intel/issues/6121
  [i915#6621]: https://gitlab.freedesktop.org/drm/intel/issues/6621
  [i915#6645]: https://gitlab.freedesktop.org/drm/intel/issues/6645
  [i915#6868]: https://gitlab.freedesktop.org/drm/intel/issues/6868
  [i915#7911]: https://gitlab.freedesktop.org/drm/intel/issues/7911
  [i915#7913]: https://gitlab.freedesktop.org/drm/intel/issues/7913
  [i915#8668]: https://gitlab.freedesktop.org/drm/intel/issues/8668


Build changes
-------------

  * CI: CI-20190529 -> None
  * IGT: IGT_7468 -> IGTPW_9720

  CI-20190529: 20190529
  CI_DRM_13599: 58fe10f34e80d0eeb5609128faa135260623a715 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_9720: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/index.html
  IGT_7468: 7468


Testlist changes
----------------

+igt@kms_pm_backlight@bad-brightness
+igt@kms_pm_backlight@basic-brightness
+igt@kms_pm_backlight@fade
+igt@kms_pm_backlight@fade-with-dpms
+igt@kms_pm_backlight@fade-with-suspend
+igt@kms_pm_dc@dc3co-vpb-simulation
+igt@kms_pm_dc@dc5-dpms
+igt@kms_pm_dc@dc5-dpms-negative
+igt@kms_pm_dc@dc5-psr
+igt@kms_pm_dc@dc6-dpms
+igt@kms_pm_dc@dc6-psr
+igt@kms_pm_dc@dc9-dpms
+igt@kms_pm_lpsp@kms-lpsp
+igt@kms_pm_lpsp@screens-disabled
+igt@kms_pm_rpm@basic-pci-d3-state
+igt@kms_pm_rpm@cursor
+igt@kms_pm_rpm@cursor-dpms
+igt@kms_pm_rpm@dpms-lpsp
+igt@kms_pm_rpm@dpms-mode-unset-lpsp
+igt@kms_pm_rpm@dpms-mode-unset-non-lpsp
+igt@kms_pm_rpm@dpms-non-lpsp
+igt@kms_pm_rpm@drm-resources-equal
+igt@kms_pm_rpm@fences-dpms
+igt@kms_pm_rpm@i2c
+igt@kms_pm_rpm@legacy-planes
+igt@kms_pm_rpm@legacy-planes-dpms
+igt@kms_pm_rpm@modeset-lpsp
+igt@kms_pm_rpm@modeset-lpsp-stress
+igt@kms_pm_rpm@modeset-lpsp-stress-no-wait
+igt@kms_pm_rpm@modeset-non-lpsp
+igt@kms_pm_rpm@modeset-non-lpsp-stress
+igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait
+igt@kms_pm_rpm@modeset-pc8-residency-stress
+igt@kms_pm_rpm@modeset-stress-extra-wait
+igt@kms_pm_rpm@system-suspend-modeset
+igt@kms_pm_rpm@universal-planes
+igt@kms_pm_rpm@universal-planes-dpms
-igt@i915_pm_backlight@bad-brightness
-igt@i915_pm_backlight@basic-brightness
-igt@i915_pm_backlight@fade
-igt@i915_pm_backlight@fade-with-dpms
-igt@i915_pm_backlight@fade-with-suspend
-igt@i915_pm_dc@dc3co-vpb-simulation
-igt@i915_pm_dc@dc5-dpms
-igt@i915_pm_dc@dc5-dpms-negative
-igt@i915_pm_dc@dc5-psr
-igt@i915_pm_dc@dc6-dpms
-igt@i915_pm_dc@dc6-psr
-igt@i915_pm_dc@dc9-dpms
-igt@i915_pm_lpsp@kms-lpsp
-igt@i915_pm_lpsp@screens-disabled
-igt@i915_pm_rpm@basic-pci-d3-state
-igt@i915_pm_rpm@cursor
-igt@i915_pm_rpm@cursor-dpms
-igt@i915_pm_rpm@dpms-lpsp
-igt@i915_pm_rpm@dpms-mode-unset-lpsp
-igt@i915_pm_rpm@dpms-mode-unset-non-lpsp
-igt@i915_pm_rpm@dpms-non-lpsp
-igt@i915_pm_rpm@drm-resources-equal
-igt@i915_pm_rpm@fences-dpms
-igt@i915_pm_rpm@i2c
-igt@i915_pm_rpm@legacy-planes
-igt@i915_pm_rpm@legacy-planes-dpms
-igt@i915_pm_rpm@modeset-lpsp
-igt@i915_pm_rpm@modeset-lpsp-stress
-igt@i915_pm_rpm@modeset-lpsp-stress-no-wait
-igt@i915_pm_rpm@modeset-non-lpsp
-igt@i915_pm_rpm@modeset-non-lpsp-stress
-igt@i915_pm_rpm@modeset-non-lpsp-stress-no-wait
-igt@i915_pm_rpm@modeset-pc8-residency-stress
-igt@i915_pm_rpm@modeset-stress-extra-wait
-igt@i915_pm_rpm@system-suspend-modeset
-igt@i915_pm_rpm@universal-planes
-igt@i915_pm_rpm@universal-planes-dpms

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/index.html

[-- Attachment #2: Type: text/html, Size: 23451 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [igt-dev] ✗ Fi.CI.IGT: failure for Separate display PM tests from Core (rev2)
  2023-09-05 12:53 [igt-dev] [i-g-t V2 0/7] Separate display PM tests from Core Bhanuprakash Modem
                   ` (7 preceding siblings ...)
  2023-09-05 17:07 ` [igt-dev] ✓ Fi.CI.BAT: success for Separate display PM tests from Core (rev2) Patchwork
@ 2023-09-05 20:26 ` Patchwork
  8 siblings, 0 replies; 18+ messages in thread
From: Patchwork @ 2023-09-05 20:26 UTC (permalink / raw)
  To: Bhanuprakash Modem; +Cc: igt-dev

[-- Attachment #1: Type: text/plain, Size: 84058 bytes --]

== Series Details ==

Series: Separate display PM tests from Core (rev2)
URL   : https://patchwork.freedesktop.org/series/122790/
State : failure

== Summary ==

CI Bug Log - changes from CI_DRM_13599_full -> IGTPW_9720_full
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with IGTPW_9720_full absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in IGTPW_9720_full, please notify your bug team (lgci.bug.filing@intel.com) to allow them
  to document this new failure mode, which will reduce false positives in CI.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/index.html

Participating hosts (9 -> 9)
------------------------------

  No changes in participating hosts

Possible new issues
-------------------

  Here are the unknown changes that may have been introduced in IGTPW_9720_full:

### IGT changes ###

#### Possible regressions ####

  * igt@gen9_exec_parse@allowed-single:
    - shard-glk:          [PASS][1] -> [INCOMPLETE][2]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-glk4/igt@gen9_exec_parse@allowed-single.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-glk5/igt@gen9_exec_parse@allowed-single.html

  * {igt@kms_pm_backlight@fade-with-dpms} (NEW):
    - shard-rkl:          NOTRUN -> [SKIP][3] +15 other tests skip
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-rkl-7/igt@kms_pm_backlight@fade-with-dpms.html
    - shard-dg1:          NOTRUN -> [SKIP][4] +14 other tests skip
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg1-15/igt@kms_pm_backlight@fade-with-dpms.html

  * {igt@kms_pm_lpsp@kms-lpsp@kms-lpsp-hdmi-a} (NEW):
    - shard-dg2:          NOTRUN -> [SKIP][5] +11 other tests skip
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-6/igt@kms_pm_lpsp@kms-lpsp@kms-lpsp-hdmi-a.html
    - shard-tglu:         NOTRUN -> [FAIL][6] +1 other test fail
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-tglu-10/igt@kms_pm_lpsp@kms-lpsp@kms-lpsp-hdmi-a.html

  * {igt@kms_pm_rpm@dpms-non-lpsp} (NEW):
    - shard-tglu:         NOTRUN -> [SKIP][7] +13 other tests skip
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-tglu-2/igt@kms_pm_rpm@dpms-non-lpsp.html
    - shard-mtlp:         NOTRUN -> [SKIP][8] +11 other tests skip
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-5/igt@kms_pm_rpm@dpms-non-lpsp.html

  
New tests
---------

  New tests have been introduced between CI_DRM_13599_full and IGTPW_9720_full:

### New IGT tests (46) ###

  * igt@kms_pm_backlight@bad-brightness:
    - Statuses : 7 skip(s)
    - Exec time: [0.0] s

  * igt@kms_pm_backlight@bad-brightness@edp-1:
    - Statuses : 1 pass(s)
    - Exec time: [0.0] s

  * igt@kms_pm_backlight@basic-brightness:
    - Statuses : 7 skip(s)
    - Exec time: [0.0] s

  * igt@kms_pm_backlight@basic-brightness@edp-1:
    - Statuses : 1 pass(s)
    - Exec time: [0.0] s

  * igt@kms_pm_backlight@fade:
    - Statuses : 6 skip(s)
    - Exec time: [0.0] s

  * igt@kms_pm_backlight@fade-with-dpms:
    - Statuses : 6 skip(s)
    - Exec time: [0.0] s

  * igt@kms_pm_backlight@fade-with-dpms@edp-1:
    - Statuses : 1 pass(s)
    - Exec time: [0.0] s

  * igt@kms_pm_backlight@fade-with-suspend:
    - Statuses : 6 skip(s)
    - Exec time: [0.0] s

  * igt@kms_pm_backlight@fade-with-suspend@edp-1:
    - Statuses : 1 pass(s)
    - Exec time: [0.0] s

  * igt@kms_pm_backlight@fade@edp-1:
    - Statuses : 1 pass(s)
    - Exec time: [0.0] s

  * igt@kms_pm_dc@dc3co-vpb-simulation:
    - Statuses : 6 skip(s)
    - Exec time: [0.0] s

  * igt@kms_pm_dc@dc5-dpms:
    - Statuses : 7 pass(s) 1 skip(s)
    - Exec time: [0.0] s

  * igt@kms_pm_dc@dc5-dpms-negative:
    - Statuses : 6 pass(s) 2 skip(s)
    - Exec time: [0.0] s

  * igt@kms_pm_dc@dc5-psr:
    - Statuses : 1 pass(s) 6 skip(s)
    - Exec time: [0.0] s

  * igt@kms_pm_dc@dc6-dpms:
    - Statuses : 1 fail(s) 7 skip(s)
    - Exec time: [0.0] s

  * igt@kms_pm_dc@dc6-psr:
    - Statuses : 8 skip(s)
    - Exec time: [0.0] s

  * igt@kms_pm_dc@dc9-dpms:
    - Statuses : 2 pass(s) 6 skip(s)
    - Exec time: [0.0] s

  * igt@kms_pm_lpsp@kms-lpsp:
    - Statuses :
    - Exec time: [None] s

  * igt@kms_pm_lpsp@kms-lpsp@kms-lpsp-dp:
    - Statuses : 1 skip(s)
    - Exec time: [0.0] s

  * igt@kms_pm_lpsp@kms-lpsp@kms-lpsp-edp:
    - Statuses : 1 pass(s)
    - Exec time: [0.0] s

  * igt@kms_pm_lpsp@kms-lpsp@kms-lpsp-hdmi-a:
    - Statuses : 1 fail(s) 2 pass(s) 2 skip(s)
    - Exec time: [0.0] s

  * igt@kms_pm_lpsp@kms-lpsp@kms-lpsp-vga:
    - Statuses : 1 skip(s)
    - Exec time: [0.0] s

  * igt@kms_pm_lpsp@screens-disabled:
    - Statuses : 8 skip(s)
    - Exec time: [0.0] s

  * igt@kms_pm_rpm@basic-pci-d3-state:
    - Statuses : 5 pass(s)
    - Exec time: [0.0] s

  * igt@kms_pm_rpm@cursor:
    - Statuses : 7 pass(s) 1 skip(s)
    - Exec time: [0.0] s

  * igt@kms_pm_rpm@cursor-dpms:
    - Statuses : 7 pass(s) 1 skip(s)
    - Exec time: [0.0] s

  * igt@kms_pm_rpm@dpms-lpsp:
    - Statuses : 2 pass(s) 5 skip(s)
    - Exec time: [0.0] s

  * igt@kms_pm_rpm@dpms-mode-unset-lpsp:
    - Statuses : 2 pass(s) 6 skip(s)
    - Exec time: [0.0] s

  * igt@kms_pm_rpm@dpms-mode-unset-non-lpsp:
    - Statuses : 5 pass(s) 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_pm_rpm@dpms-non-lpsp:
    - Statuses : 5 pass(s) 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_pm_rpm@drm-resources-equal:
    - Statuses : 7 pass(s) 1 skip(s)
    - Exec time: [0.0] s

  * igt@kms_pm_rpm@fences-dpms:
    - Statuses : 4 pass(s) 4 skip(s)
    - Exec time: [0.0] s

  * igt@kms_pm_rpm@i2c:
    - Statuses : 6 pass(s) 1 skip(s)
    - Exec time: [0.0] s

  * igt@kms_pm_rpm@legacy-planes:
    - Statuses :
    - Exec time: [None] s

  * igt@kms_pm_rpm@legacy-planes-dpms:
    - Statuses :
    - Exec time: [None] s

  * igt@kms_pm_rpm@modeset-lpsp:
    - Statuses : 3 pass(s) 5 skip(s)
    - Exec time: [0.0] s

  * igt@kms_pm_rpm@modeset-lpsp-stress:
    - Statuses : 2 pass(s) 4 skip(s)
    - Exec time: [0.0] s

  * igt@kms_pm_rpm@modeset-lpsp-stress-no-wait:
    - Statuses : 2 pass(s) 6 skip(s)
    - Exec time: [0.0] s

  * igt@kms_pm_rpm@modeset-non-lpsp:
    - Statuses : 4 pass(s) 4 skip(s)
    - Exec time: [0.0] s

  * igt@kms_pm_rpm@modeset-non-lpsp-stress:
    - Statuses : 4 pass(s) 2 skip(s)
    - Exec time: [0.0] s

  * igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait:
    - Statuses : 5 pass(s) 3 skip(s)
    - Exec time: [0.0] s

  * igt@kms_pm_rpm@modeset-pc8-residency-stress:
    - Statuses : 8 skip(s)
    - Exec time: [0.0] s

  * igt@kms_pm_rpm@modeset-stress-extra-wait:
    - Statuses :
    - Exec time: [None] s

  * igt@kms_pm_rpm@system-suspend-modeset:
    - Statuses : 7 pass(s) 1 skip(s)
    - Exec time: [0.0] s

  * igt@kms_pm_rpm@universal-planes:
    - Statuses :
    - Exec time: [None] s

  * igt@kms_pm_rpm@universal-planes-dpms:
    - Statuses :
    - Exec time: [None] s

  

Known issues
------------

  Here are the changes found in IGTPW_9720_full that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@api_intel_bb@blit-reloc-keep-cache:
    - shard-dg2:          NOTRUN -> [SKIP][9] ([i915#8411]) +1 other test skip
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-11/igt@api_intel_bb@blit-reloc-keep-cache.html

  * igt@drm_fdinfo@virtual-busy-all:
    - shard-dg2:          NOTRUN -> [SKIP][10] ([i915#8414]) +1 other test skip
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-5/igt@drm_fdinfo@virtual-busy-all.html
    - shard-mtlp:         NOTRUN -> [SKIP][11] ([i915#8414])
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-2/igt@drm_fdinfo@virtual-busy-all.html

  * igt@feature_discovery@psr2:
    - shard-tglu:         NOTRUN -> [SKIP][12] ([i915#658])
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-tglu-10/igt@feature_discovery@psr2.html

  * igt@gem_ccs@ctrl-surf-copy-new-ctx:
    - shard-rkl:          NOTRUN -> [SKIP][13] ([i915#4098] / [i915#5325])
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-rkl-7/igt@gem_ccs@ctrl-surf-copy-new-ctx.html

  * igt@gem_ccs@suspend-resume@xmajor-compressed-compfmt0-smem-lmem0:
    - shard-dg2:          [PASS][14] -> [INCOMPLETE][15] ([i915#6311] / [i915#7297])
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-dg2-11/igt@gem_ccs@suspend-resume@xmajor-compressed-compfmt0-smem-lmem0.html
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-6/igt@gem_ccs@suspend-resume@xmajor-compressed-compfmt0-smem-lmem0.html

  * igt@gem_close_race@multigpu-basic-threads:
    - shard-dg2:          NOTRUN -> [SKIP][16] ([i915#7697]) +1 other test skip
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-10/igt@gem_close_race@multigpu-basic-threads.html
    - shard-rkl:          NOTRUN -> [SKIP][17] ([i915#7697])
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-rkl-4/igt@gem_close_race@multigpu-basic-threads.html

  * igt@gem_ctx_exec@basic-nohangcheck:
    - shard-mtlp:         [PASS][18] -> [FAIL][19] ([i915#6121])
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-mtlp-1/igt@gem_ctx_exec@basic-nohangcheck.html
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-4/igt@gem_ctx_exec@basic-nohangcheck.html

  * igt@gem_ctx_isolation@preservation-s3@rcs0:
    - shard-snb:          NOTRUN -> [DMESG-WARN][20] ([i915#8841]) +8 other tests dmesg-warn
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-snb2/igt@gem_ctx_isolation@preservation-s3@rcs0.html

  * igt@gem_ctx_persistence@engines-mixed:
    - shard-snb:          NOTRUN -> [SKIP][21] ([fdo#109271] / [i915#1099]) +1 other test skip
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-snb5/igt@gem_ctx_persistence@engines-mixed.html

  * igt@gem_ctx_persistence@heartbeat-hostile:
    - shard-dg2:          NOTRUN -> [SKIP][22] ([i915#8555]) +2 other tests skip
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-5/igt@gem_ctx_persistence@heartbeat-hostile.html

  * igt@gem_ctx_sseu@invalid-sseu:
    - shard-dg2:          NOTRUN -> [SKIP][23] ([i915#280])
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-6/igt@gem_ctx_sseu@invalid-sseu.html

  * igt@gem_eio@hibernate:
    - shard-dg2:          [PASS][24] -> [ABORT][25] ([i915#7975] / [i915#8213])
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-dg2-11/igt@gem_eio@hibernate.html
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-1/igt@gem_eio@hibernate.html

  * igt@gem_eio@kms:
    - shard-dg1:          NOTRUN -> [FAIL][26] ([i915#5784])
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg1-17/igt@gem_eio@kms.html

  * igt@gem_eio@reset-stress:
    - shard-snb:          NOTRUN -> [FAIL][27] ([i915#8898])
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-snb7/igt@gem_eio@reset-stress.html

  * igt@gem_eio@unwedge-stress:
    - shard-dg1:          [PASS][28] -> [FAIL][29] ([i915#5784]) +1 other test fail
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-dg1-14/igt@gem_eio@unwedge-stress.html
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg1-12/igt@gem_eio@unwedge-stress.html

  * igt@gem_exec_balancer@bonded-false-hang:
    - shard-dg2:          NOTRUN -> [SKIP][30] ([i915#4812])
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-11/igt@gem_exec_balancer@bonded-false-hang.html

  * igt@gem_exec_balancer@parallel-contexts:
    - shard-rkl:          NOTRUN -> [SKIP][31] ([i915#4525])
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-rkl-4/igt@gem_exec_balancer@parallel-contexts.html

  * igt@gem_exec_capture@capture-invisible@lmem0:
    - shard-dg2:          NOTRUN -> [SKIP][32] ([i915#6334]) +1 other test skip
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-2/igt@gem_exec_capture@capture-invisible@lmem0.html

  * igt@gem_exec_capture@pi@bcs0:
    - shard-mtlp:         [PASS][33] -> [FAIL][34] ([i915#4475] / [i915#7765])
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-mtlp-1/igt@gem_exec_capture@pi@bcs0.html
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-7/igt@gem_exec_capture@pi@bcs0.html

  * igt@gem_exec_fair@basic-pace:
    - shard-dg2:          NOTRUN -> [SKIP][35] ([i915#3539])
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-11/igt@gem_exec_fair@basic-pace.html

  * igt@gem_exec_fair@basic-pace@rcs0:
    - shard-rkl:          [PASS][36] -> [FAIL][37] ([i915#2842])
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-rkl-7/igt@gem_exec_fair@basic-pace@rcs0.html
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-rkl-1/igt@gem_exec_fair@basic-pace@rcs0.html

  * igt@gem_exec_fence@syncobj-backward-timeline-chain-engines:
    - shard-snb:          NOTRUN -> [SKIP][38] ([fdo#109271]) +284 other tests skip
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-snb1/igt@gem_exec_fence@syncobj-backward-timeline-chain-engines.html

  * igt@gem_exec_flush@basic-batch-kernel-default-wb:
    - shard-mtlp:         [PASS][39] -> [DMESG-FAIL][40] ([i915#9121]) +1 other test dmesg-fail
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-mtlp-2/igt@gem_exec_flush@basic-batch-kernel-default-wb.html
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-4/igt@gem_exec_flush@basic-batch-kernel-default-wb.html

  * igt@gem_exec_flush@basic-wb-prw-default:
    - shard-dg2:          NOTRUN -> [SKIP][41] ([i915#3539] / [i915#4852]) +2 other tests skip
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-1/igt@gem_exec_flush@basic-wb-prw-default.html

  * igt@gem_exec_reloc@basic-gtt-read:
    - shard-rkl:          NOTRUN -> [SKIP][42] ([i915#3281])
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-rkl-7/igt@gem_exec_reloc@basic-gtt-read.html

  * igt@gem_exec_reloc@basic-wc-cpu:
    - shard-dg2:          NOTRUN -> [SKIP][43] ([i915#3281]) +11 other tests skip
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-11/igt@gem_exec_reloc@basic-wc-cpu.html

  * igt@gem_exec_reloc@basic-write-cpu-noreloc:
    - shard-mtlp:         NOTRUN -> [SKIP][44] ([i915#3281]) +1 other test skip
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-7/igt@gem_exec_reloc@basic-write-cpu-noreloc.html

  * igt@gem_exec_schedule@preempt-queue:
    - shard-dg2:          NOTRUN -> [SKIP][45] ([i915#4537] / [i915#4812])
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-11/igt@gem_exec_schedule@preempt-queue.html

  * igt@gem_exec_suspend@basic-s0@lmem0:
    - shard-dg2:          NOTRUN -> [INCOMPLETE][46] ([i915#6311])
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-1/igt@gem_exec_suspend@basic-s0@lmem0.html

  * igt@gem_fence_thrash@bo-write-verify-threaded-none:
    - shard-mtlp:         NOTRUN -> [SKIP][47] ([i915#4860])
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-1/igt@gem_fence_thrash@bo-write-verify-threaded-none.html

  * igt@gem_fenced_exec_thrash@too-many-fences:
    - shard-dg2:          NOTRUN -> [SKIP][48] ([i915#4860]) +2 other tests skip
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-6/igt@gem_fenced_exec_thrash@too-many-fences.html

  * igt@gem_lmem_swapping@heavy-verify-multi:
    - shard-tglu:         NOTRUN -> [SKIP][49] ([i915#4613])
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-tglu-7/igt@gem_lmem_swapping@heavy-verify-multi.html

  * igt@gem_lmem_swapping@parallel-random:
    - shard-rkl:          NOTRUN -> [SKIP][50] ([i915#4613]) +1 other test skip
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-rkl-2/igt@gem_lmem_swapping@parallel-random.html

  * igt@gem_lmem_swapping@smem-oom:
    - shard-mtlp:         NOTRUN -> [SKIP][51] ([i915#4613]) +1 other test skip
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-5/igt@gem_lmem_swapping@smem-oom.html

  * igt@gem_mmap_gtt@cpuset-big-copy:
    - shard-mtlp:         NOTRUN -> [SKIP][52] ([i915#4077]) +2 other tests skip
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-8/igt@gem_mmap_gtt@cpuset-big-copy.html

  * igt@gem_mmap_gtt@zero-extend:
    - shard-dg2:          NOTRUN -> [SKIP][53] ([i915#4077]) +8 other tests skip
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-2/igt@gem_mmap_gtt@zero-extend.html

  * igt@gem_mmap_wc@bad-object:
    - shard-dg2:          NOTRUN -> [SKIP][54] ([i915#4083]) +3 other tests skip
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-5/igt@gem_mmap_wc@bad-object.html

  * igt@gem_mmap_wc@close:
    - shard-mtlp:         NOTRUN -> [SKIP][55] ([i915#4083])
   [55]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-1/igt@gem_mmap_wc@close.html

  * igt@gem_pwrite@basic-self:
    - shard-dg2:          NOTRUN -> [SKIP][56] ([i915#3282]) +2 other tests skip
   [56]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-11/igt@gem_pwrite@basic-self.html

  * igt@gem_pxp@display-protected-crc:
    - shard-dg2:          NOTRUN -> [SKIP][57] ([i915#4270]) +3 other tests skip
   [57]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-6/igt@gem_pxp@display-protected-crc.html

  * igt@gem_pxp@reject-modify-context-protection-on:
    - shard-mtlp:         NOTRUN -> [SKIP][58] ([i915#4270])
   [58]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-6/igt@gem_pxp@reject-modify-context-protection-on.html

  * igt@gem_pxp@verify-pxp-stale-buf-execution:
    - shard-rkl:          NOTRUN -> [SKIP][59] ([i915#4270]) +1 other test skip
   [59]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-rkl-7/igt@gem_pxp@verify-pxp-stale-buf-execution.html

  * igt@gem_readwrite@beyond-eob:
    - shard-mtlp:         NOTRUN -> [SKIP][60] ([i915#3282]) +1 other test skip
   [60]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-4/igt@gem_readwrite@beyond-eob.html

  * igt@gem_set_tiling_vs_blt@tiled-to-untiled:
    - shard-dg2:          NOTRUN -> [SKIP][61] ([i915#4079])
   [61]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-5/igt@gem_set_tiling_vs_blt@tiled-to-untiled.html

  * igt@gem_set_tiling_vs_gtt:
    - shard-mtlp:         NOTRUN -> [SKIP][62] ([i915#4079]) +1 other test skip
   [62]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-8/igt@gem_set_tiling_vs_gtt.html

  * igt@gem_spin_batch@user-each:
    - shard-mtlp:         [PASS][63] -> [DMESG-FAIL][64] ([i915#8962] / [i915#9121])
   [63]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-mtlp-2/igt@gem_spin_batch@user-each.html
   [64]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-4/igt@gem_spin_batch@user-each.html

  * igt@gem_userptr_blits@create-destroy-unsync:
    - shard-dg2:          NOTRUN -> [SKIP][65] ([i915#3297]) +3 other tests skip
   [65]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-2/igt@gem_userptr_blits@create-destroy-unsync.html

  * igt@gem_userptr_blits@vma-merge:
    - shard-dg2:          NOTRUN -> [FAIL][66] ([i915#3318])
   [66]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-11/igt@gem_userptr_blits@vma-merge.html

  * igt@gem_workarounds@suspend-resume:
    - shard-dg2:          [PASS][67] -> [INCOMPLETE][68] ([i915#9138])
   [67]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-dg2-1/igt@gem_workarounds@suspend-resume.html
   [68]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-6/igt@gem_workarounds@suspend-resume.html

  * igt@gen7_exec_parse@cmd-crossing-page:
    - shard-tglu:         NOTRUN -> [SKIP][69] ([fdo#109289])
   [69]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-tglu-4/igt@gen7_exec_parse@cmd-crossing-page.html

  * igt@gen7_exec_parse@load-register-reg:
    - shard-mtlp:         NOTRUN -> [SKIP][70] ([fdo#109289])
   [70]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-1/igt@gen7_exec_parse@load-register-reg.html

  * igt@gen9_exec_parse@cmd-crossing-page:
    - shard-dg2:          NOTRUN -> [SKIP][71] ([i915#2856])
   [71]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-2/igt@gen9_exec_parse@cmd-crossing-page.html

  * igt@gen9_exec_parse@unaligned-access:
    - shard-mtlp:         NOTRUN -> [SKIP][72] ([i915#2856])
   [72]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-3/igt@gen9_exec_parse@unaligned-access.html

  * igt@i915_hangman@engine-engine-error@vcs0:
    - shard-mtlp:         NOTRUN -> [FAIL][73] ([i915#7069])
   [73]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-1/igt@i915_hangman@engine-engine-error@vcs0.html

  * igt@i915_module_load@load:
    - shard-tglu:         NOTRUN -> [SKIP][74] ([i915#6227])
   [74]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-tglu-4/igt@i915_module_load@load.html
    - shard-rkl:          NOTRUN -> [SKIP][75] ([i915#6227])
   [75]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-rkl-6/igt@i915_module_load@load.html

  * igt@i915_module_load@reload-with-fault-injection:
    - shard-dg2:          NOTRUN -> [DMESG-WARN][76] ([i915#7061] / [i915#8617])
   [76]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-10/igt@i915_module_load@reload-with-fault-injection.html
    - shard-mtlp:         [PASS][77] -> [INCOMPLETE][78] ([i915#1982] / [i915#8489])
   [77]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-mtlp-4/igt@i915_module_load@reload-with-fault-injection.html
   [78]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-6/igt@i915_module_load@reload-with-fault-injection.html

  * igt@i915_pipe_stress@stress-xrgb8888-ytiled:
    - shard-dg1:          [PASS][79] -> [DMESG-WARN][80] ([i915#4423])
   [79]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-dg1-13/igt@i915_pipe_stress@stress-xrgb8888-ytiled.html
   [80]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg1-18/igt@i915_pipe_stress@stress-xrgb8888-ytiled.html

  * igt@i915_pm_rc6_residency@rc6-accuracy:
    - shard-mtlp:         [PASS][81] -> [SKIP][82] ([i915#8403])
   [81]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-mtlp-1/igt@i915_pm_rc6_residency@rc6-accuracy.html
   [82]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-3/igt@i915_pm_rc6_residency@rc6-accuracy.html

  * igt@i915_pm_rps@min-max-config-idle:
    - shard-dg2:          NOTRUN -> [SKIP][83] ([i915#6621])
   [83]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-11/igt@i915_pm_rps@min-max-config-idle.html

  * igt@i915_suspend@basic-s3-without-i915:
    - shard-dg2:          [PASS][84] -> [FAIL][85] ([fdo#103375]) +2 other tests fail
   [84]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-dg2-11/igt@i915_suspend@basic-s3-without-i915.html
   [85]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-5/igt@i915_suspend@basic-s3-without-i915.html
    - shard-dg1:          [PASS][86] -> [DMESG-WARN][87] ([i915#4391] / [i915#4423]) +2 other tests dmesg-warn
   [86]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-dg1-18/igt@i915_suspend@basic-s3-without-i915.html
   [87]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg1-18/igt@i915_suspend@basic-s3-without-i915.html

  * igt@kms_async_flips@async-flip-with-page-flip-events@pipe-a-dp-4-4-mc_ccs:
    - shard-dg2:          NOTRUN -> [SKIP][88] ([i915#8709]) +11 other tests skip
   [88]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-11/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-a-dp-4-4-mc_ccs.html

  * igt@kms_async_flips@async-flip-with-page-flip-events@pipe-c-hdmi-a-4-y-rc_ccs:
    - shard-dg1:          NOTRUN -> [SKIP][89] ([i915#8502]) +7 other tests skip
   [89]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg1-14/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-c-hdmi-a-4-y-rc_ccs.html

  * igt@kms_async_flips@crc@pipe-a-hdmi-a-2:
    - shard-dg2:          NOTRUN -> [FAIL][90] ([i915#8247]) +3 other tests fail
   [90]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-2/igt@kms_async_flips@crc@pipe-a-hdmi-a-2.html

  * igt@kms_atomic@plane-primary-overlay-mutable-zpos:
    - shard-mtlp:         NOTRUN -> [SKIP][91] ([i915#404])
   [91]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-1/igt@kms_atomic@plane-primary-overlay-mutable-zpos.html
    - shard-dg1:          NOTRUN -> [SKIP][92] ([i915#404])
   [92]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg1-17/igt@kms_atomic@plane-primary-overlay-mutable-zpos.html

  * igt@kms_big_fb@4-tiled-64bpp-rotate-0:
    - shard-rkl:          NOTRUN -> [SKIP][93] ([i915#5286]) +2 other tests skip
   [93]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-rkl-1/igt@kms_big_fb@4-tiled-64bpp-rotate-0.html

  * igt@kms_big_fb@4-tiled-64bpp-rotate-180:
    - shard-mtlp:         NOTRUN -> [FAIL][94] ([i915#5138])
   [94]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-6/igt@kms_big_fb@4-tiled-64bpp-rotate-180.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0:
    - shard-mtlp:         [PASS][95] -> [FAIL][96] ([i915#5138])
   [95]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-mtlp-3/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0.html
   [96]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-2/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0.html

  * igt@kms_big_fb@x-tiled-32bpp-rotate-270:
    - shard-dg2:          NOTRUN -> [SKIP][97] ([fdo#111614]) +4 other tests skip
   [97]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-11/igt@kms_big_fb@x-tiled-32bpp-rotate-270.html
    - shard-mtlp:         NOTRUN -> [SKIP][98] ([fdo#111614])
   [98]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-3/igt@kms_big_fb@x-tiled-32bpp-rotate-270.html

  * igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0-async-flip:
    - shard-mtlp:         NOTRUN -> [FAIL][99] ([i915#3743])
   [99]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-8/igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0-async-flip.html

  * igt@kms_big_fb@y-tiled-64bpp-rotate-0:
    - shard-dg2:          NOTRUN -> [SKIP][100] ([i915#5190]) +10 other tests skip
   [100]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-1/igt@kms_big_fb@y-tiled-64bpp-rotate-0.html

  * igt@kms_big_fb@y-tiled-8bpp-rotate-90:
    - shard-dg1:          NOTRUN -> [SKIP][101] ([i915#3638])
   [101]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg1-16/igt@kms_big_fb@y-tiled-8bpp-rotate-90.html

  * igt@kms_big_fb@yf-tiled-32bpp-rotate-0:
    - shard-dg2:          NOTRUN -> [SKIP][102] ([i915#4538] / [i915#5190]) +1 other test skip
   [102]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-2/igt@kms_big_fb@yf-tiled-32bpp-rotate-0.html

  * igt@kms_big_fb@yf-tiled-8bpp-rotate-270:
    - shard-tglu:         NOTRUN -> [SKIP][103] ([fdo#111615])
   [103]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-tglu-9/igt@kms_big_fb@yf-tiled-8bpp-rotate-270.html
    - shard-rkl:          NOTRUN -> [SKIP][104] ([fdo#110723])
   [104]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-rkl-1/igt@kms_big_fb@yf-tiled-8bpp-rotate-270.html

  * igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-180:
    - shard-mtlp:         NOTRUN -> [SKIP][105] ([fdo#111615]) +3 other tests skip
   [105]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-6/igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-180.html

  * igt@kms_ccs@pipe-a-bad-aux-stride-yf_tiled_ccs:
    - shard-tglu:         NOTRUN -> [SKIP][106] ([fdo#111615] / [i915#3689] / [i915#5354] / [i915#6095]) +1 other test skip
   [106]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-tglu-3/igt@kms_ccs@pipe-a-bad-aux-stride-yf_tiled_ccs.html

  * igt@kms_ccs@pipe-a-ccs-on-another-bo-y_tiled_gen12_mc_ccs:
    - shard-dg2:          NOTRUN -> [SKIP][107] ([i915#3689] / [i915#3886] / [i915#5354]) +8 other tests skip
   [107]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-10/igt@kms_ccs@pipe-a-ccs-on-another-bo-y_tiled_gen12_mc_ccs.html

  * igt@kms_ccs@pipe-a-crc-primary-rotation-180-yf_tiled_ccs:
    - shard-rkl:          NOTRUN -> [SKIP][108] ([i915#3734] / [i915#5354] / [i915#6095])
   [108]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-rkl-2/igt@kms_ccs@pipe-a-crc-primary-rotation-180-yf_tiled_ccs.html

  * igt@kms_ccs@pipe-b-ccs-on-another-bo-y_tiled_gen12_rc_ccs:
    - shard-mtlp:         NOTRUN -> [SKIP][109] ([i915#6095]) +11 other tests skip
   [109]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-5/igt@kms_ccs@pipe-b-ccs-on-another-bo-y_tiled_gen12_rc_ccs.html

  * igt@kms_ccs@pipe-b-crc-primary-rotation-180-4_tiled_dg2_rc_ccs:
    - shard-rkl:          NOTRUN -> [SKIP][110] ([i915#5354] / [i915#6095]) +4 other tests skip
   [110]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-rkl-2/igt@kms_ccs@pipe-b-crc-primary-rotation-180-4_tiled_dg2_rc_ccs.html

  * igt@kms_ccs@pipe-c-bad-pixel-format-y_tiled_gen12_mc_ccs:
    - shard-dg1:          NOTRUN -> [SKIP][111] ([i915#3689] / [i915#3886] / [i915#5354] / [i915#6095])
   [111]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg1-18/igt@kms_ccs@pipe-c-bad-pixel-format-y_tiled_gen12_mc_ccs.html
    - shard-mtlp:         NOTRUN -> [SKIP][112] ([i915#3886] / [i915#6095])
   [112]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-6/igt@kms_ccs@pipe-c-bad-pixel-format-y_tiled_gen12_mc_ccs.html

  * igt@kms_ccs@pipe-c-bad-rotation-90-y_tiled_gen12_rc_ccs_cc:
    - shard-rkl:          NOTRUN -> [SKIP][113] ([i915#5354]) +6 other tests skip
   [113]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-rkl-6/igt@kms_ccs@pipe-c-bad-rotation-90-y_tiled_gen12_rc_ccs_cc.html

  * igt@kms_ccs@pipe-c-crc-primary-rotation-180-4_tiled_dg2_rc_ccs_cc:
    - shard-dg1:          NOTRUN -> [SKIP][114] ([i915#5354] / [i915#6095])
   [114]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg1-17/igt@kms_ccs@pipe-c-crc-primary-rotation-180-4_tiled_dg2_rc_ccs_cc.html

  * igt@kms_ccs@pipe-d-ccs-on-another-bo-y_tiled_gen12_mc_ccs:
    - shard-tglu:         NOTRUN -> [SKIP][115] ([i915#3689] / [i915#5354] / [i915#6095])
   [115]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-tglu-6/igt@kms_ccs@pipe-d-ccs-on-another-bo-y_tiled_gen12_mc_ccs.html

  * igt@kms_ccs@pipe-d-crc-primary-rotation-180-4_tiled_mtl_mc_ccs:
    - shard-tglu:         NOTRUN -> [SKIP][116] ([i915#5354] / [i915#6095]) +4 other tests skip
   [116]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-tglu-7/igt@kms_ccs@pipe-d-crc-primary-rotation-180-4_tiled_mtl_mc_ccs.html

  * igt@kms_ccs@pipe-d-crc-sprite-planes-basic-y_tiled_ccs:
    - shard-dg2:          NOTRUN -> [SKIP][117] ([i915#3689] / [i915#5354]) +14 other tests skip
   [117]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-6/igt@kms_ccs@pipe-d-crc-sprite-planes-basic-y_tiled_ccs.html

  * igt@kms_cdclk@mode-transition@pipe-b-hdmi-a-2:
    - shard-dg2:          NOTRUN -> [SKIP][118] ([i915#7213]) +3 other tests skip
   [118]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-2/igt@kms_cdclk@mode-transition@pipe-b-hdmi-a-2.html

  * igt@kms_chamelium_color@ctm-0-75:
    - shard-tglu:         NOTRUN -> [SKIP][119] ([fdo#111827])
   [119]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-tglu-2/igt@kms_chamelium_color@ctm-0-75.html

  * igt@kms_chamelium_color@ctm-green-to-red:
    - shard-dg2:          NOTRUN -> [SKIP][120] ([fdo#111827])
   [120]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-2/igt@kms_chamelium_color@ctm-green-to-red.html
    - shard-mtlp:         NOTRUN -> [SKIP][121] ([fdo#111827])
   [121]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-8/igt@kms_chamelium_color@ctm-green-to-red.html

  * igt@kms_chamelium_frames@hdmi-cmp-planar-formats:
    - shard-dg2:          NOTRUN -> [SKIP][122] ([i915#7828]) +8 other tests skip
   [122]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-5/igt@kms_chamelium_frames@hdmi-cmp-planar-formats.html

  * igt@kms_chamelium_frames@hdmi-crc-fast:
    - shard-mtlp:         NOTRUN -> [SKIP][123] ([i915#7828])
   [123]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-5/igt@kms_chamelium_frames@hdmi-crc-fast.html

  * igt@kms_chamelium_hpd@hdmi-hpd:
    - shard-tglu:         NOTRUN -> [SKIP][124] ([i915#7828])
   [124]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-tglu-8/igt@kms_chamelium_hpd@hdmi-hpd.html

  * igt@kms_chamelium_hpd@vga-hpd-for-each-pipe:
    - shard-rkl:          NOTRUN -> [SKIP][125] ([i915#7828]) +2 other tests skip
   [125]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-rkl-4/igt@kms_chamelium_hpd@vga-hpd-for-each-pipe.html

  * igt@kms_color@deep-color:
    - shard-rkl:          NOTRUN -> [SKIP][126] ([i915#3555]) +2 other tests skip
   [126]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-rkl-2/igt@kms_color@deep-color.html

  * igt@kms_content_protection@dp-mst-type-0:
    - shard-dg2:          NOTRUN -> [SKIP][127] ([i915#3299])
   [127]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-2/igt@kms_content_protection@dp-mst-type-0.html

  * igt@kms_content_protection@lic:
    - shard-mtlp:         NOTRUN -> [SKIP][128] ([i915#6944])
   [128]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-7/igt@kms_content_protection@lic.html

  * igt@kms_content_protection@lic@pipe-a-dp-4:
    - shard-dg2:          NOTRUN -> [TIMEOUT][129] ([i915#7173])
   [129]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-11/igt@kms_content_protection@lic@pipe-a-dp-4.html

  * igt@kms_content_protection@srm:
    - shard-dg2:          NOTRUN -> [SKIP][130] ([i915#7118]) +1 other test skip
   [130]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-1/igt@kms_content_protection@srm.html

  * igt@kms_cursor_crc@cursor-rapid-movement-512x170:
    - shard-dg2:          NOTRUN -> [SKIP][131] ([i915#3359]) +1 other test skip
   [131]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-1/igt@kms_cursor_crc@cursor-rapid-movement-512x170.html

  * igt@kms_cursor_crc@cursor-sliding-max-size:
    - shard-dg2:          NOTRUN -> [SKIP][132] ([i915#3555]) +3 other tests skip
   [132]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-11/igt@kms_cursor_crc@cursor-sliding-max-size.html

  * igt@kms_cursor_legacy@2x-flip-vs-cursor-atomic:
    - shard-dg2:          NOTRUN -> [SKIP][133] ([fdo#109274] / [fdo#111767] / [i915#5354])
   [133]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-1/igt@kms_cursor_legacy@2x-flip-vs-cursor-atomic.html

  * igt@kms_cursor_legacy@2x-long-cursor-vs-flip-atomic:
    - shard-tglu:         NOTRUN -> [SKIP][134] ([fdo#109274])
   [134]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-tglu-5/igt@kms_cursor_legacy@2x-long-cursor-vs-flip-atomic.html

  * igt@kms_cursor_legacy@2x-long-flip-vs-cursor-atomic:
    - shard-mtlp:         NOTRUN -> [SKIP][135] ([i915#3546])
   [135]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-6/igt@kms_cursor_legacy@2x-long-flip-vs-cursor-atomic.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic:
    - shard-dg2:          NOTRUN -> [SKIP][136] ([i915#4103] / [i915#4213])
   [136]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-11/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy:
    - shard-tglu:         NOTRUN -> [SKIP][137] ([i915#4103])
   [137]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-tglu-2/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html

  * igt@kms_cursor_legacy@cursorb-vs-flipb-legacy:
    - shard-dg2:          NOTRUN -> [SKIP][138] ([fdo#109274] / [i915#5354]) +3 other tests skip
   [138]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-6/igt@kms_cursor_legacy@cursorb-vs-flipb-legacy.html

  * igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions:
    - shard-dg1:          NOTRUN -> [SKIP][139] ([i915#4103] / [i915#4213])
   [139]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg1-15/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions.html
    - shard-mtlp:         NOTRUN -> [SKIP][140] ([i915#4213])
   [140]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-4/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions.html

  * igt@kms_dsc@dsc-basic:
    - shard-rkl:          NOTRUN -> [SKIP][141] ([i915#3555] / [i915#3840])
   [141]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-rkl-1/igt@kms_dsc@dsc-basic.html

  * igt@kms_flip@2x-blocking-absolute-wf_vblank:
    - shard-tglu:         NOTRUN -> [SKIP][142] ([fdo#109274] / [i915#3637])
   [142]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-tglu-7/igt@kms_flip@2x-blocking-absolute-wf_vblank.html

  * igt@kms_flip@2x-flip-vs-blocking-wf-vblank:
    - shard-dg2:          NOTRUN -> [SKIP][143] ([fdo#109274] / [fdo#111767])
   [143]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-2/igt@kms_flip@2x-flip-vs-blocking-wf-vblank.html

  * igt@kms_flip@2x-flip-vs-expired-vblank-interruptible:
    - shard-snb:          NOTRUN -> [SKIP][144] ([fdo#109271] / [fdo#111767]) +1 other test skip
   [144]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-snb5/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible.html

  * igt@kms_flip@2x-flip-vs-wf_vblank-interruptible:
    - shard-dg2:          NOTRUN -> [SKIP][145] ([fdo#109274]) +6 other tests skip
   [145]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-6/igt@kms_flip@2x-flip-vs-wf_vblank-interruptible.html

  * igt@kms_flip@2x-plain-flip-fb-recreate-interruptible@bc-hdmi-a1-hdmi-a2:
    - shard-glk:          [PASS][146] -> [FAIL][147] ([i915#2122])
   [146]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-glk9/igt@kms_flip@2x-plain-flip-fb-recreate-interruptible@bc-hdmi-a1-hdmi-a2.html
   [147]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-glk2/igt@kms_flip@2x-plain-flip-fb-recreate-interruptible@bc-hdmi-a1-hdmi-a2.html

  * igt@kms_flip@flip-vs-expired-vblank-interruptible@c-dp1:
    - shard-apl:          [PASS][148] -> [FAIL][149] ([i915#79])
   [148]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-apl1/igt@kms_flip@flip-vs-expired-vblank-interruptible@c-dp1.html
   [149]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-apl1/igt@kms_flip@flip-vs-expired-vblank-interruptible@c-dp1.html

  * igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-upscaling@pipe-a-valid-mode:
    - shard-rkl:          NOTRUN -> [SKIP][150] ([i915#2672])
   [150]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-rkl-4/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-upscaling@pipe-a-valid-mode.html

  * igt@kms_flip_scaled_crc@flip-64bpp-linear-to-16bpp-linear-downscaling@pipe-a-default-mode:
    - shard-mtlp:         NOTRUN -> [SKIP][151] ([i915#3555] / [i915#8810])
   [151]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-7/igt@kms_flip_scaled_crc@flip-64bpp-linear-to-16bpp-linear-downscaling@pipe-a-default-mode.html

  * igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytile-upscaling@pipe-a-valid-mode:
    - shard-dg2:          NOTRUN -> [SKIP][152] ([i915#2672]) +2 other tests skip
   [152]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-2/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytile-upscaling@pipe-a-valid-mode.html

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-indfb-draw-mmap-cpu:
    - shard-dg2:          [PASS][153] -> [FAIL][154] ([i915#6880]) +1 other test fail
   [153]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-dg2-11/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-indfb-draw-mmap-cpu.html
   [154]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-11/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-indfb-draw-mmap-cpu.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-mmap-gtt:
    - shard-dg2:          NOTRUN -> [SKIP][155] ([i915#8708]) +20 other tests skip
   [155]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-10/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-mmap-wc:
    - shard-dg1:          NOTRUN -> [SKIP][156] ([i915#8708])
   [156]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg1-12/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-draw-blt:
    - shard-dg2:          NOTRUN -> [SKIP][157] ([i915#5354]) +37 other tests skip
   [157]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-11/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-draw-blt.html
    - shard-rkl:          NOTRUN -> [SKIP][158] ([fdo#111825] / [i915#1825]) +3 other tests skip
   [158]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-rkl-4/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbc-rgb565-draw-pwrite:
    - shard-dg2:          NOTRUN -> [FAIL][159] ([i915#6880])
   [159]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-11/igt@kms_frontbuffer_tracking@fbc-rgb565-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@fbc-tiling-y:
    - shard-dg2:          NOTRUN -> [SKIP][160] ([i915#5460])
   [160]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-1/igt@kms_frontbuffer_tracking@fbc-tiling-y.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-indfb-draw-render:
    - shard-rkl:          NOTRUN -> [SKIP][161] ([i915#3023]) +4 other tests skip
   [161]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-rkl-1/igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-indfb-draw-render.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-shrfb-draw-blt:
    - shard-dg2:          NOTRUN -> [SKIP][162] ([i915#3458]) +16 other tests skip
   [162]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-2/igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-shrfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-spr-indfb-onoff:
    - shard-mtlp:         NOTRUN -> [SKIP][163] ([i915#1825]) +11 other tests skip
   [163]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-1/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-spr-indfb-onoff.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-pri-shrfb-draw-blt:
    - shard-dg1:          NOTRUN -> [SKIP][164] ([fdo#111825])
   [164]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg1-15/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-pri-shrfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-draw-mmap-wc:
    - shard-tglu:         NOTRUN -> [SKIP][165] ([fdo#110189]) +3 other tests skip
   [165]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-tglu-3/igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@psr-2p-scndscrn-pri-shrfb-draw-render:
    - shard-tglu:         NOTRUN -> [SKIP][166] ([fdo#109280]) +4 other tests skip
   [166]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-tglu-9/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-pri-shrfb-draw-render.html

  * igt@kms_hdmi_inject@inject-audio:
    - shard-tglu:         [PASS][167] -> [SKIP][168] ([i915#433])
   [167]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-tglu-3/igt@kms_hdmi_inject@inject-audio.html
   [168]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-tglu-7/igt@kms_hdmi_inject@inject-audio.html

  * igt@kms_hdr@bpc-switch-suspend:
    - shard-tglu:         NOTRUN -> [SKIP][169] ([i915#3555] / [i915#8228])
   [169]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-tglu-3/igt@kms_hdr@bpc-switch-suspend.html
    - shard-dg2:          NOTRUN -> [SKIP][170] ([i915#3555] / [i915#8228])
   [170]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-5/igt@kms_hdr@bpc-switch-suspend.html

  * igt@kms_hdr@invalid-metadata-sizes:
    - shard-rkl:          NOTRUN -> [SKIP][171] ([i915#3555] / [i915#8228]) +1 other test skip
   [171]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-rkl-4/igt@kms_hdr@invalid-metadata-sizes.html

  * igt@kms_hdr@static-toggle:
    - shard-mtlp:         NOTRUN -> [SKIP][172] ([i915#3555] / [i915#8228])
   [172]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-1/igt@kms_hdr@static-toggle.html

  * igt@kms_multipipe_modeset@basic-max-pipe-crc-check:
    - shard-dg2:          NOTRUN -> [SKIP][173] ([i915#4816])
   [173]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-10/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html

  * igt@kms_plane_lowres@tiling-yf:
    - shard-mtlp:         NOTRUN -> [SKIP][174] ([i915#3555] / [i915#8821])
   [174]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-3/igt@kms_plane_lowres@tiling-yf.html

  * igt@kms_plane_scaling@intel-max-src-size@pipe-a-hdmi-a-1:
    - shard-rkl:          NOTRUN -> [FAIL][175] ([i915#8292])
   [175]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-rkl-7/igt@kms_plane_scaling@intel-max-src-size@pipe-a-hdmi-a-1.html
    - shard-dg1:          NOTRUN -> [FAIL][176] ([i915#8292])
   [176]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg1-19/igt@kms_plane_scaling@intel-max-src-size@pipe-a-hdmi-a-1.html

  * igt@kms_plane_scaling@plane-downscale-with-modifiers-factor-0-25@pipe-b-hdmi-a-1:
    - shard-rkl:          NOTRUN -> [SKIP][177] ([i915#5176]) +5 other tests skip
   [177]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-rkl-7/igt@kms_plane_scaling@plane-downscale-with-modifiers-factor-0-25@pipe-b-hdmi-a-1.html

  * igt@kms_plane_scaling@plane-downscale-with-pixel-format-factor-0-25@pipe-b-hdmi-a-1:
    - shard-dg2:          NOTRUN -> [SKIP][178] ([i915#5176]) +3 other tests skip
   [178]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-10/igt@kms_plane_scaling@plane-downscale-with-pixel-format-factor-0-25@pipe-b-hdmi-a-1.html

  * igt@kms_plane_scaling@plane-downscale-with-pixel-format-factor-0-5@pipe-c-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][179] ([i915#5176]) +3 other tests skip
   [179]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-6/igt@kms_plane_scaling@plane-downscale-with-pixel-format-factor-0-5@pipe-c-edp-1.html

  * igt@kms_plane_scaling@plane-upscale-with-rotation-factor-0-25@pipe-b-hdmi-a-4:
    - shard-dg1:          NOTRUN -> [SKIP][180] ([i915#5176]) +11 other tests skip
   [180]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg1-14/igt@kms_plane_scaling@plane-upscale-with-rotation-factor-0-25@pipe-b-hdmi-a-4.html

  * igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-25@pipe-c-hdmi-a-1:
    - shard-dg2:          NOTRUN -> [SKIP][181] ([i915#5235]) +23 other tests skip
   [181]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-10/igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-25@pipe-c-hdmi-a-1.html

  * igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25@pipe-b-hdmi-a-1:
    - shard-rkl:          NOTRUN -> [SKIP][182] ([i915#5235]) +3 other tests skip
   [182]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-rkl-7/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25@pipe-b-hdmi-a-1.html

  * igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-5@pipe-a-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][183] ([i915#5235]) +3 other tests skip
   [183]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-4/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-5@pipe-a-edp-1.html

  * igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-25@pipe-d-hdmi-a-1:
    - shard-dg1:          NOTRUN -> [SKIP][184] ([i915#5235]) +7 other tests skip
   [184]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg1-19/igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-25@pipe-d-hdmi-a-1.html

  * {igt@kms_pm_dc@dc6-psr} (NEW):
    - shard-glk:          NOTRUN -> [SKIP][185] ([fdo#109271]) +17 other tests skip
   [185]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-glk1/igt@kms_pm_dc@dc6-psr.html

  * {igt@kms_pm_lpsp@screens-disabled} (NEW):
    - shard-apl:          NOTRUN -> [SKIP][186] ([fdo#109271]) +17 other tests skip
   [186]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-apl1/igt@kms_pm_lpsp@screens-disabled.html

  * {igt@kms_pm_rpm@fences-dpms} (NEW):
    - shard-dg1:          NOTRUN -> [SKIP][187] ([i915#4077])
   [187]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg1-12/igt@kms_pm_rpm@fences-dpms.html

  * igt@kms_prime@basic-crc-hybrid:
    - shard-dg2:          NOTRUN -> [SKIP][188] ([i915#6524] / [i915#6805]) +1 other test skip
   [188]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-2/igt@kms_prime@basic-crc-hybrid.html
    - shard-mtlp:         NOTRUN -> [SKIP][189] ([i915#6524])
   [189]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-5/igt@kms_prime@basic-crc-hybrid.html

  * igt@kms_psr2_sf@primary-plane-update-sf-dmg-area-big-fb:
    - shard-dg2:          NOTRUN -> [SKIP][190] ([i915#658]) +1 other test skip
   [190]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-10/igt@kms_psr2_sf@primary-plane-update-sf-dmg-area-big-fb.html

  * igt@kms_psr@psr2_sprite_blt:
    - shard-dg2:          NOTRUN -> [SKIP][191] ([i915#1072]) +8 other tests skip
   [191]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-10/igt@kms_psr@psr2_sprite_blt.html

  * igt@kms_rotation_crc@primary-y-tiled-reflect-x-90:
    - shard-mtlp:         NOTRUN -> [SKIP][192] ([i915#4235]) +1 other test skip
   [192]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-4/igt@kms_rotation_crc@primary-y-tiled-reflect-x-90.html

  * igt@kms_rotation_crc@primary-yf-tiled-reflect-x-270:
    - shard-rkl:          NOTRUN -> [SKIP][193] ([fdo#111615] / [i915#5289])
   [193]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-rkl-2/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-270.html

  * igt@kms_selftest@drm_format:
    - shard-mtlp:         NOTRUN -> [SKIP][194] ([i915#8661])
   [194]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-2/igt@kms_selftest@drm_format.html

  * igt@kms_selftest@drm_format_helper:
    - shard-dg2:          NOTRUN -> [SKIP][195] ([i915#8661]) +1 other test skip
   [195]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-2/igt@kms_selftest@drm_format_helper.html

  * igt@kms_selftest@drm_plane:
    - shard-snb:          NOTRUN -> [SKIP][196] ([fdo#109271] / [i915#8661])
   [196]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-snb2/igt@kms_selftest@drm_plane.html

  * igt@kms_setmode@basic@pipe-a-vga-1:
    - shard-snb:          NOTRUN -> [FAIL][197] ([i915#5465]) +1 other test fail
   [197]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-snb6/igt@kms_setmode@basic@pipe-a-vga-1.html

  * igt@kms_tiled_display@basic-test-pattern-with-chamelium:
    - shard-dg2:          NOTRUN -> [SKIP][198] ([i915#8623])
   [198]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-2/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html

  * igt@kms_tv_load_detect@load-detect:
    - shard-dg2:          NOTRUN -> [SKIP][199] ([fdo#109309])
   [199]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-5/igt@kms_tv_load_detect@load-detect.html

  * igt@kms_vblank@pipe-d-ts-continuation-dpms-suspend:
    - shard-mtlp:         [PASS][200] -> [ABORT][201] ([i915#6311] / [i915#8466])
   [200]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-mtlp-2/igt@kms_vblank@pipe-d-ts-continuation-dpms-suspend.html
   [201]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-3/igt@kms_vblank@pipe-d-ts-continuation-dpms-suspend.html

  * igt@kms_vblank@pipe-d-ts-continuation-suspend:
    - shard-rkl:          NOTRUN -> [SKIP][202] ([i915#4070] / [i915#533] / [i915#6768])
   [202]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-rkl-7/igt@kms_vblank@pipe-d-ts-continuation-suspend.html

  * igt@kms_vrr@flip-basic:
    - shard-tglu:         NOTRUN -> [SKIP][203] ([i915#3555]) +1 other test skip
   [203]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-tglu-10/igt@kms_vrr@flip-basic.html

  * igt@kms_writeback@writeback-pixel-formats:
    - shard-tglu:         NOTRUN -> [SKIP][204] ([i915#2437])
   [204]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-tglu-2/igt@kms_writeback@writeback-pixel-formats.html

  * igt@perf@invalid-create-userspace-config:
    - shard-mtlp:         [PASS][205] -> [DMESG-WARN][206] ([i915#2017])
   [205]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-mtlp-8/igt@perf@invalid-create-userspace-config.html
   [206]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-1/igt@perf@invalid-create-userspace-config.html

  * igt@perf@per-context-mode-unprivileged:
    - shard-dg2:          NOTRUN -> [SKIP][207] ([fdo#109289]) +2 other tests skip
   [207]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-2/igt@perf@per-context-mode-unprivileged.html

  * igt@perf_pmu@most-busy-check-all@rcs0:
    - shard-rkl:          [PASS][208] -> [FAIL][209] ([i915#4349])
   [208]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-rkl-1/igt@perf_pmu@most-busy-check-all@rcs0.html
   [209]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-rkl-1/igt@perf_pmu@most-busy-check-all@rcs0.html

  * igt@perf_pmu@rc6-suspend:
    - shard-dg2:          NOTRUN -> [FAIL][210] ([fdo#103375])
   [210]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-5/igt@perf_pmu@rc6-suspend.html

  * igt@prime_vgem@basic-fence-mmap:
    - shard-mtlp:         NOTRUN -> [SKIP][211] ([i915#3708] / [i915#4077]) +1 other test skip
   [211]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-6/igt@prime_vgem@basic-fence-mmap.html

  * igt@prime_vgem@basic-gtt:
    - shard-dg2:          NOTRUN -> [SKIP][212] ([i915#3708] / [i915#4077]) +1 other test skip
   [212]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-5/igt@prime_vgem@basic-gtt.html

  * igt@sysfs_heartbeat_interval@precise@vecs0:
    - shard-mtlp:         [PASS][213] -> [FAIL][214] ([i915#8332])
   [213]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-mtlp-7/igt@sysfs_heartbeat_interval@precise@vecs0.html
   [214]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-3/igt@sysfs_heartbeat_interval@precise@vecs0.html

  * igt@v3d/v3d_submit_cl@simple-flush-cache:
    - shard-dg2:          NOTRUN -> [SKIP][215] ([i915#2575]) +8 other tests skip
   [215]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-1/igt@v3d/v3d_submit_cl@simple-flush-cache.html

  * igt@v3d/v3d_submit_csd@bad-pad:
    - shard-rkl:          NOTRUN -> [SKIP][216] ([fdo#109315]) +1 other test skip
   [216]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-rkl-2/igt@v3d/v3d_submit_csd@bad-pad.html

  * igt@v3d/v3d_submit_csd@multiple-job-submission:
    - shard-tglu:         NOTRUN -> [SKIP][217] ([fdo#109315] / [i915#2575]) +2 other tests skip
   [217]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-tglu-8/igt@v3d/v3d_submit_csd@multiple-job-submission.html

  * igt@v3d/v3d_wait_bo@map-bo-0ns:
    - shard-mtlp:         NOTRUN -> [SKIP][218] ([i915#2575]) +1 other test skip
   [218]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-7/igt@v3d/v3d_wait_bo@map-bo-0ns.html

  * igt@vc4/vc4_dmabuf_poll@poll-write-waits-until-write-done:
    - shard-rkl:          NOTRUN -> [SKIP][219] ([i915#7711]) +2 other tests skip
   [219]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-rkl-1/igt@vc4/vc4_dmabuf_poll@poll-write-waits-until-write-done.html

  * igt@vc4/vc4_perfmon@get-values-valid-perfmon:
    - shard-mtlp:         NOTRUN -> [SKIP][220] ([i915#7711])
   [220]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-4/igt@vc4/vc4_perfmon@get-values-valid-perfmon.html

  * igt@vc4/vc4_tiling@set-get:
    - shard-dg2:          NOTRUN -> [SKIP][221] ([i915#7711]) +7 other tests skip
   [221]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-11/igt@vc4/vc4_tiling@set-get.html

  * igt@vc4/vc4_wait_bo@unused-bo-0ns:
    - shard-tglu:         NOTRUN -> [SKIP][222] ([i915#2575])
   [222]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-tglu-6/igt@vc4/vc4_wait_bo@unused-bo-0ns.html

  
#### Possible fixes ####

  * igt@gem_ctx_exec@basic-nohangcheck:
    - shard-rkl:          [FAIL][223] ([i915#6268]) -> [PASS][224]
   [223]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-rkl-2/igt@gem_ctx_exec@basic-nohangcheck.html
   [224]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-rkl-7/igt@gem_ctx_exec@basic-nohangcheck.html

  * igt@gem_ctx_param@invalid-size-get:
    - shard-mtlp:         [DMESG-WARN][225] -> [PASS][226]
   [225]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-mtlp-1/igt@gem_ctx_param@invalid-size-get.html
   [226]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-6/igt@gem_ctx_param@invalid-size-get.html

  * igt@gem_ctx_persistence@legacy-engines-hostile@vebox:
    - shard-mtlp:         [FAIL][227] ([i915#2410]) -> [PASS][228] +2 other tests pass
   [227]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-mtlp-3/igt@gem_ctx_persistence@legacy-engines-hostile@vebox.html
   [228]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-7/igt@gem_ctx_persistence@legacy-engines-hostile@vebox.html

  * igt@gem_eio@in-flight-suspend:
    - shard-rkl:          [FAIL][229] ([fdo#103375]) -> [PASS][230]
   [229]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-rkl-6/igt@gem_eio@in-flight-suspend.html
   [230]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-rkl-4/igt@gem_eio@in-flight-suspend.html
    - shard-dg2:          [FAIL][231] ([fdo#103375]) -> [PASS][232]
   [231]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-dg2-11/igt@gem_eio@in-flight-suspend.html
   [232]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-10/igt@gem_eio@in-flight-suspend.html

  * igt@gem_exec_fair@basic-none-solo@rcs0:
    - shard-apl:          [FAIL][233] ([i915#2842]) -> [PASS][234] +1 other test pass
   [233]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-apl7/igt@gem_exec_fair@basic-none-solo@rcs0.html
   [234]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-apl7/igt@gem_exec_fair@basic-none-solo@rcs0.html

  * igt@gem_exec_fair@basic-pace-share@rcs0:
    - shard-tglu:         [FAIL][235] ([i915#2842]) -> [PASS][236]
   [235]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-tglu-2/igt@gem_exec_fair@basic-pace-share@rcs0.html
   [236]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-tglu-2/igt@gem_exec_fair@basic-pace-share@rcs0.html

  * igt@gem_exec_fair@basic-pace@rcs0:
    - shard-glk:          [FAIL][237] ([i915#2842]) -> [PASS][238] +1 other test pass
   [237]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-glk7/igt@gem_exec_fair@basic-pace@rcs0.html
   [238]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-glk1/igt@gem_exec_fair@basic-pace@rcs0.html

  * igt@gem_exec_fair@basic-throttle@rcs0:
    - shard-rkl:          [FAIL][239] ([i915#2842]) -> [PASS][240]
   [239]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-rkl-4/igt@gem_exec_fair@basic-throttle@rcs0.html
   [240]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-rkl-4/igt@gem_exec_fair@basic-throttle@rcs0.html

  * igt@gem_exec_fence@parallel@bcs0:
    - shard-mtlp:         [DMESG-FAIL][241] ([i915#8962] / [i915#9121]) -> [PASS][242] +1 other test pass
   [241]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-mtlp-4/igt@gem_exec_fence@parallel@bcs0.html
   [242]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-2/igt@gem_exec_fence@parallel@bcs0.html

  * igt@gem_exec_fence@parallel@vcs0:
    - shard-mtlp:         [DMESG-FAIL][243] ([i915#9121]) -> [PASS][244]
   [243]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-mtlp-4/igt@gem_exec_fence@parallel@vcs0.html
   [244]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-2/igt@gem_exec_fence@parallel@vcs0.html

  * igt@gem_exec_fence@parallel@vecs0:
    - shard-mtlp:         [FAIL][245] ([i915#8957]) -> [PASS][246] +2 other tests pass
   [245]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-mtlp-4/igt@gem_exec_fence@parallel@vecs0.html
   [246]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-2/igt@gem_exec_fence@parallel@vecs0.html

  * igt@gem_exec_schedule@preemptive-hang@vcs0:
    - shard-mtlp:         [FAIL][247] ([i915#9051]) -> [PASS][248]
   [247]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-mtlp-1/igt@gem_exec_schedule@preemptive-hang@vcs0.html
   [248]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-6/igt@gem_exec_schedule@preemptive-hang@vcs0.html

  * igt@gem_exec_suspend@basic-s0@smem:
    - shard-dg2:          [INCOMPLETE][249] ([i915#6311]) -> [PASS][250]
   [249]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-dg2-5/igt@gem_exec_suspend@basic-s0@smem.html
   [250]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-1/igt@gem_exec_suspend@basic-s0@smem.html

  * igt@gem_exec_suspend@basic-s3@smem:
    - shard-dg2:          [INCOMPLETE][251] ([i915#7793]) -> [PASS][252]
   [251]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-dg2-5/igt@gem_exec_suspend@basic-s3@smem.html
   [252]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-10/igt@gem_exec_suspend@basic-s3@smem.html

  * igt@gem_lmem_swapping@smem-oom@lmem0:
    - shard-dg2:          [DMESG-WARN][253] ([i915#4936] / [i915#5493]) -> [PASS][254]
   [253]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-dg2-6/igt@gem_lmem_swapping@smem-oom@lmem0.html
   [254]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-1/igt@gem_lmem_swapping@smem-oom@lmem0.html

  * igt@i915_hangman@detector@vcs0:
    - shard-mtlp:         [FAIL][255] ([i915#8456]) -> [PASS][256] +2 other tests pass
   [255]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-mtlp-8/igt@i915_hangman@detector@vcs0.html
   [256]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-2/igt@i915_hangman@detector@vcs0.html

  * igt@i915_hangman@gt-engine-error@vcs0:
    - shard-mtlp:         [FAIL][257] ([i915#7069]) -> [PASS][258]
   [257]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-mtlp-3/igt@i915_hangman@gt-engine-error@vcs0.html
   [258]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-7/igt@i915_hangman@gt-engine-error@vcs0.html

  * igt@i915_pm_rc6_residency@rc6-idle@rcs0:
    - shard-dg1:          [FAIL][259] ([i915#3591]) -> [PASS][260]
   [259]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-dg1-12/igt@i915_pm_rc6_residency@rc6-idle@rcs0.html
   [260]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg1-15/igt@i915_pm_rc6_residency@rc6-idle@rcs0.html

  * igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0-hflip-async-flip:
    - shard-mtlp:         [FAIL][261] ([i915#3743]) -> [PASS][262]
   [261]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-mtlp-1/igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0-hflip-async-flip.html
   [262]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-3/igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0-hflip-async-flip.html

  * igt@kms_cursor_crc@cursor-suspend@pipe-a-hdmi-a-2:
    - shard-rkl:          [INCOMPLETE][263] -> [PASS][264]
   [263]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-rkl-6/igt@kms_cursor_crc@cursor-suspend@pipe-a-hdmi-a-2.html
   [264]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-rkl-1/igt@kms_cursor_crc@cursor-suspend@pipe-a-hdmi-a-2.html

  * igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size:
    - shard-glk:          [FAIL][265] ([i915#2346]) -> [PASS][266]
   [265]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-glk3/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size.html
   [266]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-glk6/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size.html

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-shrfb-plflip-blt:
    - shard-dg2:          [FAIL][267] ([i915#6880]) -> [PASS][268] +1 other test pass
   [267]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-dg2-5/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-shrfb-plflip-blt.html
   [268]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-10/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-shrfb-plflip-blt.html

  * igt@perf_pmu@busy-double-start@vcs1:
    - shard-mtlp:         [FAIL][269] ([i915#4349]) -> [PASS][270] +2 other tests pass
   [269]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-mtlp-3/igt@perf_pmu@busy-double-start@vcs1.html
   [270]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-4/igt@perf_pmu@busy-double-start@vcs1.html

  * igt@perf_pmu@most-busy-idle-check-all@rcs0:
    - shard-dg2:          [FAIL][271] ([i915#5234]) -> [PASS][272]
   [271]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-dg2-1/igt@perf_pmu@most-busy-idle-check-all@rcs0.html
   [272]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-1/igt@perf_pmu@most-busy-idle-check-all@rcs0.html
    - shard-dg1:          [FAIL][273] ([i915#5234]) -> [PASS][274]
   [273]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-dg1-19/igt@perf_pmu@most-busy-idle-check-all@rcs0.html
   [274]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg1-16/igt@perf_pmu@most-busy-idle-check-all@rcs0.html
    - shard-mtlp:         [FAIL][275] ([i915#5234]) -> [PASS][276]
   [275]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-mtlp-1/igt@perf_pmu@most-busy-idle-check-all@rcs0.html
   [276]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-5/igt@perf_pmu@most-busy-idle-check-all@rcs0.html

  * igt@syncobj_wait@invalid-wait-illegal-handle:
    - shard-mtlp:         [DMESG-WARN][277] ([i915#2017]) -> [PASS][278]
   [277]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-mtlp-1/igt@syncobj_wait@invalid-wait-illegal-handle.html
   [278]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-1/igt@syncobj_wait@invalid-wait-illegal-handle.html

  * igt@sysfs_heartbeat_interval@nopreempt@vcs0:
    - shard-mtlp:         [FAIL][279] ([i915#6015]) -> [PASS][280] +1 other test pass
   [279]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-mtlp-5/igt@sysfs_heartbeat_interval@nopreempt@vcs0.html
   [280]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-8/igt@sysfs_heartbeat_interval@nopreempt@vcs0.html

  * igt@sysfs_timeslice_duration@timeout@vecs0:
    - shard-mtlp:         [TIMEOUT][281] ([i915#6950]) -> [PASS][282]
   [281]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-mtlp-6/igt@sysfs_timeslice_duration@timeout@vecs0.html
   [282]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-1/igt@sysfs_timeslice_duration@timeout@vecs0.html

  
#### Warnings ####

  * igt@gem_lmem_swapping@heavy-verify-random-ccs@lmem0:
    - shard-dg1:          [SKIP][283] ([i915#4565]) -> [SKIP][284] ([i915#4423] / [i915#4565])
   [283]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-dg1-13/igt@gem_lmem_swapping@heavy-verify-random-ccs@lmem0.html
   [284]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg1-14/igt@gem_lmem_swapping@heavy-verify-random-ccs@lmem0.html

  * igt@i915_pm_rc6_residency@media-rc6-accuracy:
    - shard-mtlp:         [SKIP][285] ([fdo#109289]) -> [SKIP][286] ([i915#8403])
   [285]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-mtlp-8/igt@i915_pm_rc6_residency@media-rc6-accuracy.html
   [286]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-4/igt@i915_pm_rc6_residency@media-rc6-accuracy.html

  * igt@i915_pm_rc6_residency@rc6-idle@rcs0:
    - shard-tglu:         [WARN][287] ([i915#2681]) -> [FAIL][288] ([i915#2681] / [i915#3591])
   [287]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-tglu-7/igt@i915_pm_rc6_residency@rc6-idle@rcs0.html
   [288]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-tglu-3/igt@i915_pm_rc6_residency@rc6-idle@rcs0.html

  * igt@i915_suspend@basic-s3-without-i915:
    - shard-rkl:          [FAIL][289] ([fdo#103375]) -> [INCOMPLETE][290] ([i915#4817])
   [289]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-rkl-6/igt@i915_suspend@basic-s3-without-i915.html
   [290]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-rkl-7/igt@i915_suspend@basic-s3-without-i915.html

  * igt@kms_async_flips@crc@pipe-a-edp-1:
    - shard-mtlp:         [DMESG-FAIL][291] ([i915#8561]) -> [DMESG-FAIL][292] ([i915#1982] / [i915#8561])
   [291]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-mtlp-8/igt@kms_async_flips@crc@pipe-a-edp-1.html
   [292]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-5/igt@kms_async_flips@crc@pipe-a-edp-1.html

  * igt@kms_ccs@pipe-b-bad-pixel-format-4_tiled_mtl_rc_ccs_cc:
    - shard-dg1:          [SKIP][293] ([i915#5354] / [i915#6095]) -> [SKIP][294] ([i915#4423] / [i915#5354] / [i915#6095])
   [293]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-dg1-15/igt@kms_ccs@pipe-b-bad-pixel-format-4_tiled_mtl_rc_ccs_cc.html
   [294]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg1-18/igt@kms_ccs@pipe-b-bad-pixel-format-4_tiled_mtl_rc_ccs_cc.html

  * igt@kms_color@degamma@pipe-a:
    - shard-mtlp:         [DMESG-FAIL][295] ([i915#2017]) -> [FAIL][296] ([i915#9257])
   [295]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-mtlp-1/igt@kms_color@degamma@pipe-a.html
   [296]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-mtlp-4/igt@kms_color@degamma@pipe-a.html

  * igt@kms_content_protection@srm@pipe-a-dp-1:
    - shard-apl:          [TIMEOUT][297] ([i915#7173]) -> [FAIL][298] ([i915#7173] / [i915#7181])
   [297]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-apl4/igt@kms_content_protection@srm@pipe-a-dp-1.html
   [298]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-apl2/igt@kms_content_protection@srm@pipe-a-dp-1.html

  * igt@kms_content_protection@type1:
    - shard-dg2:          [SKIP][299] ([i915#7118]) -> [SKIP][300] ([i915#7118] / [i915#7162]) +1 other test skip
   [299]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-dg2-1/igt@kms_content_protection@type1.html
   [300]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg2-11/igt@kms_content_protection@type1.html

  * igt@kms_fbcon_fbt@psr-suspend:
    - shard-rkl:          [SKIP][301] ([i915#3955]) -> [SKIP][302] ([fdo#110189] / [i915#3955]) +1 other test skip
   [301]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-rkl-6/igt@kms_fbcon_fbt@psr-suspend.html
   [302]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-rkl-2/igt@kms_fbcon_fbt@psr-suspend.html

  * igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-indfb-draw-blt:
    - shard-dg1:          [SKIP][303] ([i915#3458]) -> [SKIP][304] ([i915#3458] / [i915#4423])
   [303]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-dg1-13/igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-indfb-draw-blt.html
   [304]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg1-18/igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-indfb-draw-blt.html

  * igt@kms_psr@primary_page_flip:
    - shard-dg1:          [SKIP][305] ([i915#1072] / [i915#4078]) -> [SKIP][306] ([i915#1072])
   [305]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13599/shard-dg1-18/igt@kms_psr@primary_page_flip.html
   [306]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/shard-dg1-15/igt@kms_psr@primary_page_flip.html

  
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  [fdo#103375]: https://bugs.freedesktop.org/show_bug.cgi?id=103375
  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [fdo#109274]: https://bugs.freedesktop.org/show_bug.cgi?id=109274
  [fdo#109280]: https://bugs.freedesktop.org/show_bug.cgi?id=109280
  [fdo#109289]: https://bugs.freedesktop.org/show_bug.cgi?id=109289
  [fdo#109309]: https://bugs.freedesktop.org/show_bug.cgi?id=109309
  [fdo#109315]: https://bugs.freedesktop.org/show_bug.cgi?id=109315
  [fdo#110189]: https://bugs.freedesktop.org/show_bug.cgi?id=110189
  [fdo#110723]: https://bugs.freedesktop.org/show_bug.cgi?id=110723
  [fdo#111614]: https://bugs.freedesktop.org/show_bug.cgi?id=111614
  [fdo#111615]: https://bugs.freedesktop.org/show_bug.cgi?id=111615
  [fdo#111767]: https://bugs.freedesktop.org/show_bug.cgi?id=111767
  [fdo#111825]: https://bugs.freedesktop.org/show_bug.cgi?id=111825
  [fdo#111827]: https://bugs.freedesktop.org/show_bug.cgi?id=111827
  [i915#1072]: https://gitlab.freedesktop.org/drm/intel/issues/1072
  [i915#1099]: https://gitlab.freedesktop.org/drm/intel/issues/1099
  [i915#1825]: https://gitlab.freedesktop.org/drm/intel/issues/1825
  [i915#1982]: https://gitlab.freedesktop.org/drm/intel/issues/1982
  [i915#2017]: https://gitlab.freedesktop.org/drm/intel/issues/2017
  [i915#2122]: https://gitlab.freedesktop.org/drm/intel/issues/2122
  [i915#2346]: https://gitlab.freedesktop.org/drm/intel/issues/2346
  [i915#2410]: https://gitlab.freedesktop.org/drm/intel/issues/2410
  [i915#2437]: https://gitlab.freedesktop.org/drm/intel/issues/2437
  [i915#2575]: https://gitlab.freedesktop.org/drm/intel/issues/2575
  [i915#2672]: https://gitlab.freedesktop.org/drm/intel/issues/2672
  [i915#2681]: https://gitlab.freedesktop.org/drm/intel/issues/2681
  [i915#280]: https://gitlab.freedesktop.org/drm/intel/issues/280
  [i915#2842]: https://gitlab.freedesktop.org/drm/intel/issues/2842
  [i915#2856]: https://gitlab.freedesktop.org/drm/intel/issues/2856
  [i915#3023]: https://gitlab.freedesktop.org/drm/intel/issues/3023
  [i915#3281]: https://gitlab.freedesktop.org/drm/intel/issues/3281
  [i915#3282]: https://gitlab.freedesktop.org/drm/intel/issues/3282
  [i915#3297]: https://gitlab.freedesktop.org/drm/intel/issues/3297
  [i915#3299]: https://gitlab.freedesktop.org/drm/intel/issues/3299
  [i915#3318]: https://gitlab.freedesktop.org/drm/intel/issues/3318
  [i915#3359]: https://gitlab.freedesktop.org/drm/intel/issues/3359
  [i915#3458]: https://gitlab.freedesktop.org/drm/intel/issues/3458
  [i915#3539]: https://gitlab.freedesktop.org/drm/intel/issues/3539
  [i915#3546]: https://gitlab.freedesktop.org/drm/intel/issues/3546
  [i915#3555]: https://gitlab.freedesktop.org/drm/intel/issues/3555
  [i915#3591]: https://gitlab.freedesktop.org/drm/intel/issues/3591
  [i915#3637]: https://gitlab.freedesktop.org/drm/intel/issues/3637
  [i915#3638]: https://gitlab.freedesktop.org/drm/intel/issues/3638
  [i915#3689]: https://gitlab.freedesktop.org/drm/intel/issues/3689
  [i915#3708]: https://gitlab.freedesktop.org/drm/intel/issues/3708
  [i915#3734]: https://gitlab.freedesktop.org/drm/intel/issues/3734
  [i915#3743]: https://gitlab.freedesktop.org/drm/intel/issues/3743
  [i915#3840]: https://gitlab.freedesktop.org/drm/intel/issues/3840
  [i915#3886]: https://gitlab.freedesktop.org/drm/intel/issues/3886
  [i915#3955]: https://gitlab.freedesktop.org/drm/intel/issues/3955
  [i915#404]: https://gitlab.freedesktop.org/drm/intel/issues/404
  [i915#4070]: https://gitlab.freedesktop.org/drm/intel/issues/4070
  [i915#4077]: https://gitlab.freedesktop.org/drm/intel/issues/4077
  [i915#4078]: https://gitlab.freedesktop.org/drm/intel/issues/4078
  [i915#4079]: https://gitlab.freedesktop.org/drm/intel/issues/4079
  [i915#4083]: https://gitlab.freedesktop.org/drm/intel/issues/4083
  [i915#4098]: https://gitlab.freedesktop.org/drm/intel/issues/4098
  [i915#4103]: https://gitlab.freedesktop.org/drm/intel/issues/4103
  [i915#4213]: https://gitlab.freedesktop.org/drm/intel/issues/4213
  [i915#4235]: https://gitlab.freedesktop.org/drm/intel/issues/4235
  [i915#4270]: https://gitlab.freedesktop.org/drm/intel/issues/4270
  [i915#433]: https://gitlab.freedesktop.org/drm/intel/issues/433
  [i915#4349]: https://gitlab.freedesktop.org/drm/intel/issues/4349
  [i915#4391]: https://gitlab.freedesktop.org/drm/intel/issues/4391
  [i915#4423]: https://gitlab.freedesktop.org/drm/intel/issues/4423
  [i915#4475]: https://gitlab.freedesktop.org/drm/intel/issues/4475
  [i915#4525]: https://gitlab.freedesktop.org/drm/intel/issues/4525
  [i915#4537]: https://gitlab.freedesktop.org/drm/intel/issues/4537
  [i915#4538]: https://gitlab.freedesktop.org/drm/intel/issues/4538
  [i915#4565]: https://gitlab.freedesktop.org/drm/intel/issues/4565
  [i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613
  [i915#4812]: https://gitlab.freedesktop.org/drm/intel/issues/4812
  [i915#4816]: https://gitlab.freedesktop.org/drm/intel/issues/4816
  [i915#4817]: https://gitlab.freedesktop.org/drm/intel/issues/4817
  [i915#4852]: https://gitlab.freedesktop.org/drm/intel/issues/4852
  [i915#4860]: https://gitlab.freedesktop.org/drm/intel/issues/4860
  [i915#4936]: https://gitlab.freedesktop.org/drm/intel/issues/4936
  [i915#5138]: https://gitlab.freedesktop.org/drm/intel/issues/5138
  [i915#5176]: https://gitlab.freedesktop.org/drm/intel/issues/5176
  [i915#5190]: https://gitlab.freedesktop.org/drm/intel/issues/5190
  [i915#5234]: https://gitlab.freedesktop.org/drm/intel/issues/5234
  [i915#5235]: https://gitlab.freedesktop.org/drm/intel/issues/5235
  [i915#5286]: https://gitlab.freedesktop.org/drm/intel/issues/5286
  [i915#5289]: https://gitlab.freedesktop.org/drm/intel/issues/5289
  [i915#5325]: https://gitlab.freedesktop.org/drm/intel/issues/5325
  [i915#533]: https://gitlab.freedesktop.org/drm/intel/issues/533
  [i915#5354]: https://gitlab.freedesktop.org/drm/intel/issues/5354
  [i915#5460]: https://gitlab.freedesktop.org/drm/intel/issues/5460
  [i915#5465]: https://gitlab.freedesktop.org/drm/intel/issues/5465
  [i915#5493]: https://gitlab.freedesktop.org/drm/intel/issues/5493
  [i915#5784]: https://gitlab.freedesktop.org/drm/intel/issues/5784
  [i915#6015]: https://gitlab.freedesktop.org/drm/intel/issues/6015
  [i915#6095]: https://gitlab.freedesktop.org/drm/intel/issues/6095
  [i915#6121]: https://gitlab.freedesktop.org/drm/intel/issues/6121
  [i915#6227]: https://gitlab.freedesktop.org/drm/intel/issues/6227
  [i915#6268]: https://gitlab.freedesktop.org/drm/intel/issues/6268
  [i915#6311]: https://gitlab.freedesktop.org/drm/intel/issues/6311
  [i915#6334]: https://gitlab.freedesktop.org/drm/intel/issues/6334
  [i915#6524]: https://gitlab.freedesktop.org/drm/intel/issues/6524
  [i915#658]: https://gitlab.freedesktop.org/drm/intel/issues/658
  [i915#6621]: https://gitlab.freedesktop.org/drm/intel/issues/6621
  [i915#6768]: https://gitlab.freedesktop.org/drm/intel/issues/6768
  [i915#6805]: https://gitlab.freedesktop.org/drm/intel/issues/6805
  [i915#6880]: https://gitlab.freedesktop.org/drm/intel/issues/6880
  [i915#6944]: https://gitlab.freedesktop.org/drm/intel/issues/6944
  [i915#6950]: https://gitlab.freedesktop.org/drm/intel/issues/6950
  [i915#7061]: https://gitlab.freedesktop.org/drm/intel/issues/7061
  [i915#7069]: https://gitlab.freedesktop.org/drm/intel/issues/7069
  [i915#7118]: https://gitlab.freedesktop.org/drm/intel/issues/7118
  [i915#7162]: https://gitlab.freedesktop.org/drm/intel/issues/7162
  [i915#7173]: https://gitlab.freedesktop.org/drm/intel/issues/7173
  [i915#7181]: https://gitlab.freedesktop.org/drm/intel/issues/7181
  [i915#7213]: https://gitlab.freedesktop.org/drm/intel/issues/7213
  [i915#7297]: https://gitlab.freedesktop.org/drm/intel/issues/7297
  [i915#7697]: https://gitlab.freedesktop.org/drm/intel/issues/7697
  [i915#7711]: https://gitlab.freedesktop.org/drm/intel/issues/7711
  [i915#7765]: https://gitlab.freedesktop.org/drm/intel/issues/7765
  [i915#7793]: https://gitlab.freedesktop.org/drm/intel/issues/7793
  [i915#7828]: https://gitlab.freedesktop.org/drm/intel/issues/7828
  [i915#79]: https://gitlab.freedesktop.org/drm/intel/issues/79
  [i915#7975]: https://gitlab.freedesktop.org/drm/intel/issues/7975
  [i915#8213]: https://gitlab.freedesktop.org/drm/intel/issues/8213
  [i915#8228]: https://gitlab.freedesktop.org/drm/intel/issues/8228
  [i915#8247]: https://gitlab.freedesktop.org/drm/intel/issues/8247
  [i915#8292]: https://gitlab.freedesktop.org/drm/intel/issues/8292
  [i915#8332]: https://gitlab.freedesktop.org/drm/intel/issues/8332
  [i915#8403]: https://gitlab.freedesktop.org/drm/intel/issues/8403
  [i915#8411]: https://gitlab.freedesktop.org/drm/intel/issues/8411
  [i915#8414]: https://gitlab.freedesktop.org/drm/intel/issues/8414
  [i915#8456]: https://gitlab.freedesktop.org/drm/intel/issues/8456
  [i915#8466]: https://gitlab.freedesktop.org/drm/intel/issues/8466
  [i915#8489]: https://gitlab.freedesktop.org/drm/intel/issues/8489
  [i915#8502]: https://gitlab.freedesktop.org/drm/intel/issues/8502
  [i915#8555]: https://gitlab.freedesktop.org/drm/intel/issues/8555
  [i915#8561]: https://gitlab.freedesktop.org/drm/intel/issues/8561
  [i915#8617]: https://gitlab.freedesktop.org/drm/intel/issues/8617
  [i915#8623]: https://gitlab.freedesktop.org/drm/intel/issues/8623
  [i915#8661]: https://gitlab.freedesktop.org/drm/intel/issues/8661
  [i915#8708]: https://gitlab.freedesktop.org/drm/intel/issues/8708
  [i915#8709]: https://gitlab.freedesktop.org/drm/intel/issues/8709
  [i915#8810]: https://gitlab.freedesktop.org/drm/intel/issues/8810
  [i915#8821]: https://gitlab.freedesktop.org/drm/intel/issues/8821
  [i915#8841]: https://gitlab.freedesktop.org/drm/intel/issues/8841
  [i915#8898]: https://gitlab.freedesktop.org/drm/intel/issues/8898
  [i915#8957]: https://gitlab.freedesktop.org/drm/intel/issues/8957
  [i915#8962]: https://gitlab.freedesktop.org/drm/intel/issues/8962
  [i915#9051]: https://gitlab.freedesktop.org/drm/intel/issues/9051
  [i915#9121]: https://gitlab.freedesktop.org/drm/intel/issues/9121
  [i915#9138]: https://gitlab.freedesktop.org/drm/intel/issues/9138
  [i915#9226]: https://gitlab.freedesktop.org/drm/intel/issues/9226
  [i915#9227]: https://gitlab.freedesktop.org/drm/intel/issues/9227
  [i915#9257]: https://gitlab.freedesktop.org/drm/intel/issues/9257
  [i915#9261]: https://gitlab.freedesktop.org/drm/intel/issues/9261


Build changes
-------------

  * CI: CI-20190529 -> None
  * IGT: IGT_7468 -> IGTPW_9720
  * Piglit: piglit_4509 -> None

  CI-20190529: 20190529
  CI_DRM_13599: 58fe10f34e80d0eeb5609128faa135260623a715 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_9720: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/index.html
  IGT_7468: 7468
  piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9720/index.html

[-- Attachment #2: Type: text/html, Size: 102139 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [igt-dev] [i-g-t V2 1/7] tests/intel/pm: Rename i915_pm_backlight to kms_pm_backlight
  2023-09-05 12:53 ` [igt-dev] [i-g-t V2 1/7] tests/intel/pm: Rename i915_pm_backlight to kms_pm_backlight Bhanuprakash Modem
@ 2023-09-06  7:53   ` Sharma, Swati2
  2023-09-06  9:33     ` Mauro Carvalho Chehab
  0 siblings, 1 reply; 18+ messages in thread
From: Sharma, Swati2 @ 2023-09-06  7:53 UTC (permalink / raw)
  To: Bhanuprakash Modem, igt-dev

Hi Bhanu,

On 05-Sep-23 6:23 PM, Bhanuprakash Modem wrote:
> As i915_pm_backlight is a display specific test, rename it with
> the "kms_" prefix, i.e kms_pm_backlight.
> 
> V2: - Rebase
> 
> Cc: Swati Sharma <swati2.sharma@intel.com>
> Signed-off-by: Bhanuprakash Modem <bhanuprakash.modem@intel.com>
> ---
>   tests/intel-ci/fast-feedback.testlist         |  2 +-
>   ...i915_pm_backlight.c => kms_pm_backlight.c} | 25 ++-----------------
>   tests/meson.build                             |  2 +-
>   3 files changed, 4 insertions(+), 25 deletions(-)
>   rename tests/intel/{i915_pm_backlight.c => kms_pm_backlight.c} (87%)
> 
> diff --git a/tests/intel-ci/fast-feedback.testlist b/tests/intel-ci/fast-feedback.testlist
> index 841051058..51010a2f7 100644
> --- a/tests/intel-ci/fast-feedback.testlist
> +++ b/tests/intel-ci/fast-feedback.testlist
> @@ -118,12 +118,12 @@ igt@kms_pipe_crc_basic@nonblocking-crc
>   igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence
>   igt@kms_pipe_crc_basic@read-crc
>   igt@kms_pipe_crc_basic@read-crc-frame-sequence
> +igt@kms_pm_backlight@basic-brightness
>   igt@kms_psr@primary_page_flip
>   igt@kms_psr@cursor_plane_move
>   igt@kms_psr@sprite_plane_onoff
>   igt@kms_psr@primary_mmap_gtt
>   igt@kms_setmode@basic-clone-single-crtc
> -igt@i915_pm_backlight@basic-brightness
>   igt@i915_pm_rpm@basic-pci-d3-state
>   igt@i915_pm_rpm@basic-rte
>   igt@i915_pm_rps@basic-api
> diff --git a/tests/intel/i915_pm_backlight.c b/tests/intel/kms_pm_backlight.c
> similarity index 87%
> rename from tests/intel/i915_pm_backlight.c
> rename to tests/intel/kms_pm_backlight.c
> index 3c73b054b..eca385518 100644
> --- a/tests/intel/i915_pm_backlight.c
> +++ b/tests/intel/kms_pm_backlight.c
> @@ -1,27 +1,6 @@
> +// SPDX-License-Identifier: MIT
>   /*
> - * Copyright © 2015 Intel Corporation
> - *
> - * Permission is hereby granted, free of charge, to any person obtaining a
> - * copy of this software and associated documentation files (the "Software"),
> - * to deal in the Software without restriction, including without limitation
> - * the rights to use, copy, modify, merge, publish, distribute, sublicense,
> - * and/or sell copies of the Software, and to permit persons to whom the
> - * Software is furnished to do so, subject to the following conditions:
> - *
> - * The above copyright notice and this permission notice (including the next
> - * paragraph) shall be included in all copies or substantial portions of the
> - * Software.
> - *
> - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
> - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
> - * IN THE SOFTWARE.
> - *
> - * Author:
> - *    Antti Koskipaa <antti.koskipaa@linux.intel.com>
> + * Copyright © 2023 Intel Corporation
>    *
>    */

We can't remove old copyright. This has to remain same. With new IGT we 
are using SPDX, older IGT will continue using already existing copyright.

>   
> diff --git a/tests/meson.build b/tests/meson.build
> index aa8e3434c..442df7d84 100644
> --- a/tests/meson.build
> +++ b/tests/meson.build
> @@ -221,7 +221,6 @@ intel_i915_progs = [
>   	'i915_module_load',
>   	'i915_pciid',
>   	'i915_pipe_stress',
> -	'i915_pm_backlight',
>   	'i915_pm_freq_mult',
>   	'i915_pm_lpsp',
>   	'i915_pm_rpm',
> @@ -262,6 +261,7 @@ intel_kms_progs = [
>   	'kms_legacy_colorkey',
>   	'kms_mmap_write_crc',
>   	'kms_pipe_b_c_ivb',
> +	'kms_pm_backlight',
>   	'kms_psr',
>   	'kms_psr2_sf',
>   	'kms_psr2_su',

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [igt-dev] [i-g-t V2 2/7] tests/intel/kms_pm_backlight: Fix testplan documentation
  2023-09-05 12:53 ` [igt-dev] [i-g-t V2 2/7] tests/intel/kms_pm_backlight: Fix testplan documentation Bhanuprakash Modem
@ 2023-09-06  7:56   ` Sharma, Swati2
  0 siblings, 0 replies; 18+ messages in thread
From: Sharma, Swati2 @ 2023-09-06  7:56 UTC (permalink / raw)
  To: Bhanuprakash Modem, igt-dev

Hi Bhanu,

On 05-Sep-23 6:23 PM, Bhanuprakash Modem wrote:
> As kms_pm_backlight is moved to display, update the test
> documentation according to the kms testplan kms_test_config.json
> 
> Cc: Swati Sharma <swati2.sharma@intel.com>
> Signed-off-by: Bhanuprakash Modem <bhanuprakash.modem@intel.com>
> ---
>   tests/intel/kms_pm_backlight.c | 40 +++++++++++++++++++++++++---------
>   1 file changed, 30 insertions(+), 10 deletions(-)
> 
> diff --git a/tests/intel/kms_pm_backlight.c b/tests/intel/kms_pm_backlight.c
> index eca385518..7a2a4e06f 100644
> --- a/tests/intel/kms_pm_backlight.c
> +++ b/tests/intel/kms_pm_backlight.c
> @@ -16,29 +16,49 @@
>   #include "igt_device.h"
>   #include "igt_device_scan.h"
>   /**
> - * TEST: i915 pm backlight
> + * TEST: kms pm backlight
> + * Category: Display
>    * Description: Basic backlight sysfs test
> - * Feature: backlight
>    *
>    * SUBTEST: bad-brightness
> - * Description: test the bad brightness.
> + * Description: Test the bad brightness.
> + * Driver requirement: i915
> + * Functionality: backlight
> + * Mega feature: Display Power
>    * Run type: FULL
> + * Test category: functionality test
>    *
>    * SUBTEST: basic-brightness
> - * Description: test the basic brightness.
> + * Description: Test the basic brightness.
> + * Driver requirement: i915
> + * Functionality: backlight
> + * Mega feature: Display Power
>    * Run type: BAT
> + * Test category: functionality test
>    *
>    * SUBTEST: fade
> - * Description: test basic fade.
> - * Run type: FULL
> + * Description: Test basic fade.
> + * Driver requirement: i915
> + * Functionality: backlight
> + * Mega feature: Display Power
> + * Run type: BAT

Run type should be FULL.

> + * Test category: functionality test
>    *
>    * SUBTEST: fade-with-dpms
> - * Description: test the fade with DPMS.
> - * Run type: FULL
> + * Description: Test the fade with DPMS.
> + * Driver requirement: i915
> + * Functionality: dpms, backlight
> + * Mega feature: Display Power
> + * Run type: BAT

Run type should be FULL.

> + * Test category: functionality test
>    *
>    * SUBTEST: fade-with-suspend
> - * Description: test the fade with suspend.
> - * Run type: FULL
> + * Description: Test the fade with suspend.
> + * Driver requirement: i915
> + * Functionality: backlight, suspend
> + * Mega feature: Display Power
> + * Run type: BAT

Run type should be FULL.

> + * Test category: functionality test
>    */
>   
>   struct context {

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [igt-dev] [i-g-t V2 3/7] tests/intel/pm: Rename i915_pm_dc to kms_pm_dc
  2023-09-05 12:53 ` [igt-dev] [i-g-t V2 3/7] tests/intel/pm: Rename i915_pm_dc to kms_pm_dc Bhanuprakash Modem
@ 2023-09-06  7:59   ` Sharma, Swati2
  0 siblings, 0 replies; 18+ messages in thread
From: Sharma, Swati2 @ 2023-09-06  7:59 UTC (permalink / raw)
  To: Bhanuprakash Modem, igt-dev

Hi Bhanu,

On 05-Sep-23 6:23 PM, Bhanuprakash Modem wrote:
> As i915_pm_dc is a display specific test, rename it with
> the "kms_" prefix, i.e kms_pm_dc.
> 
> V2: - Rebase
> 
> Cc: Swati Sharma <swati2.sharma@intel.com>
> Signed-off-by: Bhanuprakash Modem <bhanuprakash.modem@intel.com>
> ---
>   tests/intel/{i915_pm_dc.c => kms_pm_dc.c} | 22 ++--------------------
>   tests/meson.build                         |  2 +-
>   2 files changed, 3 insertions(+), 21 deletions(-)
>   rename tests/intel/{i915_pm_dc.c => kms_pm_dc.c} (94%)
> 
> diff --git a/tests/intel/i915_pm_dc.c b/tests/intel/kms_pm_dc.c
> similarity index 94%
> rename from tests/intel/i915_pm_dc.c
> rename to tests/intel/kms_pm_dc.c
> index 13ae31583..b5b38c976 100644
> --- a/tests/intel/i915_pm_dc.c
> +++ b/tests/intel/kms_pm_dc.c
> @@ -1,24 +1,6 @@
> +// SPDX-License-Identifier: MIT
>   /*
> - * Copyright © 2018 Intel Corporation
> - *
> - * Permission is hereby granted, free of charge, to any person obtaining a
> - * copy of this software and associated documentation files (the "Software"),
> - * to deal in the Software without restriction, including without limitation
> - * the rights to use, copy, modify, merge, publish, distribute, sublicense,
> - * and/or sell copies of the Software, and to permit persons to whom the
> - * Software is furnished to do so, subject to the following conditions:
> - *
> - * The above copyright notice and this permission notice (including the next
> - * paragraph) shall be included in all copies or substantial portions of the
> - * Software.
> - *
> - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
> - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
> - * IN THE SOFTWARE.
> + * Copyright © 2023 Intel Corporation
>    *
>    */

Same comment applies here, don't change copyright.

>   
> diff --git a/tests/meson.build b/tests/meson.build
> index 442df7d84..ea8b60282 100644
> --- a/tests/meson.build
> +++ b/tests/meson.build
> @@ -224,7 +224,6 @@ intel_i915_progs = [
>   	'i915_pm_freq_mult',
>   	'i915_pm_lpsp',
>   	'i915_pm_rpm',
> -	'i915_pm_dc',
>   	'i915_pm_rc6_residency',
>   	'i915_pm_rps',
>   	'i915_pm_sseu',
> @@ -262,6 +261,7 @@ intel_kms_progs = [
>   	'kms_mmap_write_crc',
>   	'kms_pipe_b_c_ivb',
>   	'kms_pm_backlight',
> +	'kms_pm_dc',
>   	'kms_psr',
>   	'kms_psr2_sf',
>   	'kms_psr2_su',

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [igt-dev] [i-g-t V2 4/7] tests/intel/kms_pm_dc: Fix testplan documentation
  2023-09-05 12:53 ` [igt-dev] [i-g-t V2 4/7] tests/intel/kms_pm_dc: Fix testplan documentation Bhanuprakash Modem
@ 2023-09-06  8:07   ` Sharma, Swati2
  0 siblings, 0 replies; 18+ messages in thread
From: Sharma, Swati2 @ 2023-09-06  8:07 UTC (permalink / raw)
  To: Bhanuprakash Modem, igt-dev

LGTM

Reviewed-by: Swati Sharma <swati2.sharma@intel.com>

On 05-Sep-23 6:23 PM, Bhanuprakash Modem wrote:
> As kms_pm_dc is moved to display, update the test documentation
> according to the kms testplan kms_test_config.json
> 
> Cc: Swati Sharma <swati2.sharma@intel.com>
> Signed-off-by: Bhanuprakash Modem <bhanuprakash.modem@intel.com>
> ---
>   tests/intel/kms_pm_dc.c | 66 ++++++++++++++++++++++++++++-------------
>   1 file changed, 45 insertions(+), 21 deletions(-)
> 
> diff --git a/tests/intel/kms_pm_dc.c b/tests/intel/kms_pm_dc.c
> index b5b38c976..dd810c0c2 100644
> --- a/tests/intel/kms_pm_dc.c
> +++ b/tests/intel/kms_pm_dc.c
> @@ -19,45 +19,69 @@
>   #include "time.h"
>   #include "igt_pm.h"
>   /**
> - * TEST: i915 pm dc
> + * TEST: kms pm dc
> + * Category: Display
>    * Description: Tests to validate display power DC states.
> - * Run type: FULL
>    *
>    * SUBTEST: dc3co-vpb-simulation
> - * Description:
> - *   In this test we make sure that system enters DC3CO when PSR2 is active and system is in SLEEP
> - *   state
> - * Feature: dc3co, pm_dc
> + * Description: Make sure that system enters DC3CO when PSR2 is active and system
> + *              is in SLEEP state
> + * Driver requirement: i915
> + * Functionality: dc3co, pm_dc, psr2
> + * Mega feature: Display Power
> + * Run type: FULL
> + * Test category: functionality test
>    *
>    * SUBTEST: dc5-dpms
> - * Description:
> - *   This test validates display engine entry to DC5 state while all connectors's DPMS property
> - *   set to OFF
> - * Feature: pm_dc
> + * Description: Validate display engine entry to DC5 state while all connectors's
> + *              DPMS property set to OFF
> + * Driver requirement: i915
> + * Functionality: dpms, pm_dc
> + * Mega feature: Display Power
> + * Run type: FULL
> + * Test category: functionality test
>    *
>    * SUBTEST: dc5-dpms-negative
> - * Description:
> - *   This test validates negative scenario of DC5 display engine entry to DC5 state while all
> - *   connectors's DPMS property set to ON
> - * Feature: pm_dc
> + * Description: Validate negative scenario of DC5 display engine entry to DC5 state
> + *              while all connectors's DPMS property set to ON
> + * Driver requirement: i915
> + * Functionality: dpms, pm_dc
> + * Mega feature: Display Power
> + * Run type: FULL
> + * Test category: functionality test
>    *
>    * SUBTEST: dc5-psr
>    * Description: This test validates display engine entry to DC5 state while PSR is active
> - * Feature: pm_dc
> + * Driver requirement: i915
> + * Functionality: pm_dc, psr
> + * Mega feature: Display Power
> + * Run type: FULL
> + * Test category: functionality test
>    *
>    * SUBTEST: dc6-dpms
> - * Description:
> - *   This test validates display engine entry to DC6 state while all connectors's DPMS property
> - *   set to OFF
> - * Feature: pm_dc
> + * Description: Validate display engine entry to DC6 state while all connectors's
> + *              DPMS property set to OFF
> + * Driver requirement: i915
> + * Functionality: dpms, pm_dc
> + * Mega feature: Display Power
> + * Run type: FULL
> + * Test category: functionality test
>    *
>    * SUBTEST: dc6-psr
>    * Description: This test validates display engine entry to DC6 state while PSR is active
> - * Feature: pm_dc
> + * Driver requirement: i915
> + * Functionality: pm_dc, psr
> + * Mega feature: Display Power
> + * Run type: FULL
> + * Test category: functionality test
>    *
>    * SUBTEST: dc9-dpms
>    * Description: This test validates display engine entry to DC9 state
> - * Feature: pm_dc
> + * Driver requirement: i915
> + * Functionality: dpms, pm_dc
> + * Mega feature: Display Power
> + * Run type: FULL
> + * Test category: functionality test
>    */
>   
>   /* DC State Flags */

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [igt-dev] [i-g-t V2 5/7] tests/intel/pm: Rename i915_pm_lpsp to kms_pm_lpsp
  2023-09-05 12:53 ` [igt-dev] [i-g-t V2 5/7] tests/intel/pm: Rename i915_pm_lpsp to kms_pm_lpsp Bhanuprakash Modem
@ 2023-09-06  8:08   ` Sharma, Swati2
  0 siblings, 0 replies; 18+ messages in thread
From: Sharma, Swati2 @ 2023-09-06  8:08 UTC (permalink / raw)
  To: Bhanuprakash Modem, igt-dev

Hi Bhanu,

On 05-Sep-23 6:23 PM, Bhanuprakash Modem wrote:
> As i915_pm_lpsp is a display specific test, rename it with
> the "kms_" prefix, i.e kms_pm_lpsp.
> 
> V2: - Rebase
> 
> Cc: Swati Sharma <swati2.sharma@intel.com>
> Signed-off-by: Bhanuprakash Modem <bhanuprakash.modem@intel.com>
> ---
>   tests/intel/{i915_pm_lpsp.c => kms_pm_lpsp.c} | 24 ++-----------------
>   tests/meson.build                             |  2 +-
>   2 files changed, 3 insertions(+), 23 deletions(-)
>   rename tests/intel/{i915_pm_lpsp.c => kms_pm_lpsp.c} (82%)
> 
> diff --git a/tests/intel/i915_pm_lpsp.c b/tests/intel/kms_pm_lpsp.c
> similarity index 82%
> rename from tests/intel/i915_pm_lpsp.c
> rename to tests/intel/kms_pm_lpsp.c
> index 291e56674..0adcb8cc0 100644
> --- a/tests/intel/i915_pm_lpsp.c
> +++ b/tests/intel/kms_pm_lpsp.c
> @@ -1,26 +1,6 @@
> +// SPDX-License-Identifier: MIT
>   /*
> - * Copyright © 2013 Intel Corporation
> - *
> - * Permission is hereby granted, free of charge, to any person obtaining a
> - * copy of this software and associated documentation files (the "Software"),
> - * to deal in the Software without restriction, including without limitation
> - * the rights to use, copy, modify, merge, publish, distribute, sublicense,
> - * and/or sell copies of the Software, and to permit persons to whom the
> - * Software is furnished to do so, subject to the following conditions:
> - *
> - * The above copyright notice and this permission notice (including the next
> - * paragraph) shall be included in all copies or substantial portions of the
> - * Software.
> - *
> - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
> - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
> - * IN THE SOFTWARE.
> - *
> - * Author: Paulo Zanoni <paulo.r.zanoni@intel.com>
> + * Copyright © 2023 Intel Corporation
>    *
>    */

Same comment holds here too, don't remove copyright.

>   
> diff --git a/tests/meson.build b/tests/meson.build
> index ea8b60282..92729e0c3 100644
> --- a/tests/meson.build
> +++ b/tests/meson.build
> @@ -222,7 +222,6 @@ intel_i915_progs = [
>   	'i915_pciid',
>   	'i915_pipe_stress',
>   	'i915_pm_freq_mult',
> -	'i915_pm_lpsp',
>   	'i915_pm_rpm',
>   	'i915_pm_rc6_residency',
>   	'i915_pm_rps',
> @@ -262,6 +261,7 @@ intel_kms_progs = [
>   	'kms_pipe_b_c_ivb',
>   	'kms_pm_backlight',
>   	'kms_pm_dc',
> +	'kms_pm_lpsp',
>   	'kms_psr',
>   	'kms_psr2_sf',
>   	'kms_psr2_su',

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [igt-dev] [i-g-t V2 6/7] tests/intel/kms_pm_lpsp: Fix testplan documentation
  2023-09-05 12:53 ` [igt-dev] [i-g-t V2 6/7] tests/intel/kms_pm_lpsp: Fix testplan documentation Bhanuprakash Modem
@ 2023-09-06  8:12   ` Sharma, Swati2
  0 siblings, 0 replies; 18+ messages in thread
From: Sharma, Swati2 @ 2023-09-06  8:12 UTC (permalink / raw)
  To: Bhanuprakash Modem, igt-dev

LGTM

Reviewed-by: Swati Sharma <swati2.sharma@intel.com>

On 05-Sep-23 6:23 PM, Bhanuprakash Modem wrote:
> As kms_pm_lpsp is moved to display, update the test documentation
> according to the kms testplan kms_test_config.json
> 
> Cc: Swati Sharma <swati2.sharma@intel.com>
> Signed-off-by: Bhanuprakash Modem <bhanuprakash.modem@intel.com>
> ---
>   tests/intel/kms_pm_lpsp.c | 15 ++++++++++++---
>   1 file changed, 12 insertions(+), 3 deletions(-)
> 
> diff --git a/tests/intel/kms_pm_lpsp.c b/tests/intel/kms_pm_lpsp.c
> index 0adcb8cc0..407558a4f 100644
> --- a/tests/intel/kms_pm_lpsp.c
> +++ b/tests/intel/kms_pm_lpsp.c
> @@ -13,16 +13,25 @@
>   #include <fcntl.h>
>   #include <unistd.h>
>   /**
> - * TEST: i915 pm lpsp
> + * TEST: kms pm lpsp
>    * Description: These tests validates display Low Power Single Pipe configurations
> - * Feature: pm_lpsp
> - * Run type: FULL
> + * Category: Display
>    *
>    * SUBTEST: kms-lpsp
>    * Description: This test validates lpsp on all connected outputs on low power PIPE_A
> + * Driver requirement: i915
> + * Functionality: pm_lpsp
> + * Mega feature: Display Power
> + * Run type: FULL
> + * Test category: functionality test
>    *
>    * SUBTEST: screens-disabled
>    * Description: This test validates lpsp while all crtc are disabled
> + * Driver requirement: i915
> + * Functionality: pm_lpsp
> + * Mega feature: Display Power
> + * Run type: FULL
> + * Test category: functionality test
>    */
>   
>   #define MAX_SINK_LPSP_INFO_BUF_LEN	4096

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [igt-dev] [i-g-t V2 1/7] tests/intel/pm: Rename i915_pm_backlight to kms_pm_backlight
  2023-09-06  7:53   ` Sharma, Swati2
@ 2023-09-06  9:33     ` Mauro Carvalho Chehab
  0 siblings, 0 replies; 18+ messages in thread
From: Mauro Carvalho Chehab @ 2023-09-06  9:33 UTC (permalink / raw)
  To: Sharma, Swati2; +Cc: igt-dev

On Wed, 6 Sep 2023 13:23:24 +0530
"Sharma, Swati2" <swati2.sharma@intel.com> wrote:

> > --- a/tests/intel/i915_pm_backlight.c
> > +++ b/tests/intel/kms_pm_backlight.c
> > @@ -1,27 +1,6 @@
> > +// SPDX-License-Identifier: MIT
> >   /*
> > - * Copyright © 2015 Intel Corporation
> > - *
> > - * Permission is hereby granted, free of charge, to any person obtaining a
> > - * copy of this software and associated documentation files (the "Software"),
> > - * to deal in the Software without restriction, including without limitation
> > - * the rights to use, copy, modify, merge, publish, distribute, sublicense,
> > - * and/or sell copies of the Software, and to permit persons to whom the
> > - * Software is furnished to do so, subject to the following conditions:
> > - *
> > - * The above copyright notice and this permission notice (including the next
> > - * paragraph) shall be included in all copies or substantial portions of the
> > - * Software.
> > - *
> > - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> > - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> > - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
> > - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> > - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> > - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
> > - * IN THE SOFTWARE.
> > - *
> > - * Author:
> > - *    Antti Koskipaa <antti.koskipaa@linux.intel.com>
> > + * Copyright © 2023 Intel Corporation
> >    *
> >    */  
> 
> We can't remove old copyright. This has to remain same. With new IGT we 
> are using SPDX, older IGT will continue using already existing copyright.

I'm not a lawyer, but let me give my 2 cents here.

IMO, the best is to have a change like that on a separate patch, as this is
not related to "Rename i915_pm_backlight to kms_pm_backlight".

Now, the above changeset is actually doing two changes:

1. It is replacing a MIT text by a SPDX equivalent. This should be fine,
   provided that you keep the original copyright date - eventually adding
   2023 to it. So:

	 * Copyright © 2015 Intel Corporation
	 *
	 * Permission is hereby granted, free of charge, to any person obtaining a
	 * copy of this software and associated documentation files (the "Software"),
	 * to deal in the Software without restriction, including without limitation
	 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
	 * and/or sell copies of the Software, and to permit persons to whom the
	 * Software is furnished to do so, subject to the following conditions:
	 *
	 * The above copyright notice and this permission notice (including the next
	 * paragraph) shall be included in all copies or substantial portions of the
	 * Software.
	 *
	 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
	 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
	 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
	 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
	 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
	 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
	 * IN THE SOFTWARE.

   can be replaced by either:

	// SPDX-License-Identifier: MIT
	/* Copyright © 2015 Intel Corporation  */

   or:

	// SPDX-License-Identifier: MIT
	/* Copyright © 2015, 2023 Intel Corporation  */

2. It is also stripping authorship rights. Depending on the jurisdiction,
   authorship rights are explicitly protected. Laws may even prevent it to
   be sellable. They're also forever protected.

   So, for instance, even if you buy a picture from Salvador Dali, even
   buying its copyrights, you can't remove his signature and replace by
   yours.

   So, with regards to this change:
	
	- * Author:
	- *    Antti Koskipaa <antti.koskipaa@linux.intel.com>

   NACK.

Regards,
Mauro

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [igt-dev] [i-g-t V2 7/7] tests/intel/pm: Separate display specific tests from i915_pm_rpm
  2023-09-05 12:53 ` [igt-dev] [i-g-t V2 7/7] tests/intel/pm: Separate display specific tests from i915_pm_rpm Bhanuprakash Modem
@ 2023-09-06 13:35   ` Sharma, Swati2
  0 siblings, 0 replies; 18+ messages in thread
From: Sharma, Swati2 @ 2023-09-06 13:35 UTC (permalink / raw)
  To: Bhanuprakash Modem, igt-dev

Hi Bhanu,

Following tests need to be added to kms_pm_rpm.
1. igt@i915_pm_rpm@basic-rte test, we are setting display as true. So, 
this test should be part of kms_pm_rpm.
Also, we can take i/p from core PM if this test is required w/o display 
too. Then we can have 2 tests - display enabled/disabled.

2. igt@i915_pm_rpm@pc8-residency test should be part of kms_pm_rpm.
3. igt@i915_pm_rpm@pm-tiling
4. igt@i915_pm_rpm@pm-caching
5. igt@i915_pm_rpm@fences

 From i915_pm_rpm remove doc of tests moved to kms_pm_rpm like 
dpms-lpsp, dpms-mode-unset-lpsp, etc.

On 05-Sep-23 6:23 PM, Bhanuprakash Modem wrote:
> Separate display specific tests, from i915_pm_rpm and create
> a new binary "kms_pm_rpm" for them.
> 
> Note: This patch can be split into multiple, but still it is
> a good starting point to review.
> 
> V2: - Drop unnecessary header files
> 
> Cc: Anshuman Gupta <anshuman.gupta@intel.com>
> Cc: Swati Sharma <swati2.sharma@intel.com>
> Signed-off-by: Bhanuprakash Modem <bhanuprakash.modem@intel.com>
> ---
>   tests/intel-ci/blacklist-pre-merge.txt |    8 +-
>   tests/intel-ci/blacklist.txt           |    2 +-
>   tests/intel-ci/fast-feedback.testlist  |    6 +-
>   tests/intel/i915_pm_rpm.c              |  869 -------------
>   tests/intel/kms_pm_rpm.c               | 1628 ++++++++++++++++++++++++
>   tests/meson.build                      |    1 +
>   6 files changed, 1637 insertions(+), 877 deletions(-)
>   create mode 100644 tests/intel/kms_pm_rpm.c
> 
> diff --git a/tests/intel-ci/blacklist-pre-merge.txt b/tests/intel-ci/blacklist-pre-merge.txt
> index d4e5ef66e..0a1315aae 100644
> --- a/tests/intel-ci/blacklist-pre-merge.txt
> +++ b/tests/intel-ci/blacklist-pre-merge.txt
> @@ -13,8 +13,8 @@
>   #
>   # Data acquired on 2020-02-19 by Martin Peres
>   ###############################################################################
> -igt@i915_pm_rpm@legacy-planes(-dpms)?
> -igt@i915_pm_rpm@universal-planes(-dpms)?
> +igt@kms_pm_rpm@legacy-planes(-dpms)?
> +igt@kms_pm_rpm@universal-planes(-dpms)?
>   
>   
>   ###############################################################################
> @@ -67,7 +67,7 @@ igt@gem_exec_alignment@.*
>   #
>   # Data acquired on 2020-02-20 by Martin Peres
>   ###############################################################################
> -igt@i915_pm_rpm@debugfs-read
> +igt@kms_pm_rpm@debugfs-read
>   
>   
>   ###############################################################################
> @@ -109,4 +109,4 @@ igt@gem_tiled_wc
>   #
>   # Data acquired on 2020-02-20 by Martin Peres
>   ###############################################################################
> -igt@i915_pm_rpm@modeset-stress-extra-wait
> +igt@kms_pm_rpm@modeset-stress-extra-wait
> diff --git a/tests/intel-ci/blacklist.txt b/tests/intel-ci/blacklist.txt
> index e13759d3e..c8bce2e0e 100644
> --- a/tests/intel-ci/blacklist.txt
> +++ b/tests/intel-ci/blacklist.txt
> @@ -13,7 +13,7 @@ igt@meta_test(@.*)?
>   # failures in tests run afterwards.
>   ###############################################
>   #igt@i915_module_load(@.*)? # danger, danger; hope for taints!
> -igt@i915_pm_rpm@module-reload
> +igt@kms_pm_rpm@module-reload
>   igt@i915_pm_rpm@gem-execbuf-stress-extra-wait
>   ###############################################
>   # GEM
> diff --git a/tests/intel-ci/fast-feedback.testlist b/tests/intel-ci/fast-feedback.testlist
> index 51010a2f7..3bbb7593a 100644
> --- a/tests/intel-ci/fast-feedback.testlist
> +++ b/tests/intel-ci/fast-feedback.testlist
> @@ -119,13 +119,13 @@ igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence
>   igt@kms_pipe_crc_basic@read-crc
>   igt@kms_pipe_crc_basic@read-crc-frame-sequence
>   igt@kms_pm_backlight@basic-brightness
> +igt@kms_pm_rpm@basic-pci-d3-state
> +igt@kms_pm_rpm@basic-rte
>   igt@kms_psr@primary_page_flip
>   igt@kms_psr@cursor_plane_move
>   igt@kms_psr@sprite_plane_onoff
>   igt@kms_psr@primary_mmap_gtt
>   igt@kms_setmode@basic-clone-single-crtc
> -igt@i915_pm_rpm@basic-pci-d3-state
> -igt@i915_pm_rpm@basic-rte
>   igt@i915_pm_rps@basic-api
>   igt@prime_self_import@basic-llseek-bad
>   igt@prime_self_import@basic-llseek-size
> @@ -161,7 +161,7 @@ igt@gem_lmem_swapping@basic
>   igt@gem_lmem_swapping@parallel-random-engines
>   igt@gem_lmem_swapping@random-engines
>   igt@gem_lmem_swapping@verify-random
> -igt@i915_pm_rpm@module-reload
> +igt@kms_pm_rpm@module-reload
>   
>   # Kernel selftests
>   igt@i915_selftest@live
> diff --git a/tests/intel/i915_pm_rpm.c b/tests/intel/i915_pm_rpm.c
> index 17413ffe5..2a6b077a2 100644
> --- a/tests/intel/i915_pm_rpm.c
> +++ b/tests/intel/i915_pm_rpm.c
> @@ -43,25 +43,10 @@
>   /**
>    * TEST: i915 pm rpm
>    *
> - * SUBTEST: basic-pci-d3-state
> - * Description: Validate PCI device D3 state enter-exit scenario using runtime PM
> - * Feature: pm_rpm
> - * Functionality: D3 state entry-exit
> - * Run type: BAT
> - * Test category: pm_rpm
> - *
>    * SUBTEST: basic-rte
>    * Feature: pm_rpm
>    * Run type: BAT
>    *
> - * SUBTEST: cursor
> - * Feature: pm_rpm
> - * Run type: FULL
> - *
> - * SUBTEST: cursor-dpms
> - * Feature: pm_rpm
> - * Run type: FULL
> - *
>    * SUBTEST: debugfs-forcewake-user
>    * Feature: pm_rpm
>    * Run type: FULL
> @@ -94,10 +79,6 @@
>    * Feature: gtt, pm_rpm, synchronization
>    * Run type: FULL
>    *
> - * SUBTEST: fences-dpms
> - * Feature: gtt, pm_rpm, synchronization
> - * Run type: FULL
> - *
>    * SUBTEST: gem-evict-pwrite
>    * Feature: gtt, pm_rpm
>    * Run type: FULL
> @@ -127,50 +108,6 @@
>    * Feature: pm_rpm
>    * Run type: FULL
>    *
> - * SUBTEST: i2c
> - * Feature: pm_rpm
> - * Run type: FULL
> - *
> - * SUBTEST: legacy-planes
> - * Feature: pm_rpm
> - * Run type: FULL
> - *
> - * SUBTEST: legacy-planes-dpms
> - * Feature: pm_rpm
> - * Run type: FULL
> - *
> - * SUBTEST: modeset-lpsp
> - * Feature: pm_rpm
> - * Run type: FULL
> - *
> - * SUBTEST: modeset-lpsp-stress
> - * Feature: pm_rpm
> - * Run type: FULL
> - *
> - * SUBTEST: modeset-lpsp-stress-no-wait
> - * Feature: pm_rpm
> - * Run type: FULL
> - *
> - * SUBTEST: modeset-non-lpsp
> - * Feature: non-lpsp, pm_rpm
> - * Run type: FULL
> - *
> - * SUBTEST: modeset-non-lpsp-stress
> - * Feature: non-lpsp, pm_rpm
> - * Run type: FULL
> - *
> - * SUBTEST: modeset-non-lpsp-stress-no-wait
> - * Feature: non-lpsp, pm_rpm
> - * Run type: FULL
> - *
> - * SUBTEST: modeset-pc8-residency-stress
> - * Feature: pm_rpm
> - * Run type: FULL
> - *
> - * SUBTEST: modeset-stress-extra-wait
> - * Feature: pm_rpm
> - * Run type: FULL
> - *
>    * SUBTEST: module-reload
>    * Feature: pm_rpm
>    * Run type: BAT
> @@ -214,18 +151,6 @@
>    * SUBTEST: system-suspend-execbuf
>    * Feature: pm_rpm
>    * Run type: FULL
> - *
> - * SUBTEST: system-suspend-modeset
> - * Feature: pm_rpm
> - * Run type: FULL
> - *
> - * SUBTEST: universal-planes
> - * Feature: pm_rpm
> - * Run type: FULL
> - *
> - * SUBTEST: universal-planes-dpms
> - * Feature: pm_rpm
> - * Run type: FULL
>    */
>   
>   #if defined(__linux__)
> @@ -707,343 +632,6 @@ static void fini_mode_set_data(struct mode_set_data *data)
>   	}
>   }
>   
> -static void get_drm_info(struct compare_data *data)
> -{
> -	int i;
> -
> -	data->res = drmModeGetResources(drm_fd);
> -	if (!data->res)
> -		return;
> -
> -	igt_assert(data->res->count_connectors <= MAX_CONNECTORS);
> -	igt_assert(data->res->count_encoders <= MAX_ENCODERS);
> -	igt_assert(data->res->count_crtcs <= MAX_CRTCS);
> -
> -	for (i = 0; i < data->res->count_connectors; i++) {
> -		/* Don't use GetConnectorCurrent, we want to force a reprobe
> -		 * here. */
> -		data->connectors[i] = drmModeGetConnector(drm_fd,
> -						data->res->connectors[i]);
> -		data->edids[i] = get_connector_edid(data->connectors[i], i);
> -	}
> -	for (i = 0; i < data->res->count_encoders; i++)
> -		data->encoders[i] = drmModeGetEncoder(drm_fd,
> -						data->res->encoders[i]);
> -	for (i = 0; i < data->res->count_crtcs; i++)
> -		data->crtcs[i] = drmModeGetCrtc(drm_fd, data->res->crtcs[i]);
> -}
> -
> -static void free_drm_info(struct compare_data *data)
> -{
> -	int i;
> -
> -	if (!data->res)
> -		return;
> -
> -	for (i = 0; i < data->res->count_connectors; i++) {
> -		drmModeFreeConnector(data->connectors[i]);
> -		drmModeFreePropertyBlob(data->edids[i]);
> -	}
> -	for (i = 0; i < data->res->count_encoders; i++)
> -		drmModeFreeEncoder(data->encoders[i]);
> -	for (i = 0; i < data->res->count_crtcs; i++)
> -		drmModeFreeCrtc(data->crtcs[i]);
> -
> -	drmModeFreeResources(data->res);
> -}
> -
> -#define COMPARE(d1, d2, data) igt_assert_eq(d1->data, d2->data)
> -#define COMPARE_ARRAY(d1, d2, size, data) do { \
> -	for (i = 0; i < size; i++) \
> -		igt_assert(d1->data[i] == d2->data[i]); \
> -} while (0)
> -
> -static void assert_drm_resources_equal(struct compare_data *d1,
> -				       struct compare_data *d2)
> -{
> -	COMPARE(d1, d2, res->count_connectors);
> -	COMPARE(d1, d2, res->count_encoders);
> -	COMPARE(d1, d2, res->count_crtcs);
> -	COMPARE(d1, d2, res->min_width);
> -	COMPARE(d1, d2, res->max_width);
> -	COMPARE(d1, d2, res->min_height);
> -	COMPARE(d1, d2, res->max_height);
> -}
> -
> -static void assert_modes_equal(drmModeModeInfoPtr m1, drmModeModeInfoPtr m2)
> -{
> -	COMPARE(m1, m2, clock);
> -	COMPARE(m1, m2, hdisplay);
> -	COMPARE(m1, m2, hsync_start);
> -	COMPARE(m1, m2, hsync_end);
> -	COMPARE(m1, m2, htotal);
> -	COMPARE(m1, m2, hskew);
> -	COMPARE(m1, m2, vdisplay);
> -	COMPARE(m1, m2, vsync_start);
> -	COMPARE(m1, m2, vsync_end);
> -	COMPARE(m1, m2, vtotal);
> -	COMPARE(m1, m2, vscan);
> -	COMPARE(m1, m2, vrefresh);
> -	COMPARE(m1, m2, flags);
> -	COMPARE(m1, m2, type);
> -	igt_assert(strcmp(m1->name, m2->name) == 0);
> -}
> -
> -static void assert_drm_connectors_equal(drmModeConnectorPtr c1,
> -					drmModeConnectorPtr c2)
> -{
> -	int i;
> -
> -	COMPARE(c1, c2, connector_id);
> -	COMPARE(c1, c2, connector_type);
> -	COMPARE(c1, c2, connector_type_id);
> -	COMPARE(c1, c2, mmWidth);
> -	COMPARE(c1, c2, mmHeight);
> -	COMPARE(c1, c2, count_modes);
> -	COMPARE(c1, c2, count_props);
> -	COMPARE(c1, c2, count_encoders);
> -	COMPARE_ARRAY(c1, c2, c1->count_props, props);
> -	COMPARE_ARRAY(c1, c2, c1->count_encoders, encoders);
> -
> -	for (i = 0; i < c1->count_modes; i++)
> -		assert_modes_equal(&c1->modes[0], &c2->modes[0]);
> -}
> -
> -static void assert_drm_encoders_equal(drmModeEncoderPtr e1,
> -				      drmModeEncoderPtr e2)
> -{
> -	COMPARE(e1, e2, encoder_id);
> -	COMPARE(e1, e2, encoder_type);
> -	COMPARE(e1, e2, possible_crtcs);
> -	COMPARE(e1, e2, possible_clones);
> -}
> -
> -static void assert_drm_crtcs_equal(drmModeCrtcPtr c1, drmModeCrtcPtr c2)
> -{
> -	COMPARE(c1, c2, crtc_id);
> -}
> -
> -static void assert_drm_edids_equal(drmModePropertyBlobPtr e1,
> -				   drmModePropertyBlobPtr e2)
> -{
> -	if (!e1 && !e2)
> -		return;
> -	igt_assert(e1 && e2);
> -
> -	COMPARE(e1, e2, length);
> -
> -	igt_assert(memcmp(e1->data, e2->data, e1->length) == 0);
> -}
> -
> -static void assert_drm_infos_equal(struct compare_data *d1,
> -				   struct compare_data *d2)
> -{
> -	int i;
> -
> -	if (d1->res == d2->res)
> -		return;
> -
> -	igt_assert(d1->res);
> -	igt_assert(d2->res);
> -
> -	assert_drm_resources_equal(d1, d2);
> -
> -	for (i = 0; i < d1->res->count_connectors; i++) {
> -		assert_drm_connectors_equal(d1->connectors[i],
> -					    d2->connectors[i]);
> -		assert_drm_edids_equal(d1->edids[i], d2->edids[i]);
> -	}
> -
> -	for (i = 0; i < d1->res->count_encoders; i++)
> -		assert_drm_encoders_equal(d1->encoders[i], d2->encoders[i]);
> -
> -	for (i = 0; i < d1->res->count_crtcs; i++)
> -		assert_drm_crtcs_equal(d1->crtcs[i], d2->crtcs[i]);
> -}
> -
> -static bool find_i2c_path(const char *connector_name,
> -			  char *i2c_path, size_t i2c_path_size)
> -{
> -	struct dirent *dirent;
> -	DIR *dir;
> -	int sysfs_card_fd = igt_sysfs_open(drm_fd);
> -	int connector_fd = -1;
> -	bool found_i2c_file = false;
> -	ssize_t r;
> -
> -	dir = fdopendir(sysfs_card_fd);
> -	igt_assert(dir);
> -
> -	while ((dirent = readdir(dir))) {
> -		/* Skip "cardx-" prefix */
> -		char *dirname = strchr(dirent->d_name, '-');
> -		if (dirname==NULL)
> -			continue;
> -		++dirname;
> -
> -		if (strcmp(dirname, connector_name) == 0) {
> -			connector_fd = openat(sysfs_card_fd, dirent->d_name, O_RDONLY);
> -			break;
> -		}
> -	}
> -	closedir(dir);
> -
> -	if (connector_fd < 0)
> -		return false;
> -
> -	/* try the standard "ddc" symlink first */
> -	r = readlinkat(connector_fd, "ddc", i2c_path, i2c_path_size);
> -	if (r > 0 && r != i2c_path_size) {
> -		int num;
> -
> -		i2c_path[r] = '\0';
> -
> -		if (sscanf(basename(i2c_path), "i2c-%d", &num) == 1) {
> -			snprintf(i2c_path, i2c_path_size, "/dev/i2c-%d", num);
> -			return true;
> -		}
> -	}
> -
> -	dir = fdopendir(connector_fd);
> -	igt_assert(dir);
> -
> -	/* fall back to old "i2c-?" symlink */
> -	/* FIXME nuke this at some point */
> -	while ((dirent = readdir(dir))) {
> -		if (strncmp(dirent->d_name, "i2c-", 4) == 0) {
> -			sprintf(i2c_path, "/dev/%s", dirent->d_name);
> -			found_i2c_file = true;
> -		}
> -	}
> -	closedir(dir);
> -	return found_i2c_file;
> -}
> -
> -
> -static bool i2c_read_edid(const char *connector_name, unsigned char *edid)
> -{
> -	char i2c_path[PATH_MAX];
> -	bool result;
> -	int rc, fd;
> -	struct i2c_msg msgs[] = {
> -		{ /* Start at 0. */
> -			.addr = 0x50,
> -			.flags = 0,
> -			.len = 1,
> -			.buf = edid,
> -		}, { /* Now read the EDID. */
> -			.addr = 0x50,
> -			.flags = I2C_M_RD,
> -			.len = 128,
> -			.buf = edid,
> -		}
> -	};
> -	struct i2c_rdwr_ioctl_data msgset = {
> -		.msgs = msgs,
> -		.nmsgs = 2,
> -	};
> -
> -	result = find_i2c_path(connector_name, i2c_path, sizeof(i2c_path));
> -	if (!result)
> -		return false;
> -
> -	igt_info("Testing %s %s\n", connector_name, i2c_path);
> -
> -	fd = open(i2c_path, O_RDWR);
> -	igt_assert_neq(fd, -1);
> -
> -	rc = ioctl(fd, I2C_RDWR, &msgset);
> -	if (rc==-1) {
> -		igt_debug("I2C access failed with errno %d, %s\n",
> -				errno, strerror(errno));
> -		errno = 0;
> -	}
> -
> -	close(fd);
> -	return rc >= 0;
> -}
> -
> -static void format_hex_string(const unsigned char edid[static EDID_BLOCK_SIZE],
> -			      char buf[static EDID_BLOCK_SIZE * 5 + 1])
> -{
> -	for (int i = 0; i < EDID_BLOCK_SIZE; ++i)
> -		sprintf(buf+i*5, "0x%02x ", edid[i]);
> -}
> -
> -static bool is_mst_connector(int fd, uint32_t connector_id)
> -{
> -	return kmstest_get_property(fd, connector_id,
> -				    DRM_MODE_OBJECT_CONNECTOR,
> -				    "PATH", NULL, NULL, NULL);
> -}
> -
> -static void test_i2c(struct mode_set_data *data)
> -{
> -	bool edid_mistmach_i2c_vs_drm = false;
> -	igt_display_t display;
> -	igt_display_require(&display, drm_fd);
> -
> -	for (int i = 0; i < data->res->count_connectors; i++) {
> -		unsigned char *drm_edid = data->edids[i] ? data->edids[i]->data : NULL;
> -		unsigned char i2c_edid[EDID_BLOCK_SIZE] = {};
> -
> -		igt_output_t *output = igt_output_from_connector(&display,
> -								 data->connectors[i]);
> -		char *connector_name = (char *) igt_output_name(output);
> -
> -		bool got_i2c_edid = i2c_read_edid(connector_name, i2c_edid);
> -		bool got_drm_edid = drm_edid != NULL;
> -		bool is_vga = data->connectors[i]->connector_type == DRM_MODE_CONNECTOR_VGA;
> -
> -		bool edids_equal;
> -
> -		if (data->connectors[i]->connection != DRM_MODE_CONNECTED ||
> -		    is_mst_connector(drm_fd, data->connectors[i]->connector_id))
> -			continue;
> -
> -		/* We fail to detect some VGA monitors using our i2c method. If you look
> -		 * at the dmesg of these cases, you'll see the Kernel complaining about
> -		 * the EDID reading mostly FFs and then disabling bit-banging. Since we
> -		 * don't want to reimplement everything the Kernel does, let's just
> -		 * accept the fact that some VGA outputs won't be properly detected. */
> -		if (is_vga)
> -			continue;
> -
> -		if (!got_i2c_edid && !got_drm_edid)
> -			continue;
> -
> -		if (got_i2c_edid && got_drm_edid)
> -			edids_equal = (0 == memcmp(drm_edid, i2c_edid, EDID_BLOCK_SIZE));
> -		else
> -			edids_equal = false;
> -
> -
> -		if (!edids_equal) {
> -			char buf[5 * EDID_BLOCK_SIZE + 1];
> -			igt_critical("Detected EDID mismatch on connector %s\n",
> -				     connector_name);
> -
> -			if(got_i2c_edid)
> -				format_hex_string(i2c_edid, buf);
> -			else
> -				sprintf(buf, "NULL");
> -
> -			igt_critical("i2c: %s\n", buf);
> -
> -			if(got_drm_edid)
> -				format_hex_string(drm_edid, buf);
> -			else
> -				sprintf(buf, "NULL");
> -
> -			igt_critical("drm: %s\n", buf);
> -
> -			edid_mistmach_i2c_vs_drm = true;
> -		}
> -	}
> -	igt_fail_on_f(edid_mistmach_i2c_vs_drm,
> -			"There is an EDID mismatch between i2c and DRM!\n");
> -}
> -
>   static void setup_pc8(void)
>   {
>   	has_pc8 = false;
> @@ -1165,102 +753,6 @@ static void pc8_residency_subtest(void)
>   		     "PC8+ residency didn't stop with screen enabled.\n");
>   }
>   
> -static void modeset_subtest(enum screen_type type, int rounds, int wait_flags)
> -{
> -	int i;
> -
> -	if (wait_flags & WAIT_PC8_RES)
> -		igt_require(has_pc8);
> -
> -	if (wait_flags & WAIT_EXTRA)
> -		rounds /= 2;
> -
> -	for (i = 0; i < rounds; i++) {
> -		if (wait_flags & USE_DPMS)
> -			disable_all_screens_dpms(&ms_data);
> -		else
> -			disable_all_screens(&ms_data);
> -
> -		if (wait_flags & WAIT_STATUS)
> -			igt_assert(wait_for_suspended());
> -		if (wait_flags & WAIT_PC8_RES)
> -			igt_assert(pc8_plus_residency_changed(30));
> -		if (wait_flags & WAIT_EXTRA)
> -			sleep(5);
> -
> -		/* If we skip this line it's because the type of screen we want
> -		 * is not connected. */
> -		igt_require(enable_one_screen_with_type(&ms_data, type));
> -		if (wait_flags & WAIT_STATUS)
> -			igt_assert(wait_for_active());
> -		if (wait_flags & WAIT_PC8_RES)
> -			igt_assert(!pc8_plus_residency_changed(5));
> -		if (wait_flags & WAIT_EXTRA)
> -			sleep(5);
> -	}
> -}
> -
> -/* Test of the DRM resources reported by the IOCTLs are still the same. This
> - * ensures we still see the monitors with the same eyes. We get the EDIDs and
> - * compare them, which ensures we use DP AUX or GMBUS depending on what's
> - * connected. */
> -static void drm_resources_equal_subtest(void)
> -{
> -	struct compare_data pre_suspend, during_suspend, post_suspend;
> -
> -	enable_one_screen_and_wait(&ms_data);
> -	get_drm_info(&pre_suspend);
> -	igt_assert(wait_for_active());
> -
> -	disable_all_screens_and_wait(&ms_data);
> -	get_drm_info(&during_suspend);
> -	igt_assert(wait_for_suspended());
> -
> -	enable_one_screen_and_wait(&ms_data);
> -	get_drm_info(&post_suspend);
> -	igt_assert(wait_for_active());
> -
> -	assert_drm_infos_equal(&pre_suspend, &during_suspend);
> -	assert_drm_infos_equal(&pre_suspend, &post_suspend);
> -
> -	free_drm_info(&pre_suspend);
> -	free_drm_info(&during_suspend);
> -	free_drm_info(&post_suspend);
> -}
> -
> -static void i2c_subtest_check_environment(void)
> -{
> -	int i2c_dev_files = 0;
> -	DIR *dev_dir;
> -	struct dirent *dirent;
> -
> -	/* Make sure the /dev/i2c-* files exist. */
> -	igt_require(modprobe("i2c-dev") == 0);
> -
> -	dev_dir = opendir("/dev");
> -	igt_assert(dev_dir);
> -	while ((dirent = readdir(dev_dir))) {
> -		if (strncmp(dirent->d_name, "i2c-", 4) == 0)
> -			i2c_dev_files++;
> -	}
> -	closedir(dev_dir);
> -	igt_require(i2c_dev_files);
> -}
> -
> -/* Try to use raw I2C, which also needs interrupts. */
> -static void i2c_subtest(void)
> -{
> -	i2c_subtest_check_environment();
> -
> -	enable_one_screen_and_wait(&ms_data);
> -
> -	disable_all_screens_and_wait(&ms_data);
> -	test_i2c(&ms_data);
> -	igt_assert(wait_for_suspended());
> -
> -	enable_one_screen(&ms_data);
> -}
> -
>   struct read_entry_elapsed {
>   	uint64_t elapsed;
>   	char *path;
> @@ -1875,27 +1367,6 @@ static bool device_in_pci_d3(struct pci_device *pci_dev)
>   	return (val & 0x3) == 0x3;
>   }
>   
> -static void pci_d3_state_subtest(void)
> -{
> -	struct pci_device *pci_dev, *bridge_pci_dev;
> -
> -	igt_require(has_runtime_pm);
> -
> -	pci_dev = igt_device_get_pci_device(drm_fd);
> -	bridge_pci_dev = pci_device_get_parent_bridge(pci_dev);
> -
> -	disable_all_screens_and_wait(&ms_data);
> -	igt_assert(igt_wait(device_in_pci_d3(pci_dev), 2000, 100));
> -
> -	if (gem_has_lmem(drm_fd))
> -		igt_require_f(pci_device_has_kernel_driver(bridge_pci_dev),
> -			      "pci bridge device does not bind with pcieport driver\n");
> -
> -	enable_one_screen_or_forcewake_get_and_wait(&ms_data);
> -	igt_assert(!device_in_pci_d3(pci_dev));
> -	forcewake_put(&ms_data);
> -}
> -
>   __noreturn static void stay_subtest(void)
>   {
>   	disable_all_screens_and_wait(&ms_data);
> @@ -1951,287 +1422,6 @@ static void system_suspend_execbuf_subtest(void)
>   	gem_close(drm_fd, handle);
>   }
>   
> -static void system_suspend_modeset_subtest(void)
> -{
> -	disable_all_screens_and_wait(&ms_data);
> -	igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE);
> -	igt_assert(wait_for_suspended());
> -
> -	enable_one_screen_and_wait(&ms_data);
> -	disable_all_screens_and_wait(&ms_data);
> -}
> -
> -/* Enable a screen, activate DPMS, then do a modeset. At some point our driver
> - * produced WARNs on this case. */
> -static void dpms_mode_unset_subtest(enum screen_type type)
> -{
> -	disable_all_screens_and_wait(&ms_data);
> -
> -	igt_require(enable_one_screen_with_type(&ms_data, type));
> -	igt_assert(wait_for_active());
> -
> -	disable_all_screens_dpms(&ms_data);
> -	igt_assert(wait_for_suspended());
> -
> -	disable_all_screens_and_wait(&ms_data);
> -}
> -
> -static void fill_igt_fb(struct igt_fb *fb, uint32_t color)
> -{
> -	int i;
> -	uint32_t *ptr;
> -
> -	ptr = gem_mmap__device_coherent(drm_fd, fb->gem_handle, 0, fb->size, PROT_WRITE);
> -	for (i = 0; i < fb->size/sizeof(uint32_t); i++)
> -		ptr[i] = color;
> -	igt_assert(munmap(ptr, fb->size) == 0);
> -}
> -
> -/* At some point, this test triggered WARNs in the Kernel. */
> -static void cursor_subtest(bool dpms)
> -{
> -	int rc;
> -	struct igt_fb cursor_fb1, cursor_fb2, cursor_fb3;
> -	uint32_t crtc_id;
> -
> -	disable_all_screens_and_wait(&ms_data);
> -
> -	igt_require(default_mode_params);
> -	crtc_id = default_mode_params->crtc_id;
> -
> -	igt_create_fb(drm_fd, 64, 64, DRM_FORMAT_ARGB8888,
> -		      DRM_FORMAT_MOD_LINEAR, &cursor_fb1);
> -	igt_create_fb(drm_fd, 64, 64, DRM_FORMAT_ARGB8888,
> -		      DRM_FORMAT_MOD_LINEAR, &cursor_fb2);
> -	igt_create_fb(drm_fd, 64, 64, DRM_FORMAT_XRGB8888,
> -		      I915_FORMAT_MOD_X_TILED, &cursor_fb3);
> -
> -	fill_igt_fb(&cursor_fb1, 0xFF00FFFF);
> -	fill_igt_fb(&cursor_fb2, 0xFF00FF00);
> -	fill_igt_fb(&cursor_fb3, 0xFFFF0000);
> -
> -	set_mode_for_params_and_wait(default_mode_params);
> -
> -	rc = drmModeSetCursor(drm_fd, crtc_id, cursor_fb1.gem_handle,
> -			      cursor_fb1.width, cursor_fb1.height);
> -	igt_assert_eq(rc, 0);
> -	rc = drmModeMoveCursor(drm_fd, crtc_id, 0, 0);
> -	igt_assert_eq(rc, 0);
> -	igt_assert(wait_for_active());
> -
> -	disable_or_dpms_all_screens_and_wait(&ms_data, dpms);
> -
> -	/* First, just move the cursor. */
> -	rc = drmModeMoveCursor(drm_fd, crtc_id, 1, 1);
> -	igt_assert_eq(rc, 0);
> -	igt_assert(wait_for_suspended());
> -
> -	/* Then unset it, and set a new one. */
> -	rc = drmModeSetCursor(drm_fd, crtc_id, 0, 0, 0);
> -	igt_assert_eq(rc, 0);
> -	igt_assert(wait_for_suspended());
> -
> -	rc = drmModeSetCursor(drm_fd, crtc_id, cursor_fb2.gem_handle,
> -			      cursor_fb1.width, cursor_fb2.height);
> -	igt_assert_eq(rc, 0);
> -	igt_assert(wait_for_suspended());
> -
> -	/* Move the new cursor. */
> -	rc = drmModeMoveCursor(drm_fd, crtc_id, 2, 2);
> -	igt_assert_eq(rc, 0);
> -	igt_assert(wait_for_suspended());
> -
> -	/* Now set a new one without unsetting the previous one. */
> -	rc = drmModeSetCursor(drm_fd, crtc_id, cursor_fb1.gem_handle,
> -			      cursor_fb1.width, cursor_fb1.height);
> -	igt_assert_eq(rc, 0);
> -	igt_assert(wait_for_suspended());
> -
> -	/* Cursor 3 was created with tiling and painted with a GTT mmap, so
> -	 * hopefully it has some fences around it. */
> -	rc = drmModeRmFB(drm_fd, cursor_fb3.fb_id);
> -	igt_assert_eq(rc, 0);
> -	__gem_set_tiling(drm_fd, cursor_fb3.gem_handle, false, cursor_fb3.strides[0]);
> -	igt_assert(wait_for_suspended());
> -
> -	rc = drmModeSetCursor(drm_fd, crtc_id, cursor_fb3.gem_handle,
> -			      cursor_fb3.width, cursor_fb3.height);
> -	igt_assert_eq(rc, 0);
> -	igt_assert(wait_for_suspended());
> -
> -	/* Make sure nothing remains for the other tests. */
> -	rc = drmModeSetCursor(drm_fd, crtc_id, 0, 0, 0);
> -	igt_assert_eq(rc, 0);
> -	igt_assert(wait_for_suspended());
> -}
> -
> -static enum plane_type get_plane_type(uint32_t plane_id)
> -{
> -	int i;
> -	bool found;
> -	uint64_t prop_value;
> -	drmModePropertyPtr prop;
> -	const char *enum_name = NULL;
> -	enum plane_type type;
> -
> -	found = kmstest_get_property(drm_fd, plane_id, DRM_MODE_OBJECT_PLANE,
> -				     "type", NULL, &prop_value, &prop);
> -	igt_assert(found);
> -
> -	igt_assert(prop->flags & DRM_MODE_PROP_ENUM);
> -	igt_assert(prop_value < prop->count_enums);
> -
> -	for (i = 0; i < prop->count_enums; i++) {
> -		if (prop->enums[i].value == prop_value) {
> -			enum_name = prop->enums[i].name;
> -			break;
> -		}
> -	}
> -	igt_assert(enum_name);
> -
> -	if (strcmp(enum_name, "Overlay") == 0)
> -		type = PLANE_OVERLAY;
> -	else if (strcmp(enum_name, "Primary") == 0)
> -		type = PLANE_PRIMARY;
> -	else if (strcmp(enum_name, "Cursor") == 0)
> -		type = PLANE_CURSOR;
> -	else
> -		igt_assert(0);
> -
> -	drmModeFreeProperty(prop);
> -
> -	return type;
> -}
> -
> -static void test_one_plane(bool dpms, uint32_t plane_id,
> -			   enum plane_type plane_type)
> -{
> -	int rc;
> -	uint32_t plane_format, plane_w, plane_h;
> -	uint32_t crtc_id;
> -	struct igt_fb plane_fb1, plane_fb2;
> -	int32_t crtc_x = 0, crtc_y = 0;
> -	uint64_t modifier;
> -
> -	disable_all_screens_and_wait(&ms_data);
> -
> -	crtc_id = default_mode_params->crtc_id;
> -
> -	switch (plane_type) {
> -	case PLANE_OVERLAY:
> -		plane_format = DRM_FORMAT_XRGB8888;
> -		plane_w = 64;
> -		plane_h = 64;
> -		modifier = I915_FORMAT_MOD_X_TILED;
> -		break;
> -	case PLANE_PRIMARY:
> -		plane_format = DRM_FORMAT_XRGB8888;
> -		plane_w = default_mode_params->mode->hdisplay;
> -		plane_h = default_mode_params->mode->vdisplay;
> -		modifier = I915_FORMAT_MOD_X_TILED;
> -		break;
> -	case PLANE_CURSOR:
> -		plane_format = DRM_FORMAT_ARGB8888;
> -		plane_w = 64;
> -		plane_h = 64;
> -		modifier = DRM_FORMAT_MOD_LINEAR;
> -		break;
> -	default:
> -		igt_assert(0);
> -		break;
> -	}
> -
> -	igt_create_fb(drm_fd, plane_w, plane_h, plane_format, modifier,
> -		      &plane_fb1);
> -	igt_create_fb(drm_fd, plane_w, plane_h, plane_format, modifier,
> -		      &plane_fb2);
> -	fill_igt_fb(&plane_fb1, 0xFF00FFFF);
> -	fill_igt_fb(&plane_fb2, 0xFF00FF00);
> -
> -	set_mode_for_params_and_wait(default_mode_params);
> -
> -	rc = drmModeSetPlane(drm_fd, plane_id, crtc_id, plane_fb1.fb_id, 0,
> -			     0, 0, plane_fb1.width, plane_fb1.height,
> -			     0 << 16, 0 << 16, plane_fb1.width << 16,
> -			     plane_fb1.height << 16);
> -	igt_assert_eq(rc, 0);
> -
> -	disable_or_dpms_all_screens_and_wait(&ms_data, dpms);
> -
> -	/* Just move the plane around. */
> -	if (plane_type != PLANE_PRIMARY) {
> -		crtc_x++;
> -		crtc_y++;
> -	}
> -	rc = drmModeSetPlane(drm_fd, plane_id, crtc_id, plane_fb1.fb_id, 0,
> -			     crtc_x, crtc_y, plane_fb1.width, plane_fb1.height,
> -			     0 << 16, 0 << 16, plane_fb1.width << 16,
> -			     plane_fb1.height << 16);
> -	igt_assert_eq(rc, 0);
> -	igt_assert(wait_for_suspended());
> -
> -	/* Unset, then change the plane. */
> -	rc = drmModeSetPlane(drm_fd, plane_id, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
> -	igt_assert_eq(rc, 0);
> -	igt_assert(wait_for_suspended());
> -
> -	rc = drmModeSetPlane(drm_fd, plane_id, crtc_id, plane_fb2.fb_id, 0,
> -			     crtc_x, crtc_y, plane_fb2.width, plane_fb2.height,
> -			     0 << 16, 0 << 16, plane_fb2.width << 16,
> -			     plane_fb2.height << 16);
> -	igt_assert_eq(rc, 0);
> -	igt_assert(wait_for_suspended());
> -
> -	/* Now change the plane without unsetting first. */
> -	rc = drmModeSetPlane(drm_fd, plane_id, crtc_id, plane_fb1.fb_id, 0,
> -			     crtc_x, crtc_y, plane_fb1.width, plane_fb1.height,
> -			     0 << 16, 0 << 16, plane_fb1.width << 16,
> -			     plane_fb1.height << 16);
> -	igt_assert_eq(rc, 0);
> -	igt_assert(wait_for_suspended());
> -
> -	/* Make sure nothing remains for the other tests. */
> -	rc = drmModeSetPlane(drm_fd, plane_id, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
> -	igt_assert_eq(rc, 0);
> -	igt_assert(wait_for_suspended());
> -}
> -
> -/* This one also triggered WARNs on our driver at some point in time. */
> -static void planes_subtest(bool universal, bool dpms)
> -{
> -	int i, crtc_idx;
> -	drmModePlaneResPtr planes;
> -
> -	igt_require(default_mode_params);
> -	crtc_idx = kmstest_get_crtc_idx(ms_data.res,
> -					default_mode_params->crtc_id);
> -
> -	igt_assert_eq(drmSetClientCap(drm_fd, DRM_CLIENT_CAP_UNIVERSAL_PLANES,
> -				      universal), 0);
> -
> -	planes = drmModeGetPlaneResources(drm_fd);
> -	for (i = 0; i < planes->count_planes; i++) {
> -		drmModePlanePtr plane;
> -
> -		plane = drmModeGetPlane(drm_fd, planes->planes[i]);
> -		igt_assert(plane);
> -
> -		if (plane->possible_crtcs & (1 << crtc_idx)) {
> -			enum plane_type type;
> -
> -			type = universal ? get_plane_type(plane->plane_id) :
> -					   PLANE_OVERLAY;
> -			igt_dynamic_f("plane-%d", plane->plane_id)
> -				test_one_plane(dpms, plane->plane_id, type);
> -		}
> -		drmModeFreePlane(plane);
> -	}
> -	drmModeFreePlaneResources(planes);
> -
> -	igt_assert_eq(drmSetClientCap(drm_fd, DRM_CLIENT_CAP_UNIVERSAL_PLANES,
> -				      1), 0);
> -}
> -
>   static void pm_test_tiling(void)
>   {
>   	uint32_t *handles;
> @@ -2436,22 +1626,6 @@ igt_main_args("", long_options, help_str, opt_handler, NULL)
>   		igt_subtest("stay")
>   			stay_subtest();
>   
> -	/* Essential things */
> -	igt_subtest("drm-resources-equal")
> -		drm_resources_equal_subtest();
> -	igt_subtest("basic-pci-d3-state")
> -		pci_d3_state_subtest();
> -
> -	/* Basic modeset */
> -	igt_subtest("modeset-lpsp")
> -		modeset_subtest(SCREEN_TYPE_LPSP, 1, WAIT_STATUS);
> -	igt_subtest("modeset-non-lpsp")
> -		modeset_subtest(SCREEN_TYPE_NON_LPSP, 1, WAIT_STATUS);
> -	igt_subtest("dpms-lpsp")
> -		modeset_subtest(SCREEN_TYPE_LPSP, 1, WAIT_STATUS | USE_DPMS);
> -	igt_subtest("dpms-non-lpsp")
> -		modeset_subtest(SCREEN_TYPE_NON_LPSP, 1, WAIT_STATUS | USE_DPMS);
> -
>   	/* GEM */
>   	igt_subtest_with_dynamic("gem-mmap-type") {
>   		for_each_mmap_offset_type(drm_fd, t) {
> @@ -2477,25 +1651,9 @@ igt_main_args("", long_options, help_str, opt_handler, NULL)
>   		gem_evict_pwrite_subtest();
>   	}
>   
> -	/* Planes and cursors */
> -	igt_subtest("cursor")
> -		cursor_subtest(false);
> -	igt_subtest("cursor-dpms")
> -		cursor_subtest(true);
> -	igt_subtest_with_dynamic("legacy-planes")
> -		planes_subtest(false, false);
> -	igt_subtest_with_dynamic("legacy-planes-dpms")
> -		planes_subtest(false, true);
> -	igt_subtest_with_dynamic("universal-planes")
> -		planes_subtest(true, false);
> -	igt_subtest_with_dynamic("universal-planes-dpms")
> -		planes_subtest(true, true);
> -
>   	/* Misc */
>   	igt_subtest("reg-read-ioctl")
>   		reg_read_ioctl_subtest();
> -	igt_subtest("i2c")
> -		i2c_subtest();
>   	igt_subtest("pc8-residency")
>   		pc8_residency_subtest();
>   	igt_subtest("debugfs-read")
> @@ -2504,33 +1662,10 @@ igt_main_args("", long_options, help_str, opt_handler, NULL)
>   		debugfs_forcewake_user_subtest();
>   	igt_subtest("sysfs-read")
>   		sysfs_read_subtest();
> -	igt_subtest("dpms-mode-unset-lpsp")
> -		dpms_mode_unset_subtest(SCREEN_TYPE_LPSP);
> -	igt_subtest("dpms-mode-unset-non-lpsp")
> -		dpms_mode_unset_subtest(SCREEN_TYPE_NON_LPSP);
>   	igt_subtest("fences") {
>   		gem_require_mappable_ggtt(drm_fd);
>   		fences_subtest(false);
>   	}
> -	igt_subtest("fences-dpms") {
> -		gem_require_mappable_ggtt(drm_fd);
> -		fences_subtest(true);
> -	}
> -
> -	/* Modeset stress */
> -	igt_subtest("modeset-lpsp-stress")
> -		modeset_subtest(SCREEN_TYPE_LPSP, rounds, WAIT_STATUS);
> -	igt_subtest("modeset-non-lpsp-stress")
> -		modeset_subtest(SCREEN_TYPE_NON_LPSP, rounds, WAIT_STATUS);
> -	igt_subtest("modeset-lpsp-stress-no-wait")
> -		modeset_subtest(SCREEN_TYPE_LPSP, rounds, DONT_WAIT);
> -	igt_subtest("modeset-non-lpsp-stress-no-wait")
> -		modeset_subtest(SCREEN_TYPE_NON_LPSP, rounds, DONT_WAIT);
> -	igt_subtest("modeset-pc8-residency-stress")
> -		modeset_subtest(SCREEN_TYPE_ANY, rounds, WAIT_PC8_RES);
> -	igt_subtest("modeset-stress-extra-wait")
> -		modeset_subtest(SCREEN_TYPE_ANY, rounds,
> -				WAIT_STATUS | WAIT_EXTRA);
>   
>   	/* System suspend */
>   	igt_subtest("system-suspend-devices")
> @@ -2539,8 +1674,6 @@ igt_main_args("", long_options, help_str, opt_handler, NULL)
>   		system_suspend_subtest(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE);
>   	igt_subtest("system-suspend-execbuf")
>   		system_suspend_execbuf_subtest();
> -	igt_subtest("system-suspend-modeset")
> -		system_suspend_modeset_subtest();
>   	igt_subtest("system-hibernate-devices")
>   		system_suspend_subtest(SUSPEND_STATE_DISK,
>   				       SUSPEND_TEST_DEVICES);
> @@ -2600,8 +1733,6 @@ igt_main_args("", long_options, help_str, opt_handler, NULL)
>   		igt_assert(setup_environment(true));
>   		pci_dev = igt_device_get_pci_device(drm_fd);
>   		igt_assert(igt_wait(device_in_pci_d3(pci_dev), 2000, 100));
> -		if (enable_one_screen_with_type(&ms_data, SCREEN_TYPE_ANY))
> -			drm_resources_equal_subtest();
>   		teardown_environment(true);
>   
>   		/* Remove our mmio_debugging module */
> diff --git a/tests/intel/kms_pm_rpm.c b/tests/intel/kms_pm_rpm.c
> new file mode 100644
> index 000000000..fa0fce413
> --- /dev/null
> +++ b/tests/intel/kms_pm_rpm.c
> @@ -0,0 +1,1628 @@
> +// SPDX-License-Identifier: MIT
> +/*
> + * Copyright © 2023 Intel Corporation
> + *
> + */
> +
> +#if defined(__linux__)
> +#include <linux/i2c.h>
> +#include <linux/i2c-dev.h>
> +#elif defined(__FreeBSD__)
> +#include <dev/iicbus/iic.h>
> +#define	addr	slave
> +#endif
> +
> +#include <dirent.h>
> +
> +#include "config.h"
> +#include "i915/gem.h"
> +#include "i915/gem_create.h"
> +#include "igt.h"
> +#include "igt_debugfs.h"
> +#include "igt_device.h"
> +#include "igt_edid.h"
> +#include "igt_kmod.h"
> +#include "igt_sysfs.h"
> +#include "intel_blt.h"
> +
> +/**
> + * TEST: kms pm rpm
> + * Category: Display
> + * Description: Test to validate Runtime PM
> + *
> + * SUBTEST: basic-pci-d3-state
> + * Description: Validate PCI device D3 state enter-exit scenario using runtime PM
> + * Driver requirement: i915
> + * Functionality: pm_rpm
> + * Mega feature: Display Power
> + * Run type: FULL
> + * Test category: functionality test
> + *
> + * SUBTEST: cursor
> + * Description: Validate cursor movements along with suspends using runtime PM
> + * Driver requirement: i915
> + * Functionality: cursor, pm_rpm, suspend
> + * Mega feature: Display Power
> + * Run type: FULL
> + * Test category: functionality test
> + *
> + * SUBTEST: cursor-dpms
> + * Description: Validate cursor movements along with dpms using runtime PM
> + * Driver requirement: i915
> + * Functionality: cursor, dpms, pm_rpm
> + * Mega feature: Display Power
> + * Run type: FULL
> + * Test category: functionality test
> + *
> + * SUBTEST: dpms-lpsp
> + * Description: Validate basic modeset with dpms on lpsp screen using runtime PM
> + * Driver requirement: i915
> + * Functionality: dpms, pm_rpm
> + * Mega feature: Display Power
> + * Run type: FULL
> + * Test category: functionality test
> + *
> + * SUBTEST: dpms-mode-unset-lpsp
> + * Description: Validate basic modeset (negative) with dpms on lpsp screen using runtime PM
> + * Driver requirement: i915
> + * Functionality: dpms, pm_rpm
> + * Mega feature: Display Power
> + * Run type: FULL
> + * Test category: functionality test
> + *
> + * SUBTEST: dpms-mode-unset-non-lpsp
> + * Description: Validate basic modeset (negative) with dpms on non-lpsp screen using runtime PM
> + * Driver requirement: i915
> + * Functionality: dpms, pm_rpm
> + * Mega feature: Display Power
> + * Run type: FULL
> + * Test category: functionality test
> + *
> + * SUBTEST: dpms-non-lpsp
> + * Description: Validate basic modeset with dpms on non-lpsp screen using runtime PM
> + * Driver requirement: i915
> + * Functionality: dpms, pm_rpm
> + * Mega feature: Display Power
> + * Run type: FULL
> + * Test category: functionality test
> + *
> + * SUBTEST: drm-resources-equal
> + * Description: Validate the DRM resources reported by the IOCTLs are still the same.
> + * Driver requirement: i915
> + * Functionality: pm_rpm
> + * Mega feature: Display Power
> + * Run type: FULL
> + * Test category: functionality test
> + *
> + * SUBTEST: fences-dpms
> + * Description: Sanity test for drm fences with dpms.
> + * Driver requirement: i915
> + * Functionality: dpms, pm_rpm
> + * Mega feature: Display Power
> + * Run type: FULL
> + * Test category: functionality test
> + *
> + * SUBTEST: i2c
> + * Description: Validate exposed edids using raw I2C read method.
> + * Driver requirement: i915
> + * Functionality: pm_rpm
> + * Mega feature: Display Power
> + * Run type: FULL
> + * Test category: functionality test
> + *
> + * SUBTEST: legacy-planes
> + * Description: Validate legacy plane (set/unset/change).
> + * Driver requirement: i915
> + * Functionality: pm_rpm, plane
> + * Mega feature: Display Power
> + * Run type: FULL
> + * Test category: functionality test
> + *
> + * SUBTEST: legacy-planes-dpms
> + * Description: Validate legacy plane (set/unset/change) with dpms.
> + * Driver requirement: i915
> + * Functionality: pm_rpm, plane
> + * Mega feature: Display Power
> + * Run type: FULL
> + * Test category: functionality test
> + *
> + * SUBTEST: modeset-lpsp
> + * Description: Validate basic modeset on lpsp screen using runtime PM
> + * Driver requirement: i915
> + * Functionality: pm_rpm
> + * Mega feature: Display Power
> + * Run type: FULL
> + * Test category: functionality test
> + *
> + * SUBTEST: modeset-lpsp-stress
> + * Description: Stress test with modeset on lpsp screen using runtime PM
> + * Driver requirement: i915
> + * Functionality: pm_rpm
> + * Mega feature: Display Power
> + * Run type: FULL
> + * Test category: functionality test
> + *
> + * SUBTEST: modeset-lpsp-stress-no-wait
> + * Description: Stress test with modeset (no wait)on lpsp screen using runtime PM
> + * Driver requirement: i915
> + * Functionality: pm_rpm
> + * Mega feature: Display Power
> + * Run type: FULL
> + * Test category: functionality test
> + *
> + * SUBTEST: modeset-non-lpsp
> + * Description: Validate basic modeset on non-lpsp screen using runtime PM
> + * Driver requirement: i915
> + * Functionality: pm_rpm
> + * Mega feature: Display Power
> + * Run type: FULL
> + * Test category: functionality test
> + *
> + * SUBTEST: modeset-non-lpsp-stress
> + * Description: Stress test with modeset on non-lpsp screen using runtime PM
> + * Driver requirement: i915
> + * Functionality: pm_rpm
> + * Mega feature: Display Power
> + * Run type: FULL
> + * Test category: functionality test
> + *
> + * SUBTEST: modeset-non-lpsp-stress-no-wait
> + * Description: Stress test with modeset (no wait) on non-lpsp screen using runtime PM
> + * Driver requirement: i915
> + * Functionality: pm_rpm
> + * Mega feature: Display Power
> + * Run type: FULL
> + * Test category: functionality test
> + *
> + * SUBTEST: modeset-pc8-residency-stress
> + * Description: Stress test with modeset (pc8 residency) using runtime PM
> + * Driver requirement: i915
> + * Functionality: pm_rpm
> + * Mega feature: Display Power
> + * Run type: FULL
> + * Test category: functionality test
> + *
> + * SUBTEST: modeset-stress-extra-wait
> + * Description: Stress test with modeset (extra wait) using runtime PM
> + * Driver requirement: i915
> + * Functionality: pm_rpm
> + * Mega feature: Display Power
> + * Run type: FULL
> + * Test category: functionality test
> + *
> + * SUBTEST: system-suspend-modeset
> + * Description: Validate basic modeset with suspend
> + * Driver requirement: i915
> + * Functionality: pm_rpm, suspend
> + * Mega feature: Display Power
> + * Run type: FULL
> + * Test category: functionality test
> + *
> + * SUBTEST: universal-planes
> + * Description: Validate universal plane (set/unset/change).
> + * Driver requirement: i915
> + * Functionality: pm_rpm, plane
> + * Mega feature: Display Power
> + * Run type: FULL
> + * Test category: functionality test
> + *
> + * SUBTEST: universal-planes-dpms
> + * Description: Validate universal plane (set/unset/change) with dpms.
> + * Driver requirement: i915
> + * Functionality: pm_rpm, plane
> + * Mega feature: Display Power
> + * Run type: FULL
> + * Test category: functionality test
> + */
> +
> +#define MSR_PC8_RES	0x630
> +#define MSR_PC9_RES	0x631
> +#define MSR_PC10_RES	0x632
> +
> +#define MAX_CONNECTORS	32
> +#define MAX_ENCODERS	32
> +#define MAX_CRTCS	16
> +
> +#define WIDTH 64
> +#define HEIGHT 64
> +#define STRIDE (WIDTH)
> +#define SIZE (HEIGHT * STRIDE)
> +
> +enum pc8_status {
> +	PC8_ENABLED,
> +	PC8_DISABLED
> +};
> +
> +enum screen_type {
> +	SCREEN_TYPE_LPSP,
> +	SCREEN_TYPE_NON_LPSP,
> +	SCREEN_TYPE_ANY,
> +};
> +
> +enum plane_type {
> +	PLANE_OVERLAY,
> +	PLANE_PRIMARY,
> +	PLANE_CURSOR,
> +};
> +
> +/* Wait flags */
> +#define DONT_WAIT	0
> +#define WAIT_STATUS	1
> +#define WAIT_PC8_RES	2
> +#define WAIT_EXTRA	4
> +#define USE_DPMS	8
> +
> +int drm_fd, msr_fd, pc8_status_fd;
> +int debugfs;
> +bool has_runtime_pm, has_pc8;
> +struct mode_set_data ms_data;
> +
> +/* Stuff used when creating FBs and mode setting. */
> +struct mode_set_data {
> +	drmModeResPtr res;
> +	drmModeConnectorPtr connectors[MAX_CONNECTORS];
> +	drmModePropertyBlobPtr edids[MAX_CONNECTORS];
> +	igt_display_t display;
> +
> +	uint32_t devid;
> +	int fw_fd;
> +};
> +
> +/* Stuff we query at different times so we can compare. */
> +struct compare_data {
> +	drmModeResPtr res;
> +	drmModeEncoderPtr encoders[MAX_ENCODERS];
> +	drmModeConnectorPtr connectors[MAX_CONNECTORS];
> +	drmModeCrtcPtr crtcs[MAX_CRTCS];
> +	drmModePropertyBlobPtr edids[MAX_CONNECTORS];
> +};
> +
> +struct modeset_params {
> +	uint32_t crtc_id;
> +	uint32_t connector_id;
> +	struct igt_fb fb;
> +	drmModeModeInfoPtr mode;
> +};
> +
> +struct data_t {
> +	int width;
> +	int height;
> +	uint32_t region;
> +};
> +
> +struct modeset_params lpsp_mode_params;
> +struct modeset_params non_lpsp_mode_params;
> +struct modeset_params *default_mode_params;
> +
> +static int modprobe(const char *driver)
> +{
> +	return igt_kmod_load(driver, NULL);
> +}
> +
> +/* If the read fails, then the machine doesn't support PC8+ residencies. */
> +static bool supports_pc8_plus_residencies(void)
> +{
> +	int rc;
> +	uint64_t val;
> +
> +	rc = pread(msr_fd, &val, sizeof(uint64_t), MSR_PC8_RES);
> +	if (rc != sizeof(val))
> +		return false;
> +	rc = pread(msr_fd, &val, sizeof(uint64_t), MSR_PC9_RES);
> +	if (rc != sizeof(val))
> +		return false;
> +	rc = pread(msr_fd, &val, sizeof(uint64_t), MSR_PC10_RES);
> +	if (rc != sizeof(val))
> +		return false;
> +
> +	return igt_pm_pc8_plus_residencies_enabled(msr_fd);
> +}
> +
> +static uint64_t get_residency(uint32_t type)
> +{
> +	int rc;
> +	uint64_t ret;
> +
> +	rc = pread(msr_fd, &ret, sizeof(uint64_t), type);
> +	igt_assert(rc == sizeof(ret));
> +
> +	return ret;
> +}
> +
> +static bool pc8_plus_residency_changed(unsigned int timeout_sec)
> +{
> +	uint64_t res_pc8, res_pc9, res_pc10;
> +
> +	res_pc8 = get_residency(MSR_PC8_RES);
> +	res_pc9 = get_residency(MSR_PC9_RES);
> +	res_pc10 = get_residency(MSR_PC10_RES);
> +
> +	return igt_wait(res_pc8 != get_residency(MSR_PC8_RES) ||
> +			res_pc9 != get_residency(MSR_PC9_RES) ||
> +			res_pc10 != get_residency(MSR_PC10_RES),
> +			timeout_sec * 1000, 100);
> +}
> +
> +static enum pc8_status get_pc8_status(void)
> +{
> +	ssize_t n_read;
> +	char buf[150]; /* The whole file has less than 100 chars. */
> +
> +	lseek(pc8_status_fd, 0, SEEK_SET);
> +	n_read = read(pc8_status_fd, buf, ARRAY_SIZE(buf));
> +	igt_assert(n_read >= 0);
> +	buf[n_read] = '\0';
> +
> +	if (strstr(buf, "\nEnabled: yes\n"))
> +		return PC8_ENABLED;
> +	else
> +		return PC8_DISABLED;
> +}
> +
> +static bool wait_for_pc8_status(enum pc8_status status)
> +{
> +	return igt_wait(get_pc8_status() == status, 10000, 100);
> +}
> +
> +static bool wait_for_suspended(void)
> +{
> +	if (has_pc8 && !has_runtime_pm) {
> +		return wait_for_pc8_status(PC8_ENABLED);
> +	} else {
> +		bool suspended = igt_wait_for_pm_status(IGT_RUNTIME_PM_STATUS_SUSPENDED);
> +
> +		if (!suspended) {
> +			/* Dump runtime pm status even if test skips */
> +			__igt_debugfs_dump(drm_fd, "i915_runtime_pm_status", IGT_LOG_INFO);
> +		}
> +
> +		return suspended;
> +	}
> +}
> +
> +static bool wait_for_active(void)
> +{
> +	if (has_pc8 && !has_runtime_pm)
> +		return wait_for_pc8_status(PC8_DISABLED);
> +	else
> +		return igt_wait_for_pm_status(IGT_RUNTIME_PM_STATUS_ACTIVE);
> +}
> +
> +static void disable_all_screens_dpms(struct mode_set_data *data)
> +{
> +	if (!data->res)
> +		return;
> +
> +	for (int i = 0; i < data->res->count_connectors; i++) {
> +		drmModeConnectorPtr c = data->connectors[i];
> +
> +		kmstest_set_connector_dpms(drm_fd, c, DRM_MODE_DPMS_OFF);
> +	}
> +}
> +
> +static void disable_all_screens(struct mode_set_data *data)
> +{
> +	if (data->res)
> +		kmstest_unset_all_crtcs(drm_fd, data->res);
> +}
> +
> +#define disable_all_screens_and_wait(data) do { \
> +	disable_all_screens(data); \
> +	igt_assert(wait_for_suspended()); \
> +} while (0)
> +
> +static void disable_or_dpms_all_screens(struct mode_set_data *data, bool dpms)
> +{
> +	if (dpms)
> +		disable_all_screens_dpms(&ms_data);
> +	else
> +		disable_all_screens(&ms_data);
> +}
> +
> +#define disable_or_dpms_all_screens_and_wait(data, dpms) do { \
> +	disable_or_dpms_all_screens((data), (dpms)); \
> +	igt_assert(wait_for_suspended()); \
> +} while (0)
> +
> +static bool init_modeset_params_for_type(struct mode_set_data *data,
> +					 struct modeset_params *params,
> +					 enum screen_type type)
> +{
> +	drmModeConnectorPtr connector = NULL;
> +	drmModeModeInfoPtr mode = NULL;
> +	igt_output_t *output = NULL;
> +	igt_display_t *display = &data->display;
> +
> +	if (!data->res || !display)
> +		return false;
> +
> +	for_each_connected_output(display, output) {
> +		drmModeConnectorPtr c = output->config.connector;
> +
> +		if (type == SCREEN_TYPE_LPSP &&
> +		     !i915_output_is_lpsp_capable(drm_fd, output))
> +			continue;
> +
> +		if (type == SCREEN_TYPE_NON_LPSP &&
> +		    i915_output_is_lpsp_capable(drm_fd, output))
> +			continue;
> +
> +		connector = c;
> +		mode = igt_output_get_mode(output);
> +		break;
> +	}
> +
> +	if (!connector || !mode)
> +		return false;
> +
> +	igt_create_pattern_fb(drm_fd, mode->hdisplay, mode->vdisplay,
> +			      DRM_FORMAT_XRGB8888, DRM_FORMAT_MOD_LINEAR,
> +			      &params->fb);
> +
> +	params->crtc_id = kmstest_find_crtc_for_connector(drm_fd, data->res,
> +							  connector, 0);
> +	params->connector_id = connector->connector_id;
> +	params->mode = mode;
> +
> +	return true;
> +}
> +
> +static void init_modeset_cached_params(struct mode_set_data *data)
> +{
> +	bool lpsp, non_lpsp;
> +
> +	lpsp = init_modeset_params_for_type(data, &lpsp_mode_params,
> +					    SCREEN_TYPE_LPSP);
> +	non_lpsp = init_modeset_params_for_type(data, &non_lpsp_mode_params,
> +						SCREEN_TYPE_NON_LPSP);
> +
> +	if (lpsp)
> +		default_mode_params = &lpsp_mode_params;
> +	else if (non_lpsp)
> +		default_mode_params = &non_lpsp_mode_params;
> +	else
> +		default_mode_params = NULL;
> +}
> +
> +static bool set_mode_for_params(struct modeset_params *params)
> +{
> +	int rc;
> +
> +	rc = drmModeSetCrtc(drm_fd, params->crtc_id, params->fb.fb_id, 0, 0,
> +			    &params->connector_id, 1, params->mode);
> +	return (rc == 0);
> +}
> +
> +#define set_mode_for_params_and_wait(params) do { \
> +	igt_assert(set_mode_for_params(params)); \
> +	igt_assert(wait_for_active()); \
> +} while (0)
> +
> +static bool enable_one_screen_with_type(struct mode_set_data *data,
> +					enum screen_type type)
> +{
> +	struct modeset_params *params = NULL;
> +
> +	switch (type) {
> +	case SCREEN_TYPE_ANY:
> +		params = default_mode_params;
> +		break;
> +	case SCREEN_TYPE_LPSP:
> +		params = &lpsp_mode_params;
> +		break;
> +	case SCREEN_TYPE_NON_LPSP:
> +		params = &non_lpsp_mode_params;
> +		break;
> +	default:
> +		igt_assert(0);
> +	}
> +
> +	if (!params)
> +		return false;
> +
> +	return set_mode_for_params(params);
> +}
> +
> +static void enable_one_screen(struct mode_set_data *data)
> +{
> +	/* SKIP if there are no connected screens. */
> +	igt_require(enable_one_screen_with_type(data, SCREEN_TYPE_ANY));
> +}
> +
> +#define enable_one_screen_and_wait(data) do { \
> +	enable_one_screen(data); \
> +	igt_assert(wait_for_active()); \
> +} while (0)
> +
> +static void
> +enable_one_screen_or_forcewake_get_and_wait(struct mode_set_data *data)
> +{
> +	bool headless;
> +
> +	/* Try to resume by enabling any type of display */
> +	headless = !enable_one_screen_with_type(data, SCREEN_TYPE_ANY);
> +
> +	/*
> +	 * Get User Forcewake to trigger rpm resume in case of headless
> +	 * as well as no display being connected.
> +	 */
> +	if (headless) {
> +		data->fw_fd = igt_open_forcewake_handle(drm_fd);
> +		igt_require(data->fw_fd > 0);
> +	}
> +	igt_assert(wait_for_active());
> +}
> +
> +static void forcewake_put(struct mode_set_data *data)
> +{
> +	if (data->fw_fd <= 0)
> +		return;
> +
> +	data->fw_fd = close(data->fw_fd);
> +	igt_assert_eq(data->fw_fd, 0);
> +}
> +
> +static drmModePropertyBlobPtr get_connector_edid(drmModeConnectorPtr connector,
> +						 int index)
> +{
> +	bool found;
> +	uint64_t prop_value;
> +	drmModePropertyPtr prop;
> +	drmModePropertyBlobPtr blob = NULL;
> +
> +	found = kmstest_get_property(drm_fd, connector->connector_id,
> +				     DRM_MODE_OBJECT_CONNECTOR, "EDID",
> +				     NULL, &prop_value, &prop);
> +
> +	if (found) {
> +		igt_assert(prop->flags & DRM_MODE_PROP_BLOB);
> +		igt_assert(prop->count_blobs == 0);
> +
> +		blob = drmModeGetPropertyBlob(drm_fd, prop_value);
> +
> +		drmModeFreeProperty(prop);
> +	}
> +
> +	return blob;
> +}
> +
> +static void init_mode_set_data(struct mode_set_data *data)
> +{
> +	data->res = drmModeGetResources(drm_fd);
> +	if (data->res) {
> +		igt_assert(data->res->count_connectors <= MAX_CONNECTORS);
> +		for (int i = 0; i < data->res->count_connectors; i++) {
> +			data->connectors[i] =
> +				drmModeGetConnector(drm_fd,
> +						    data->res->connectors[i]);
> +			data->edids[i] = get_connector_edid(data->connectors[i], i);
> +		}
> +
> +		kmstest_set_vt_graphics_mode();
> +		igt_display_require(&data->display, drm_fd);
> +	}
> +
> +	init_modeset_cached_params(&ms_data);
> +}
> +
> +static void fini_mode_set_data(struct mode_set_data *data)
> +{
> +	if (data->res) {
> +		for (int i = 0; i < data->res->count_connectors; i++) {
> +			drmModeFreeConnector(data->connectors[i]);
> +			drmModeFreePropertyBlob(data->edids[i]);
> +		}
> +		drmModeFreeResources(data->res);
> +		igt_display_fini(&data->display);
> +	}
> +}
> +
> +static void get_drm_info(struct compare_data *data)
> +{
> +	int i;
> +
> +	data->res = drmModeGetResources(drm_fd);
> +	if (!data->res)
> +		return;
> +
> +	igt_assert(data->res->count_connectors <= MAX_CONNECTORS);
> +	igt_assert(data->res->count_encoders <= MAX_ENCODERS);
> +	igt_assert(data->res->count_crtcs <= MAX_CRTCS);
> +
> +	for (i = 0; i < data->res->count_connectors; i++) {
> +		/* Don't use GetConnectorCurrent, we want to force a reprobe
> +		 * here. */
> +		data->connectors[i] = drmModeGetConnector(drm_fd,
> +						data->res->connectors[i]);
> +		data->edids[i] = get_connector_edid(data->connectors[i], i);
> +	}
> +	for (i = 0; i < data->res->count_encoders; i++)
> +		data->encoders[i] = drmModeGetEncoder(drm_fd,
> +						data->res->encoders[i]);
> +	for (i = 0; i < data->res->count_crtcs; i++)
> +		data->crtcs[i] = drmModeGetCrtc(drm_fd, data->res->crtcs[i]);
> +}
> +
> +static void free_drm_info(struct compare_data *data)
> +{
> +	int i;
> +
> +	if (!data->res)
> +		return;
> +
> +	for (i = 0; i < data->res->count_connectors; i++) {
> +		drmModeFreeConnector(data->connectors[i]);
> +		drmModeFreePropertyBlob(data->edids[i]);
> +	}
> +	for (i = 0; i < data->res->count_encoders; i++)
> +		drmModeFreeEncoder(data->encoders[i]);
> +	for (i = 0; i < data->res->count_crtcs; i++)
> +		drmModeFreeCrtc(data->crtcs[i]);
> +
> +	drmModeFreeResources(data->res);
> +}
> +
> +#define COMPARE(d1, d2, data) igt_assert_eq(d1->data, d2->data)
> +#define COMPARE_ARRAY(d1, d2, size, data) do { \
> +	for (i = 0; i < size; i++) \
> +		igt_assert(d1->data[i] == d2->data[i]); \
> +} while (0)
> +
> +static void assert_drm_resources_equal(struct compare_data *d1,
> +				       struct compare_data *d2)
> +{
> +	COMPARE(d1, d2, res->count_connectors);
> +	COMPARE(d1, d2, res->count_encoders);
> +	COMPARE(d1, d2, res->count_crtcs);
> +	COMPARE(d1, d2, res->min_width);
> +	COMPARE(d1, d2, res->max_width);
> +	COMPARE(d1, d2, res->min_height);
> +	COMPARE(d1, d2, res->max_height);
> +}
> +
> +static void assert_modes_equal(drmModeModeInfoPtr m1, drmModeModeInfoPtr m2)
> +{
> +	COMPARE(m1, m2, clock);
> +	COMPARE(m1, m2, hdisplay);
> +	COMPARE(m1, m2, hsync_start);
> +	COMPARE(m1, m2, hsync_end);
> +	COMPARE(m1, m2, htotal);
> +	COMPARE(m1, m2, hskew);
> +	COMPARE(m1, m2, vdisplay);
> +	COMPARE(m1, m2, vsync_start);
> +	COMPARE(m1, m2, vsync_end);
> +	COMPARE(m1, m2, vtotal);
> +	COMPARE(m1, m2, vscan);
> +	COMPARE(m1, m2, vrefresh);
> +	COMPARE(m1, m2, flags);
> +	COMPARE(m1, m2, type);
> +	igt_assert(strcmp(m1->name, m2->name) == 0);
> +}
> +
> +static void assert_drm_connectors_equal(drmModeConnectorPtr c1,
> +					drmModeConnectorPtr c2)
> +{
> +	int i;
> +
> +	COMPARE(c1, c2, connector_id);
> +	COMPARE(c1, c2, connector_type);
> +	COMPARE(c1, c2, connector_type_id);
> +	COMPARE(c1, c2, mmWidth);
> +	COMPARE(c1, c2, mmHeight);
> +	COMPARE(c1, c2, count_modes);
> +	COMPARE(c1, c2, count_props);
> +	COMPARE(c1, c2, count_encoders);
> +	COMPARE_ARRAY(c1, c2, c1->count_props, props);
> +	COMPARE_ARRAY(c1, c2, c1->count_encoders, encoders);
> +
> +	for (i = 0; i < c1->count_modes; i++)
> +		assert_modes_equal(&c1->modes[0], &c2->modes[0]);
> +}
> +
> +static void assert_drm_encoders_equal(drmModeEncoderPtr e1,
> +				      drmModeEncoderPtr e2)
> +{
> +	COMPARE(e1, e2, encoder_id);
> +	COMPARE(e1, e2, encoder_type);
> +	COMPARE(e1, e2, possible_crtcs);
> +	COMPARE(e1, e2, possible_clones);
> +}
> +
> +static void assert_drm_crtcs_equal(drmModeCrtcPtr c1, drmModeCrtcPtr c2)
> +{
> +	COMPARE(c1, c2, crtc_id);
> +}
> +
> +static void assert_drm_edids_equal(drmModePropertyBlobPtr e1,
> +				   drmModePropertyBlobPtr e2)
> +{
> +	if (!e1 && !e2)
> +		return;
> +	igt_assert(e1 && e2);
> +
> +	COMPARE(e1, e2, length);
> +
> +	igt_assert(memcmp(e1->data, e2->data, e1->length) == 0);
> +}
> +
> +static void assert_drm_infos_equal(struct compare_data *d1,
> +				   struct compare_data *d2)
> +{
> +	int i;
> +
> +	if (d1->res == d2->res)
> +		return;
> +
> +	igt_assert(d1->res);
> +	igt_assert(d2->res);
> +
> +	assert_drm_resources_equal(d1, d2);
> +
> +	for (i = 0; i < d1->res->count_connectors; i++) {
> +		assert_drm_connectors_equal(d1->connectors[i],
> +					    d2->connectors[i]);
> +		assert_drm_edids_equal(d1->edids[i], d2->edids[i]);
> +	}
> +
> +	for (i = 0; i < d1->res->count_encoders; i++)
> +		assert_drm_encoders_equal(d1->encoders[i], d2->encoders[i]);
> +
> +	for (i = 0; i < d1->res->count_crtcs; i++)
> +		assert_drm_crtcs_equal(d1->crtcs[i], d2->crtcs[i]);
> +}
> +
> +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))
> +		return;
> +
> +	/* Make sure our Kernel supports MSR and the module is loaded. */
> +	igt_require(modprobe("msr") == 0);
> +
> +	msr_fd = open("/dev/cpu/0/msr", O_RDONLY);
> +	igt_assert_f(msr_fd >= 0,
> +		     "Can't open /dev/cpu/0/msr.\n");
> +
> +	/* Non-ULT machines don't support PC8+. */
> +	if (!supports_pc8_plus_residencies())
> +		return;
> +
> +	pc8_status_fd = openat(debugfs, "i915_pc8_status", O_RDONLY);
> +	if (pc8_status_fd == -1)
> +		pc8_status_fd = openat(debugfs,
> +				       "i915_runtime_pm_status", O_RDONLY);
> +	igt_assert_f(pc8_status_fd >= 0,
> +		     "Can't open /sys/kernel/debug/dri/0/i915_runtime_pm_status");
> +
> +	has_pc8 = true;
> +}
> +
> +static void dump_file(int dir, const char *filename)
> +{
> +	char *contents;
> +
> +	contents = igt_sysfs_get(dir, filename);
> +	if (!contents)
> +		return;
> +
> +	igt_info("%s:\n%s\n", filename, contents);
> +	free(contents);
> +}
> +
> +static bool setup_environment(bool display_enabled)
> +{
> +	if (has_runtime_pm)
> +		goto out;
> +
> +	drm_fd = __drm_open_driver(DRIVER_INTEL);
> +	igt_require(drm_fd != -1);
> +	igt_device_set_master(drm_fd);
> +
> +	debugfs = igt_debugfs_dir(drm_fd);
> +	igt_require(debugfs != -1);
> +
> +	ms_data.devid = intel_get_drm_devid(drm_fd);
> +
> +	if (display_enabled)
> +		init_mode_set_data(&ms_data);
> +
> +	igt_pm_enable_sata_link_power_management();
> +
> +	has_runtime_pm = igt_setup_runtime_pm(drm_fd);
> +	setup_pc8();
> +
> +	igt_info("Runtime PM support: %d\n", has_runtime_pm);
> +	igt_info("PC8 residency support: %d\n", has_pc8);
> +	igt_require(has_runtime_pm);
> +	igt_require(igt_pm_dmc_loaded(debugfs));
> +
> +out:
> +	if (display_enabled)
> +		disable_all_screens(&ms_data);
> +	dump_file(debugfs, "i915_runtime_pm_status");
> +
> +	return wait_for_suspended();
> +}
> +
> +static void teardown_environment(bool display_enabled)
> +{
> +	close(msr_fd);
> +	if (has_pc8)
> +		close(pc8_status_fd);
> +
> +	igt_restore_runtime_pm();
> +
> +	igt_pm_restore_sata_link_power_management();
> +
> +	if (display_enabled)
> +		fini_mode_set_data(&ms_data);
> +
> +	close(debugfs);
> +	close(drm_fd);
> +
> +	has_runtime_pm = false;
> +}
> +
> +static void modeset_subtest(enum screen_type type, int rounds, int wait_flags)
> +{
> +	int i;
> +
> +	if (wait_flags & WAIT_PC8_RES)
> +		igt_require(has_pc8);
> +
> +	if (wait_flags & WAIT_EXTRA)
> +		rounds /= 2;
> +
> +	for (i = 0; i < rounds; i++) {
> +		if (wait_flags & USE_DPMS)
> +			disable_all_screens_dpms(&ms_data);
> +		else
> +			disable_all_screens(&ms_data);
> +
> +		if (wait_flags & WAIT_STATUS)
> +			igt_assert(wait_for_suspended());
> +		if (wait_flags & WAIT_PC8_RES)
> +			igt_assert(pc8_plus_residency_changed(30));
> +		if (wait_flags & WAIT_EXTRA)
> +			sleep(5);
> +
> +		/* If we skip this line it's because the type of screen we want
> +		 * is not connected. */
> +		igt_require(enable_one_screen_with_type(&ms_data, type));
> +		if (wait_flags & WAIT_STATUS)
> +			igt_assert(wait_for_active());
> +		if (wait_flags & WAIT_PC8_RES)
> +			igt_assert(!pc8_plus_residency_changed(5));
> +		if (wait_flags & WAIT_EXTRA)
> +			sleep(5);
> +	}
> +}
> +
> +/* Test of the DRM resources reported by the IOCTLs are still the same. This
> + * ensures we still see the monitors with the same eyes. We get the EDIDs and
> + * compare them, which ensures we use DP AUX or GMBUS depending on what's
> + * connected. */
> +static void drm_resources_equal_subtest(void)
> +{
> +	struct compare_data pre_suspend, during_suspend, post_suspend;
> +
> +	enable_one_screen_and_wait(&ms_data);
> +	get_drm_info(&pre_suspend);
> +	igt_assert(wait_for_active());
> +
> +	disable_all_screens_and_wait(&ms_data);
> +	get_drm_info(&during_suspend);
> +	igt_assert(wait_for_suspended());
> +
> +	enable_one_screen_and_wait(&ms_data);
> +	get_drm_info(&post_suspend);
> +	igt_assert(wait_for_active());
> +
> +	assert_drm_infos_equal(&pre_suspend, &during_suspend);
> +	assert_drm_infos_equal(&pre_suspend, &post_suspend);
> +
> +	free_drm_info(&pre_suspend);
> +	free_drm_info(&during_suspend);
> +	free_drm_info(&post_suspend);
> +}
> +
> +static bool find_i2c_path(const char *connector_name,
> +			  char *i2c_path, size_t i2c_path_size)
> +{
> +	struct dirent *dirent;
> +	DIR *dir;
> +	int sysfs_card_fd = igt_sysfs_open(drm_fd);
> +	int connector_fd = -1;
> +	bool found_i2c_file = false;
> +	ssize_t r;
> +
> +	dir = fdopendir(sysfs_card_fd);
> +	igt_assert(dir);
> +
> +	while ((dirent = readdir(dir))) {
> +		/* Skip "cardx-" prefix */
> +		char *dirname = strchr(dirent->d_name, '-');
> +		if (dirname==NULL)
> +			continue;
> +		++dirname;
> +
> +		if (strcmp(dirname, connector_name) == 0) {
> +			connector_fd = openat(sysfs_card_fd, dirent->d_name, O_RDONLY);
> +			break;
> +		}
> +	}
> +	closedir(dir);
> +
> +	if (connector_fd < 0)
> +		return false;
> +
> +	/* try the standard "ddc" symlink first */
> +	r = readlinkat(connector_fd, "ddc", i2c_path, i2c_path_size);
> +	if (r > 0 && r != i2c_path_size) {
> +		int num;
> +
> +		i2c_path[r] = '\0';
> +
> +		if (sscanf(basename(i2c_path), "i2c-%d", &num) == 1) {
> +			snprintf(i2c_path, i2c_path_size, "/dev/i2c-%d", num);
> +			return true;
> +		}
> +	}
> +
> +	dir = fdopendir(connector_fd);
> +	igt_assert(dir);
> +
> +	/* fall back to old "i2c-?" symlink */
> +	/* FIXME nuke this at some point */
> +	while ((dirent = readdir(dir))) {
> +		if (strncmp(dirent->d_name, "i2c-", 4) == 0) {
> +			sprintf(i2c_path, "/dev/%s", dirent->d_name);
> +			found_i2c_file = true;
> +		}
> +	}
> +	closedir(dir);
> +	return found_i2c_file;
> +}
> +
> +static bool i2c_read_edid(const char *connector_name, unsigned char *edid)
> +{
> +	char i2c_path[PATH_MAX];
> +	bool result;
> +	int rc, fd;
> +	struct i2c_msg msgs[] = {
> +		{ /* Start at 0. */
> +			.addr = 0x50,
> +			.flags = 0,
> +			.len = 1,
> +			.buf = edid,
> +		}, { /* Now read the EDID. */
> +			.addr = 0x50,
> +			.flags = I2C_M_RD,
> +			.len = 128,
> +			.buf = edid,
> +		}
> +	};
> +	struct i2c_rdwr_ioctl_data msgset = {
> +		.msgs = msgs,
> +		.nmsgs = 2,
> +	};
> +
> +	result = find_i2c_path(connector_name, i2c_path, sizeof(i2c_path));
> +	if (!result)
> +		return false;
> +
> +	igt_info("Testing %s %s\n", connector_name, i2c_path);
> +
> +	fd = open(i2c_path, O_RDWR);
> +	igt_assert_neq(fd, -1);
> +
> +	rc = ioctl(fd, I2C_RDWR, &msgset);
> +	if (rc==-1) {
> +		igt_debug("I2C access failed with errno %d, %s\n",
> +				errno, strerror(errno));
> +		errno = 0;
> +	}
> +
> +	close(fd);
> +	return rc >= 0;
> +}
> +
> +static void format_hex_string(const unsigned char edid[static EDID_BLOCK_SIZE],
> +			      char buf[static EDID_BLOCK_SIZE * 5 + 1])
> +{
> +	for (int i = 0; i < EDID_BLOCK_SIZE; ++i)
> +		sprintf(buf+i*5, "0x%02x ", edid[i]);
> +}
> +
> +static bool is_mst_connector(int fd, uint32_t connector_id)
> +{
> +	return kmstest_get_property(fd, connector_id,
> +				    DRM_MODE_OBJECT_CONNECTOR,
> +				    "PATH", NULL, NULL, NULL);
> +}
> +
> +static void test_i2c(struct mode_set_data *data)
> +{
> +	bool edid_mistmach_i2c_vs_drm = false;
> +	igt_display_t display;
> +	igt_display_require(&display, drm_fd);
> +
> +	for (int i = 0; i < data->res->count_connectors; i++) {
> +		unsigned char *drm_edid = data->edids[i] ? data->edids[i]->data : NULL;
> +		unsigned char i2c_edid[EDID_BLOCK_SIZE] = {};
> +
> +		igt_output_t *output = igt_output_from_connector(&display,
> +								 data->connectors[i]);
> +		char *connector_name = (char *) igt_output_name(output);
> +
> +		bool got_i2c_edid = i2c_read_edid(connector_name, i2c_edid);
> +		bool got_drm_edid = drm_edid != NULL;
> +		bool is_vga = data->connectors[i]->connector_type == DRM_MODE_CONNECTOR_VGA;
> +
> +		bool edids_equal;
> +
> +		if (data->connectors[i]->connection != DRM_MODE_CONNECTED ||
> +		    is_mst_connector(drm_fd, data->connectors[i]->connector_id))
> +			continue;
> +
> +		/* We fail to detect some VGA monitors using our i2c method. If you look
> +		 * at the dmesg of these cases, you'll see the Kernel complaining about
> +		 * the EDID reading mostly FFs and then disabling bit-banging. Since we
> +		 * don't want to reimplement everything the Kernel does, let's just
> +		 * accept the fact that some VGA outputs won't be properly detected. */
> +		if (is_vga)
> +			continue;
> +
> +		if (!got_i2c_edid && !got_drm_edid)
> +			continue;
> +
> +		if (got_i2c_edid && got_drm_edid)
> +			edids_equal = (0 == memcmp(drm_edid, i2c_edid, EDID_BLOCK_SIZE));
> +		else
> +			edids_equal = false;
> +
> +
> +		if (!edids_equal) {
> +			char buf[5 * EDID_BLOCK_SIZE + 1];
> +			igt_critical("Detected EDID mismatch on connector %s\n",
> +				     connector_name);
> +
> +			if(got_i2c_edid)
> +				format_hex_string(i2c_edid, buf);
> +			else
> +				sprintf(buf, "NULL");
> +
> +			igt_critical("i2c: %s\n", buf);
> +
> +			if(got_drm_edid)
> +				format_hex_string(drm_edid, buf);
> +			else
> +				sprintf(buf, "NULL");
> +
> +			igt_critical("drm: %s\n", buf);
> +
> +			edid_mistmach_i2c_vs_drm = true;
> +		}
> +	}
> +	igt_fail_on_f(edid_mistmach_i2c_vs_drm,
> +			"There is an EDID mismatch between i2c and DRM!\n");
> +}
> +
> +static void i2c_subtest_check_environment(void)
> +{
> +	int i2c_dev_files = 0;
> +	DIR *dev_dir;
> +	struct dirent *dirent;
> +
> +	/* Make sure the /dev/i2c-* files exist. */
> +	igt_require(modprobe("i2c-dev") == 0);
> +
> +	dev_dir = opendir("/dev");
> +	igt_assert(dev_dir);
> +	while ((dirent = readdir(dev_dir))) {
> +		if (strncmp(dirent->d_name, "i2c-", 4) == 0)
> +			i2c_dev_files++;
> +	}
> +	closedir(dev_dir);
> +	igt_require(i2c_dev_files);
> +}
> +
> +/* Try to use raw I2C, which also needs interrupts. */
> +static void i2c_subtest(void)
> +{
> +	i2c_subtest_check_environment();
> +
> +	enable_one_screen_and_wait(&ms_data);
> +
> +	disable_all_screens_and_wait(&ms_data);
> +	test_i2c(&ms_data);
> +	igt_assert(wait_for_suspended());
> +
> +	enable_one_screen(&ms_data);
> +}
> +
> +struct read_entry_elapsed {
> +	uint64_t elapsed;
> +	char *path;
> +} max_read_entry;
> +
> +static bool device_in_pci_d3(struct pci_device *pci_dev)
> +{
> +	uint16_t val;
> +	int rc;
> +
> +	rc = pci_device_cfg_read_u16(pci_dev, &val, 0xd4);
> +	igt_assert_eq(rc, 0);
> +
> +	igt_debug("%s: PCI D3 state=%d\n", __func__, val & 0x3);
> +	return (val & 0x3) == 0x3;
> +}
> +
> +static void pci_d3_state_subtest(void)
> +{
> +	struct pci_device *pci_dev, *bridge_pci_dev;
> +
> +	igt_require(has_runtime_pm);
> +
> +	pci_dev = igt_device_get_pci_device(drm_fd);
> +	bridge_pci_dev = pci_device_get_parent_bridge(pci_dev);
> +
> +	disable_all_screens_and_wait(&ms_data);
> +	igt_assert(igt_wait(device_in_pci_d3(pci_dev), 2000, 100));
> +
> +	if (gem_has_lmem(drm_fd))
> +		igt_require_f(pci_device_has_kernel_driver(bridge_pci_dev),
> +			      "pci bridge device does not bind with pcieport driver\n");
> +
> +	enable_one_screen_or_forcewake_get_and_wait(&ms_data);
> +	igt_assert(!device_in_pci_d3(pci_dev));
> +	forcewake_put(&ms_data);
> +}
> +
> +__noreturn static void stay_subtest(void)
> +{
> +	disable_all_screens_and_wait(&ms_data);
> +
> +	while (1)
> +		sleep(600);
> +}
> +
> +static void system_suspend_modeset_subtest(void)
> +{
> +	disable_all_screens_and_wait(&ms_data);
> +	igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE);
> +	igt_assert(wait_for_suspended());
> +
> +	enable_one_screen_and_wait(&ms_data);
> +	disable_all_screens_and_wait(&ms_data);
> +}
> +
> +/* Enable a screen, activate DPMS, then do a modeset. At some point our driver
> + * produced WARNs on this case. */
> +static void dpms_mode_unset_subtest(enum screen_type type)
> +{
> +	disable_all_screens_and_wait(&ms_data);
> +
> +	igt_require(enable_one_screen_with_type(&ms_data, type));
> +	igt_assert(wait_for_active());
> +
> +	disable_all_screens_dpms(&ms_data);
> +	igt_assert(wait_for_suspended());
> +
> +	disable_all_screens_and_wait(&ms_data);
> +}
> +
> +static void fill_igt_fb(struct igt_fb *fb, uint32_t color)
> +{
> +	int i;
> +	uint32_t *ptr;
> +
> +	ptr = gem_mmap__device_coherent(drm_fd, fb->gem_handle, 0, fb->size, PROT_WRITE);
> +	for (i = 0; i < fb->size/sizeof(uint32_t); i++)
> +		ptr[i] = color;
> +	igt_assert(munmap(ptr, fb->size) == 0);
> +}
> +
> +/* At some point, this test triggered WARNs in the Kernel. */
> +static void cursor_subtest(bool dpms)
> +{
> +	int rc;
> +	struct igt_fb cursor_fb1, cursor_fb2, cursor_fb3;
> +	uint32_t crtc_id;
> +
> +	disable_all_screens_and_wait(&ms_data);
> +
> +	igt_require(default_mode_params);
> +	crtc_id = default_mode_params->crtc_id;
> +
> +	igt_create_fb(drm_fd, 64, 64, DRM_FORMAT_ARGB8888,
> +		      DRM_FORMAT_MOD_LINEAR, &cursor_fb1);
> +	igt_create_fb(drm_fd, 64, 64, DRM_FORMAT_ARGB8888,
> +		      DRM_FORMAT_MOD_LINEAR, &cursor_fb2);
> +	igt_create_fb(drm_fd, 64, 64, DRM_FORMAT_XRGB8888,
> +		      I915_FORMAT_MOD_X_TILED, &cursor_fb3);
> +
> +	fill_igt_fb(&cursor_fb1, 0xFF00FFFF);
> +	fill_igt_fb(&cursor_fb2, 0xFF00FF00);
> +	fill_igt_fb(&cursor_fb3, 0xFFFF0000);
> +
> +	set_mode_for_params_and_wait(default_mode_params);
> +
> +	rc = drmModeSetCursor(drm_fd, crtc_id, cursor_fb1.gem_handle,
> +			      cursor_fb1.width, cursor_fb1.height);
> +	igt_assert_eq(rc, 0);
> +	rc = drmModeMoveCursor(drm_fd, crtc_id, 0, 0);
> +	igt_assert_eq(rc, 0);
> +	igt_assert(wait_for_active());
> +
> +	disable_or_dpms_all_screens_and_wait(&ms_data, dpms);
> +
> +	/* First, just move the cursor. */
> +	rc = drmModeMoveCursor(drm_fd, crtc_id, 1, 1);
> +	igt_assert_eq(rc, 0);
> +	igt_assert(wait_for_suspended());
> +
> +	/* Then unset it, and set a new one. */
> +	rc = drmModeSetCursor(drm_fd, crtc_id, 0, 0, 0);
> +	igt_assert_eq(rc, 0);
> +	igt_assert(wait_for_suspended());
> +
> +	rc = drmModeSetCursor(drm_fd, crtc_id, cursor_fb2.gem_handle,
> +			      cursor_fb1.width, cursor_fb2.height);
> +	igt_assert_eq(rc, 0);
> +	igt_assert(wait_for_suspended());
> +
> +	/* Move the new cursor. */
> +	rc = drmModeMoveCursor(drm_fd, crtc_id, 2, 2);
> +	igt_assert_eq(rc, 0);
> +	igt_assert(wait_for_suspended());
> +
> +	/* Now set a new one without unsetting the previous one. */
> +	rc = drmModeSetCursor(drm_fd, crtc_id, cursor_fb1.gem_handle,
> +			      cursor_fb1.width, cursor_fb1.height);
> +	igt_assert_eq(rc, 0);
> +	igt_assert(wait_for_suspended());
> +
> +	/* Cursor 3 was created with tiling and painted with a GTT mmap, so
> +	 * hopefully it has some fences around it. */
> +	rc = drmModeRmFB(drm_fd, cursor_fb3.fb_id);
> +	igt_assert_eq(rc, 0);
> +	__gem_set_tiling(drm_fd, cursor_fb3.gem_handle, false, cursor_fb3.strides[0]);
> +	igt_assert(wait_for_suspended());
> +
> +	rc = drmModeSetCursor(drm_fd, crtc_id, cursor_fb3.gem_handle,
> +			      cursor_fb3.width, cursor_fb3.height);
> +	igt_assert_eq(rc, 0);
> +	igt_assert(wait_for_suspended());
> +
> +	/* Make sure nothing remains for the other tests. */
> +	rc = drmModeSetCursor(drm_fd, crtc_id, 0, 0, 0);
> +	igt_assert_eq(rc, 0);
> +	igt_assert(wait_for_suspended());
> +}
> +
> +static enum plane_type get_plane_type(uint32_t plane_id)
> +{
> +	int i;
> +	bool found;
> +	uint64_t prop_value;
> +	drmModePropertyPtr prop;
> +	const char *enum_name = NULL;
> +	enum plane_type type;
> +
> +	found = kmstest_get_property(drm_fd, plane_id, DRM_MODE_OBJECT_PLANE,
> +				     "type", NULL, &prop_value, &prop);
> +	igt_assert(found);
> +
> +	igt_assert(prop->flags & DRM_MODE_PROP_ENUM);
> +	igt_assert(prop_value < prop->count_enums);
> +
> +	for (i = 0; i < prop->count_enums; i++) {
> +		if (prop->enums[i].value == prop_value) {
> +			enum_name = prop->enums[i].name;
> +			break;
> +		}
> +	}
> +	igt_assert(enum_name);
> +
> +	if (strcmp(enum_name, "Overlay") == 0)
> +		type = PLANE_OVERLAY;
> +	else if (strcmp(enum_name, "Primary") == 0)
> +		type = PLANE_PRIMARY;
> +	else if (strcmp(enum_name, "Cursor") == 0)
> +		type = PLANE_CURSOR;
> +	else
> +		igt_assert(0);
> +
> +	drmModeFreeProperty(prop);
> +
> +	return type;
> +}
> +
> +static void test_one_plane(bool dpms, uint32_t plane_id,
> +			   enum plane_type plane_type)
> +{
> +	int rc;
> +	uint32_t plane_format, plane_w, plane_h;
> +	uint32_t crtc_id;
> +	struct igt_fb plane_fb1, plane_fb2;
> +	int32_t crtc_x = 0, crtc_y = 0;
> +	uint64_t modifier;
> +
> +	disable_all_screens_and_wait(&ms_data);
> +
> +	crtc_id = default_mode_params->crtc_id;
> +
> +	switch (plane_type) {
> +	case PLANE_OVERLAY:
> +		plane_format = DRM_FORMAT_XRGB8888;
> +		plane_w = 64;
> +		plane_h = 64;
> +		modifier = I915_FORMAT_MOD_X_TILED;
> +		break;
> +	case PLANE_PRIMARY:
> +		plane_format = DRM_FORMAT_XRGB8888;
> +		plane_w = default_mode_params->mode->hdisplay;
> +		plane_h = default_mode_params->mode->vdisplay;
> +		modifier = I915_FORMAT_MOD_X_TILED;
> +		break;
> +	case PLANE_CURSOR:
> +		plane_format = DRM_FORMAT_ARGB8888;
> +		plane_w = 64;
> +		plane_h = 64;
> +		modifier = DRM_FORMAT_MOD_LINEAR;
> +		break;
> +	default:
> +		igt_assert(0);
> +		break;
> +	}
> +
> +	igt_create_fb(drm_fd, plane_w, plane_h, plane_format, modifier,
> +		      &plane_fb1);
> +	igt_create_fb(drm_fd, plane_w, plane_h, plane_format, modifier,
> +		      &plane_fb2);
> +	fill_igt_fb(&plane_fb1, 0xFF00FFFF);
> +	fill_igt_fb(&plane_fb2, 0xFF00FF00);
> +
> +	set_mode_for_params_and_wait(default_mode_params);
> +
> +	rc = drmModeSetPlane(drm_fd, plane_id, crtc_id, plane_fb1.fb_id, 0,
> +			     0, 0, plane_fb1.width, plane_fb1.height,
> +			     0 << 16, 0 << 16, plane_fb1.width << 16,
> +			     plane_fb1.height << 16);
> +	igt_assert_eq(rc, 0);
> +
> +	disable_or_dpms_all_screens_and_wait(&ms_data, dpms);
> +
> +	/* Just move the plane around. */
> +	if (plane_type != PLANE_PRIMARY) {
> +		crtc_x++;
> +		crtc_y++;
> +	}
> +	rc = drmModeSetPlane(drm_fd, plane_id, crtc_id, plane_fb1.fb_id, 0,
> +			     crtc_x, crtc_y, plane_fb1.width, plane_fb1.height,
> +			     0 << 16, 0 << 16, plane_fb1.width << 16,
> +			     plane_fb1.height << 16);
> +	igt_assert_eq(rc, 0);
> +	igt_assert(wait_for_suspended());
> +
> +	/* Unset, then change the plane. */
> +	rc = drmModeSetPlane(drm_fd, plane_id, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
> +	igt_assert_eq(rc, 0);
> +	igt_assert(wait_for_suspended());
> +
> +	rc = drmModeSetPlane(drm_fd, plane_id, crtc_id, plane_fb2.fb_id, 0,
> +			     crtc_x, crtc_y, plane_fb2.width, plane_fb2.height,
> +			     0 << 16, 0 << 16, plane_fb2.width << 16,
> +			     plane_fb2.height << 16);
> +	igt_assert_eq(rc, 0);
> +	igt_assert(wait_for_suspended());
> +
> +	/* Now change the plane without unsetting first. */
> +	rc = drmModeSetPlane(drm_fd, plane_id, crtc_id, plane_fb1.fb_id, 0,
> +			     crtc_x, crtc_y, plane_fb1.width, plane_fb1.height,
> +			     0 << 16, 0 << 16, plane_fb1.width << 16,
> +			     plane_fb1.height << 16);
> +	igt_assert_eq(rc, 0);
> +	igt_assert(wait_for_suspended());
> +
> +	/* Make sure nothing remains for the other tests. */
> +	rc = drmModeSetPlane(drm_fd, plane_id, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
> +	igt_assert_eq(rc, 0);
> +	igt_assert(wait_for_suspended());
> +}
> +
> +/* This one also triggered WARNs on our driver at some point in time. */
> +static void planes_subtest(bool universal, bool dpms)
> +{
> +	int i, crtc_idx;
> +	drmModePlaneResPtr planes;
> +
> +	igt_require(default_mode_params);
> +	crtc_idx = kmstest_get_crtc_idx(ms_data.res,
> +					default_mode_params->crtc_id);
> +
> +	igt_assert_eq(drmSetClientCap(drm_fd, DRM_CLIENT_CAP_UNIVERSAL_PLANES,
> +				      universal), 0);
> +
> +	planes = drmModeGetPlaneResources(drm_fd);
> +	for (i = 0; i < planes->count_planes; i++) {
> +		drmModePlanePtr plane;
> +
> +		plane = drmModeGetPlane(drm_fd, planes->planes[i]);
> +		igt_assert(plane);
> +
> +		if (plane->possible_crtcs & (1 << crtc_idx)) {
> +			enum plane_type type;
> +
> +			type = universal ? get_plane_type(plane->plane_id) :
> +					   PLANE_OVERLAY;
> +			igt_dynamic_f("plane-%d", plane->plane_id)
> +				test_one_plane(dpms, plane->plane_id, type);
> +		}
> +		drmModeFreePlane(plane);
> +	}
> +	drmModeFreePlaneResources(planes);
> +
> +	igt_assert_eq(drmSetClientCap(drm_fd, DRM_CLIENT_CAP_UNIVERSAL_PLANES,
> +				      1), 0);
> +}
> +
> +static void fences_subtest(void)
> +{
> +	int i;
> +	uint32_t *buf_ptr;
> +	uint32_t tiling = false, swizzle;
> +	struct modeset_params params;
> +	drmModeConnectorPtr c = NULL;
> +
> +	disable_all_screens_and_wait(&ms_data);
> +
> +	igt_require(default_mode_params);
> +	params.crtc_id = default_mode_params->crtc_id;
> +	params.connector_id = default_mode_params->connector_id;
> +	params.mode = default_mode_params->mode;
> +	igt_create_fb(drm_fd, params.mode->hdisplay, params.mode->vdisplay,
> +		      DRM_FORMAT_XRGB8888, I915_FORMAT_MOD_X_TILED,
> +		      &params.fb);
> +
> +	/* Even though we passed "true" as the tiling argument, double-check
> +	 * that the fb is really tiled. */
> +	gem_get_tiling(drm_fd, params.fb.gem_handle, &tiling, &swizzle);
> +	igt_assert(tiling);
> +
> +	buf_ptr = gem_mmap__gtt(drm_fd, params.fb.gem_handle, params.fb.size,
> +				PROT_WRITE | PROT_READ);
> +	for (i = 0; i < params.fb.size/sizeof(uint32_t); i++)
> +		buf_ptr[i] = i;
> +
> +	set_mode_for_params_and_wait(&params);
> +
> +	disable_or_dpms_all_screens_and_wait(&ms_data, true);
> +
> +	for (i = 0; i < params.fb.size/sizeof(uint32_t); i++)
> +		igt_assert_eq(buf_ptr[i], i);
> +	igt_assert(wait_for_suspended());
> +
> +	for (i = 0; i < ms_data.res->count_connectors; i++)
> +		if (ms_data.connectors[i]->connector_id ==
> +		    params.connector_id)
> +			c = ms_data.connectors[i];
> +	igt_assert(c);
> +
> +	kmstest_set_connector_dpms(drm_fd, c, DRM_MODE_DPMS_ON);
> +	igt_assert(wait_for_active());
> +
> +	for (i = 0; i < params.fb.size/sizeof(uint32_t); i++)
> +		igt_assert_eq(buf_ptr[i], i);
> +
> +	igt_assert(munmap(buf_ptr, params.fb.size) == 0);
> +}
> +
> +int rounds = 10;
> +bool stay = false;
> +
> +static int opt_handler(int opt, int opt_index, void *data)
> +{
> +	switch (opt) {
> +	case 'l':
> +		rounds = 50;
> +		break;
> +	case 's':
> +		stay = true;
> +		break;
> +	default:
> +		return IGT_OPT_HANDLER_ERROR;
> +	}
> +
> +	return IGT_OPT_HANDLER_SUCCESS;
> +}
> +
> +const char *help_str =
> +	"  --stress\t\tMake the stress-tests more stressful.\n"
> +	"  --stay\t\tDisable all screen and try to go into runtime pm. Useful for debugging.";
> +static struct option long_options[] = {
> +	{"stress", 0, 0, 'l'},
> +	{"stay", 0, 0, 's'},
> +	{ 0, 0, 0, 0 }
> +};
> +
> +igt_main_args("", long_options, help_str, opt_handler, NULL)
> +{
> +	igt_fixture {
> +		igt_require(setup_environment(true));
> +	}
> +
> +	if (stay)
> +		igt_subtest("stay")
> +			stay_subtest();
> +
> +	/* Essential things */
> +	igt_subtest("drm-resources-equal")
> +		drm_resources_equal_subtest();
> +	igt_subtest("basic-pci-d3-state")
> +		pci_d3_state_subtest();
> +
> +	/* Basic modeset */
> +	igt_subtest("modeset-lpsp")
> +		modeset_subtest(SCREEN_TYPE_LPSP, 1, WAIT_STATUS);
> +	igt_subtest("modeset-non-lpsp")
> +		modeset_subtest(SCREEN_TYPE_NON_LPSP, 1, WAIT_STATUS);
> +	igt_subtest("dpms-lpsp")
> +		modeset_subtest(SCREEN_TYPE_LPSP, 1, WAIT_STATUS | USE_DPMS);
> +	igt_subtest("dpms-non-lpsp")
> +		modeset_subtest(SCREEN_TYPE_NON_LPSP, 1, WAIT_STATUS | USE_DPMS);
> +
> +	/* Planes and cursors */
> +	igt_subtest("cursor")
> +		cursor_subtest(false);
> +	igt_subtest("cursor-dpms")
> +		cursor_subtest(true);
> +	igt_subtest_with_dynamic("legacy-planes")
> +		planes_subtest(false, false);
> +	igt_subtest_with_dynamic("legacy-planes-dpms")
> +		planes_subtest(false, true);
> +	igt_subtest_with_dynamic("universal-planes")
> +		planes_subtest(true, false);
> +	igt_subtest_with_dynamic("universal-planes-dpms")
> +		planes_subtest(true, true);
> +
> +	/* Misc */
> +	igt_subtest("i2c")
> +		i2c_subtest();
> +	igt_subtest("dpms-mode-unset-lpsp")
> +		dpms_mode_unset_subtest(SCREEN_TYPE_LPSP);
> +	igt_subtest("dpms-mode-unset-non-lpsp")
> +		dpms_mode_unset_subtest(SCREEN_TYPE_NON_LPSP);
> +	igt_subtest("fences-dpms") {
> +		gem_require_mappable_ggtt(drm_fd);
> +		fences_subtest();
> +	}
> +
> +	/* Modeset stress */
> +	igt_subtest("modeset-lpsp-stress")
> +		modeset_subtest(SCREEN_TYPE_LPSP, rounds, WAIT_STATUS);
> +	igt_subtest("modeset-non-lpsp-stress")
> +		modeset_subtest(SCREEN_TYPE_NON_LPSP, rounds, WAIT_STATUS);
> +	igt_subtest("modeset-lpsp-stress-no-wait")
> +		modeset_subtest(SCREEN_TYPE_LPSP, rounds, DONT_WAIT);
> +	igt_subtest("modeset-non-lpsp-stress-no-wait")
> +		modeset_subtest(SCREEN_TYPE_NON_LPSP, rounds, DONT_WAIT);
> +	igt_subtest("modeset-pc8-residency-stress")
> +		modeset_subtest(SCREEN_TYPE_ANY, rounds, WAIT_PC8_RES);
> +	igt_subtest("modeset-stress-extra-wait")
> +		modeset_subtest(SCREEN_TYPE_ANY, rounds,
> +				WAIT_STATUS | WAIT_EXTRA);
> +
> +	/* System suspend */
> +	igt_subtest("system-suspend-modeset")
> +		system_suspend_modeset_subtest();
> +
> +	igt_fixture {
> +		teardown_environment(true);
> +		forcewake_put(&ms_data);
> +	}
> +}
> diff --git a/tests/meson.build b/tests/meson.build
> index 92729e0c3..37d101281 100644
> --- a/tests/meson.build
> +++ b/tests/meson.build
> @@ -262,6 +262,7 @@ intel_kms_progs = [
>   	'kms_pm_backlight',
>   	'kms_pm_dc',
>   	'kms_pm_lpsp',
> +	'kms_pm_rpm',
>   	'kms_psr',
>   	'kms_psr2_sf',
>   	'kms_psr2_su',

^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2023-09-06 13:35 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-09-05 12:53 [igt-dev] [i-g-t V2 0/7] Separate display PM tests from Core Bhanuprakash Modem
2023-09-05 12:53 ` [igt-dev] [i-g-t V2 1/7] tests/intel/pm: Rename i915_pm_backlight to kms_pm_backlight Bhanuprakash Modem
2023-09-06  7:53   ` Sharma, Swati2
2023-09-06  9:33     ` Mauro Carvalho Chehab
2023-09-05 12:53 ` [igt-dev] [i-g-t V2 2/7] tests/intel/kms_pm_backlight: Fix testplan documentation Bhanuprakash Modem
2023-09-06  7:56   ` Sharma, Swati2
2023-09-05 12:53 ` [igt-dev] [i-g-t V2 3/7] tests/intel/pm: Rename i915_pm_dc to kms_pm_dc Bhanuprakash Modem
2023-09-06  7:59   ` Sharma, Swati2
2023-09-05 12:53 ` [igt-dev] [i-g-t V2 4/7] tests/intel/kms_pm_dc: Fix testplan documentation Bhanuprakash Modem
2023-09-06  8:07   ` Sharma, Swati2
2023-09-05 12:53 ` [igt-dev] [i-g-t V2 5/7] tests/intel/pm: Rename i915_pm_lpsp to kms_pm_lpsp Bhanuprakash Modem
2023-09-06  8:08   ` Sharma, Swati2
2023-09-05 12:53 ` [igt-dev] [i-g-t V2 6/7] tests/intel/kms_pm_lpsp: Fix testplan documentation Bhanuprakash Modem
2023-09-06  8:12   ` Sharma, Swati2
2023-09-05 12:53 ` [igt-dev] [i-g-t V2 7/7] tests/intel/pm: Separate display specific tests from i915_pm_rpm Bhanuprakash Modem
2023-09-06 13:35   ` Sharma, Swati2
2023-09-05 17:07 ` [igt-dev] ✓ Fi.CI.BAT: success for Separate display PM tests from Core (rev2) Patchwork
2023-09-05 20:26 ` [igt-dev] ✗ Fi.CI.IGT: failure " Patchwork

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.