Igt-dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Vinod Govindapillai <vinod.govindapillai@intel.com>
To: igt-dev@lists.freedesktop.org
Cc: vinod.govindapillai@intel.com, santhosh.reddy.guddati@intel.com,
	swati2.sharma@intel.com, jani.nikula@intel.com
Subject: [PATCH i-g-t v3 04/11] tests/intel/kms_frontbuffer_tracking: consolidate fbc tests skip checks
Date: Thu, 16 Apr 2026 12:25:52 +0300	[thread overview]
Message-ID: <20260416092559.88735-5-vinod.govindapillai@intel.com> (raw)
In-Reply-To: <20260416092559.88735-1-vinod.govindapillai@intel.com>

While looking for "no fbc reasons" and decide whether to skip any specific
fbc related test, read the debugfs fbc status only once and look for any
skip reasons. Move this as a library function so that other FBC specific
tests could use the same library and all the skips reasons can be
maintained in a single place.

Suggested-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com>
---
 lib/i915/intel_fbc.c                   | 37 +++++++++++++++
 lib/i915/intel_fbc.h                   |  1 +
 tests/intel/kms_frontbuffer_tracking.c | 63 ++++----------------------
 3 files changed, 47 insertions(+), 54 deletions(-)

diff --git a/lib/i915/intel_fbc.c b/lib/i915/intel_fbc.c
index 47f0e2fc1..e2fbe3680 100644
--- a/lib/i915/intel_fbc.c
+++ b/lib/i915/intel_fbc.c
@@ -63,6 +63,43 @@ void intel_fbc_get_fbc_status(igt_crtc_t *crtc, char *fbc_status, int buf_size)
 					    buf_size);
 }
 
+/**
+ * intel_fbc_found_skip_reason
+ * @device: fd of the device
+ * @crtc_index: crtc index
+ *
+ * Read the debugfs entry for current fbc status of a crtc and check for any reasons
+ * why FBC cannot be enabled. This helps in skipping FBC test cases where FBC cannot
+ * be enabled. These no fbc reasons are defined by the driver.
+ *
+ * Returns:
+ * True if there is a reason that FBC cannot be enabled otherwise false.
+ */
+bool intel_fbc_found_skip_reason(int device, int crtc_index)
+{
+	const char *const no_fbc_reasons[] = {
+		"FBC disabled: not enough stolen memory",
+		"FBC disabled: stride not supported",
+		"FBC disabled: plane size too big",
+		"FBC disabled: surface size too big",
+		"FBC disabled: PSR1 enabled (Wa_14016291713)"
+	};
+	bool found_reason = false;
+	char fbc_status[FBC_STATUS_BUF_LEN];
+	int i;
+
+	intel_fbc_get_fbc_status_crtc_index(device, crtc_index, fbc_status,
+					    sizeof(fbc_status));
+
+	if (strstr(fbc_status, "FBC Enabled\n"))
+		return false;
+
+	for (i = 0; !found_reason && i < ARRAY_SIZE(no_fbc_reasons); i++)
+		found_reason = strstr(fbc_status, no_fbc_reasons[i]);
+
+	return found_reason;
+}
+
 /**
  * intel_fbc_supported:
  * @crtc: CRTC
diff --git a/lib/i915/intel_fbc.h b/lib/i915/intel_fbc.h
index f8a506f23..e4b9e5529 100644
--- a/lib/i915/intel_fbc.h
+++ b/lib/i915/intel_fbc.h
@@ -20,5 +20,6 @@ bool intel_fbc_supported_for_psr_mode(igt_display_t *display, enum psr_mode mode
 void intel_fbc_get_fbc_status_crtc_index(int device, int crtc_index,
 					 char *fbc_status, int buf_size);
 void intel_fbc_get_fbc_status(igt_crtc_t *crtc, char *fbc_status, int buf_size);
+bool intel_fbc_found_skip_reason(int device, int crtc_index);
 
 #endif
diff --git a/tests/intel/kms_frontbuffer_tracking.c b/tests/intel/kms_frontbuffer_tracking.c
index 5bdfbd105..4fa185e76 100644
--- a/tests/intel/kms_frontbuffer_tracking.c
+++ b/tests/intel/kms_frontbuffer_tracking.c
@@ -1652,51 +1652,6 @@ static bool fbc_wait_for_compression(void)
 	return igt_wait(fbc_is_compressing(), 2000, 1);
 }
 
-static bool fbc_not_enough_stolen(void)
-{
-	char fbc_status[128];
-
-	intel_fbc_get_fbc_status(prim_mode_params.crtc, fbc_status, sizeof(fbc_status));
-
-	return strstr(fbc_status, "FBC disabled: not enough stolen memory\n");
-}
-
-static bool fbc_stride_not_supported(void)
-{
-	char fbc_status[128];
-
-	intel_fbc_get_fbc_status(prim_mode_params.crtc, fbc_status, sizeof(fbc_status));
-
-	return strstr(fbc_status, "FBC disabled: stride not supported\n");
-}
-
-static bool fbc_plane_size_too_big(void)
-{
-	char fbc_status[128];
-
-	intel_fbc_get_fbc_status(prim_mode_params.crtc, fbc_status, sizeof(fbc_status));
-
-	return strstr(fbc_status, "FBC disabled: plane size too big\n");
-}
-
-static bool fbc_surface_size_too_big(void)
-{
-	char fbc_status[128];
-
-	intel_fbc_get_fbc_status(prim_mode_params.crtc, fbc_status, sizeof(fbc_status));
-
-	return strstr(fbc_status, "FBC disabled: surface size too big\n");
-}
-
-static bool fbc_psr_not_possible(void)
-{
-	char fbc_status[128];
-
-	intel_fbc_get_fbc_status(prim_mode_params.crtc, fbc_status, sizeof(fbc_status));
-
-	return strstr(fbc_status, "FBC disabled: PSR1 enabled (Wa_14016291713)");
-}
-
 static bool fbc_enable_per_plane(int plane_index, igt_crtc_t *crtc)
 {
 	char fbc_status[PATH_MAX];
@@ -2345,6 +2300,8 @@ static void do_crc_assertions(int flags)
 
 static void do_status_assertions(int flags)
 {
+	igt_crtc_t *crtc = prim_mode_params.crtc;
+
 	if (!opt.check_status) {
 		/* Make sure we settle before continuing. */
 		sleep(1);
@@ -2362,27 +2319,25 @@ static void do_status_assertions(int flags)
 			igt_assert_f(false, "DRRS LOW\n");
 		}
 	} else if (flags & ASSERT_DRRS_INACTIVE) {
-		if (!intel_is_drrs_inactive(prim_mode_params.crtc)) {
+		if (!intel_is_drrs_inactive(crtc)) {
 			drrs_print_status();
 			igt_assert_f(false, "DRRS INACTIVE\n");
 		}
 	}
 
 	if (flags & ASSERT_FBC_ENABLED) {
-		igt_require(!fbc_not_enough_stolen());
-		igt_require(!fbc_stride_not_supported());
-		igt_require(!fbc_plane_size_too_big());
-		igt_require(!fbc_surface_size_too_big());
-		igt_require(!fbc_psr_not_possible());
-		if (!intel_fbc_wait_until_enabled(prim_mode_params.crtc)) {
-			igt_assert_f(intel_fbc_is_enabled(prim_mode_params.crtc, IGT_LOG_WARN),
+		igt_require(!intel_fbc_found_skip_reason(crtc->display->drm_fd,
+							 crtc->crtc_index));
+
+		if (!intel_fbc_wait_until_enabled(crtc)) {
+			igt_assert_f(intel_fbc_is_enabled(crtc, IGT_LOG_WARN),
 				     "FBC disabled\n");
 		}
 
 		if (opt.fbc_check_compression)
 			igt_assert(fbc_wait_for_compression());
 	} else if (flags & ASSERT_FBC_DISABLED) {
-		igt_assert(!intel_fbc_wait_until_enabled(prim_mode_params.crtc));
+		igt_assert(!intel_fbc_wait_until_enabled(crtc));
 	}
 
 	if (flags & ASSERT_PSR_ENABLED) {
-- 
2.43.0


  parent reply	other threads:[~2026-04-16  9:27 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-04-16  9:25 [PATCH i-g-t v3 00/11] updates to fbc tests Vinod Govindapillai
2026-04-16  9:25 ` [PATCH i-g-t v3 01/11] lib/i915/fbc: extract intel_fbc_get_fbc_status() Vinod Govindapillai
2026-04-30  2:56   ` Reddy Guddati, Santhosh
2026-04-16  9:25 ` [PATCH i-g-t v3 02/11] tests/intel/kms_frontbuffer_tracking: use intel_fbc_get_fbc_status() Vinod Govindapillai
2026-04-30  3:18   ` Reddy Guddati, Santhosh
2026-04-16  9:25 ` [PATCH i-g-t v3 03/11] tests/intel/kms_frontbuffer_tracking: update the outdated fbc status reasons Vinod Govindapillai
2026-04-30  3:37   ` Reddy Guddati, Santhosh
2026-04-30  7:05     ` Govindapillai, Vinod
2026-04-30  8:30       ` Jani Nikula
2026-04-16  9:25 ` Vinod Govindapillai [this message]
2026-04-30  4:35   ` [PATCH i-g-t v3 04/11] tests/intel/kms_frontbuffer_tracking: consolidate fbc tests skip checks Reddy Guddati, Santhosh
2026-04-30  7:12     ` Govindapillai, Vinod
2026-04-16  9:25 ` [PATCH i-g-t v3 05/11] tests/intel/kms_frontbuffer_tracking: use a bigger buffer for fbc status Vinod Govindapillai
2026-04-30  3:45   ` Reddy Guddati, Santhosh
2026-04-16  9:25 ` [PATCH i-g-t v3 06/11] tests/intel/kms_fbcon_fbt: " Vinod Govindapillai
2026-04-30  3:46   ` Reddy Guddati, Santhosh
2026-04-16  9:25 ` [PATCH i-g-t v3 07/11] tests/intel/kms_fbcon_fbt: update the outdated fbc skip reasons Vinod Govindapillai
2026-04-30  3:56   ` Reddy Guddati, Santhosh
2026-04-30  7:11     ` Govindapillai, Vinod
2026-04-16  9:25 ` [PATCH i-g-t v3 08/11] tests/intel/kms_fbcon_fbt: refactor the code to get the right fbc status Vinod Govindapillai
2026-04-16  9:25 ` [PATCH i-g-t v3 09/11] tests/intel/kms_fbcon_fbt: find and store the crtc index Vinod Govindapillai
2026-04-16  9:25 ` [PATCH i-g-t v3 10/11] tests/intel/kms_fbcon_fbt: find the correct fbc status of a pipe Vinod Govindapillai
2026-04-16  9:25 ` [PATCH i-g-t v3 11/11] tests/intel/kms_fbcon_fbt: use common routine to skip tests on fbc status Vinod Govindapillai
2026-04-30  4:06   ` Reddy Guddati, Santhosh
2026-04-16 16:24 ` ✓ i915.CI.BAT: success for updates to fbc tests (rev3) Patchwork
2026-04-16 16:24 ` ✓ Xe.CI.BAT: " Patchwork
2026-04-16 18:08 ` ✗ Xe.CI.FULL: failure " Patchwork
2026-04-17  4:43 ` ✗ i915.CI.Full: " Patchwork

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260416092559.88735-5-vinod.govindapillai@intel.com \
    --to=vinod.govindapillai@intel.com \
    --cc=igt-dev@lists.freedesktop.org \
    --cc=jani.nikula@intel.com \
    --cc=santhosh.reddy.guddati@intel.com \
    --cc=swati2.sharma@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox