@@ -1900,6 +1900,23 @@ static void update_wanted_crc(const struct test_mode *t, struct both_crcs *crc)
wanted_crc = crc;
}
+/*
+ * The recent Kernel versions have a workaround that will refuse to activate FBC
+ * if the FBC frontbuffer has ever been CPU or WC mmapped.
+ */
+static bool op_disables_fbc(const struct test_mode *t,
+ enum igt_draw_method method)
+{
+ if (method != IGT_DRAW_MMAP_CPU && method != IGT_DRAW_MMAP_WC)
+ return false;
+ if (t->plane != PLANE_PRI)
+ return false;
+ if (t->screen == SCREEN_PRIM || t->fbs == FBS_SHARED)
+ return true;
+
+ return false;
+}
+
static bool op_disables_psr(const struct test_mode *t,
enum igt_draw_method method)
{
@@ -1969,6 +1986,8 @@ static void draw_subtest(const struct test_mode *t)
igt_assert(false);
}
+ if (op_disables_fbc(t, t->method))
+ assertions |= ASSERT_FBC_DISABLED;
if (op_disables_psr(t, t->method))
assertions |= ASSERT_PSR_DISABLED;
@@ -2027,7 +2046,12 @@ static void multidraw_subtest(const struct test_mode *t)
target = pick_target(t, params);
for (m1 = 0; m1 < IGT_DRAW_METHOD_COUNT; m1++) {
+ if (op_disables_fbc(t, m1))
+ continue;
+
for (m2 = m1 + 1; m2 < IGT_DRAW_METHOD_COUNT; m2++) {
+ if (op_disables_fbc(t, m2))
+ continue;
igt_debug("Methods %s and %s\n",
igt_draw_get_method_name(m1),
We recently implemented a Kernel workaround that deactivates FBC in case the FBC frontbuffer was ever CPU or WC mmapped. Change the test suite to take this into account, otherwise we'll fail many tests with !fbc_enabled assertions. Also notice that if your Kernel doesn't have the workaround, then this commit is going to break a lot of tests. The Kernel commit you need is: drm/i915: opt-out CPU and WC mmaps from FBC Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com> --- tests/kms_frontbuffer_tracking.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+)