Intel-XE Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Michal Wajdeczko <michal.wajdeczko@intel.com>
To: intel-xe@lists.freedesktop.org
Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
Subject: [PATCH 07/13] drm/xe/kunit: Activate empty MMIO stubs in test_init()
Date: Tue, 28 Apr 2026 16:27:14 +0200	[thread overview]
Message-ID: <20260428142722.582-8-michal.wajdeczko@intel.com> (raw)
In-Reply-To: <20260428142722.582-1-michal.wajdeczko@intel.com>

Our fake xe_device created in test_init() will immediately crash
when test code attempts to reuse any function that is accessing
the xe_mmio structure. But in many cases we can simply ignore
writes and return some value on reads, to make the code happy.

Activate simple stubs that will just log the MMIO accesses and
allow to pass test specific value, if non-zero value is better.

Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
---
 drivers/gpu/drm/xe/tests/xe_kunit_helpers.c | 37 +++++++++++++++++++++
 drivers/gpu/drm/xe/tests/xe_pci_test.h      |  1 +
 2 files changed, 38 insertions(+)

diff --git a/drivers/gpu/drm/xe/tests/xe_kunit_helpers.c b/drivers/gpu/drm/xe/tests/xe_kunit_helpers.c
index 8276cabc4820..14271c4662d6 100644
--- a/drivers/gpu/drm/xe/tests/xe_kunit_helpers.c
+++ b/drivers/gpu/drm/xe/tests/xe_kunit_helpers.c
@@ -17,6 +17,7 @@
 #include "xe_device.h"
 #include "xe_device_types.h"
 #include "xe_ggtt.h"
+#include "xe_mmio.h"
 #include "xe_pm.h"
 
 /**
@@ -99,6 +100,28 @@ static struct xe_bo *fake_xe_managed_bo_create_pin_map(struct xe_device *xe,
 	return bo;
 }
 
+static u32 fake_xe_mmio_read32(struct xe_mmio *mmio, struct xe_reg reg)
+{
+	struct kunit *test = kunit_get_current_test();
+	struct kunit_resource *res;
+	u32 val = 0;
+
+	res = kunit_find_named_resource(test, "mmio_read");
+	if (res) {
+		val = *(u32 *)res->data;
+		kunit_put_resource(res);
+	}
+	kunit_info(test, "mmio[%#x] read %#x\n", reg.addr, val);
+	return val;
+}
+
+static void fake_xe_mmio_write32(struct xe_mmio *mmio, struct xe_reg reg, u32 val)
+{
+	struct kunit *test = kunit_get_current_test();
+
+	kunit_info(test, "mmio[%#x] write %#x\n", reg.addr, val);
+}
+
 /**
  * xe_kunit_helper_xe_device_test_init - Prepare a &xe_device for a KUnit test.
  * @test: the &kunit where this fake &xe_device will be used
@@ -116,6 +139,9 @@ static struct xe_bo *fake_xe_managed_bo_create_pin_map(struct xe_device *xe,
  * If xe_pci_fake_data->ggtt_size is set then this function will also do
  * a minimal GGTT initialization.
  *
+ * This function will also activate stubs for some xe_mmio operations.
+ * The xe_mmio reads will return value passed in xe_pci_fake_data->mmio_read.
+ *
  * This function uses KUNIT_ASSERT to detect any failures.
  *
  * Return: Always 0.
@@ -145,6 +171,17 @@ int xe_kunit_helper_xe_device_test_init(struct kunit *test)
 	kunit_activate_static_stub(test, xe_managed_bo_create_pin_map,
 				   fake_xe_managed_bo_create_pin_map);
 
+	if (data && data->mmio_read) {
+		struct kunit_resource *res = kunit_kzalloc(test, sizeof(*res), GFP_KERNEL);
+
+		KUNIT_ASSERT_NOT_ERR_OR_NULL(test, res);
+		err = kunit_add_named_resource(test, NULL, NULL, res,
+					       "mmio_read", &data->mmio_read);
+		KUNIT_ASSERT_EQ(test, err, 0);
+	}
+	kunit_activate_static_stub(test, xe_mmio_read32, fake_xe_mmio_read32);
+	kunit_activate_static_stub(test, xe_mmio_write32, fake_xe_mmio_write32);
+
 	test->priv = xe;
 	return 0;
 }
diff --git a/drivers/gpu/drm/xe/tests/xe_pci_test.h b/drivers/gpu/drm/xe/tests/xe_pci_test.h
index e807585b88c2..0011b9e710e5 100644
--- a/drivers/gpu/drm/xe/tests/xe_pci_test.h
+++ b/drivers/gpu/drm/xe/tests/xe_pci_test.h
@@ -24,6 +24,7 @@ struct xe_pci_fake_data {
 	u32 media_verx100;
 	u64 ggtt_start;
 	u64 ggtt_size;
+	u32 mmio_read;
 };
 
 int xe_pci_fake_device_init(struct xe_device *xe);
-- 
2.47.1


  parent reply	other threads:[~2026-04-28 14:27 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-04-28 14:27 [PATCH 00/13] drm/xe/tests: Add kunit tests for memory based interrupts Michal Wajdeczko
2026-04-28 14:27 ` [PATCH 01/13] drm/xe/ggtt: Rename parameter name in xe_ggtt_init_kunit() Michal Wajdeczko
2026-04-29 20:29   ` Summers, Stuart
2026-04-30  8:32     ` Jani Nikula
2026-04-30 21:50       ` Summers, Stuart
2026-04-28 14:27 ` [PATCH 02/13] drm/xe/guc: Allow to replace xe_guc_irq_handler() with stub Michal Wajdeczko
2026-04-30  5:44   ` K V P, Satyanarayana
2026-04-28 14:27 ` [PATCH 03/13] drm/xe/hwe: Allow to replace xe_hw_engine_handle_irq() " Michal Wajdeczko
2026-04-30  5:47   ` K V P, Satyanarayana
2026-04-28 14:27 ` [PATCH 04/13] drm/xe/mmio: Allow to replace xe_mmio_read32|write32() " Michal Wajdeczko
2026-04-30  5:48   ` K V P, Satyanarayana
2026-04-28 14:27 ` [PATCH 05/13] drm/xe/kunit: Promote GGTT initialization to test_init() helper Michal Wajdeczko
2026-04-28 14:27 ` [PATCH 06/13] drm/xe/kunit: Promote fake BO activation " Michal Wajdeczko
2026-04-28 14:27 ` Michal Wajdeczko [this message]
2026-04-28 14:27 ` [PATCH 08/13] drm/xe/memirq: Make page layout macros private Michal Wajdeczko
2026-05-05  7:54   ` Levi, Ilia
2026-04-28 14:27 ` [PATCH 09/13] drm/xe/memirq: Introduce helper to calculate source page offset Michal Wajdeczko
2026-05-05  8:27   ` Levi, Ilia
2026-04-28 14:27 ` [PATCH 10/13] drm/xe/memirq: Introduce helper to calculate status vector offset Michal Wajdeczko
2026-05-05 12:40   ` Levi, Ilia
2026-04-28 14:27 ` [PATCH 11/13] drm/xe/memirq: Refactor xe_memirq_hwe_handler Michal Wajdeczko
2026-05-05 12:46   ` Levi, Ilia
2026-04-28 14:27 ` [PATCH 12/13] drm/xe/memirq: Dump additional source pages if MSI-X Michal Wajdeczko
2026-05-05 13:12   ` Levi, Ilia
2026-04-28 14:27 ` [PATCH 13/13] drm/xe/tests: Add kunit tests for memory based interrupts Michal Wajdeczko
2026-04-28 16:33 ` ✗ CI.checkpatch: warning for " Patchwork
2026-04-28 16:35 ` ✓ CI.KUnit: success " Patchwork
2026-04-28 17:43 ` ✓ Xe.CI.BAT: " Patchwork
2026-04-29  5:04 ` ✗ Xe.CI.FULL: failure " 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=20260428142722.582-8-michal.wajdeczko@intel.com \
    --to=michal.wajdeczko@intel.com \
    --cc=intel-xe@lists.freedesktop.org \
    /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