All of lore.kernel.org
 help / color / mirror / Atom feed
* [NDCTL PATCH v2] cxl: Add CXL type2 accelerator unit test
@ 2026-05-15  0:12 Dave Jiang
  0 siblings, 0 replies; only message in thread
From: Dave Jiang @ 2026-05-15  0:12 UTC (permalink / raw)
  To: linux-cxl, nvdimm; +Cc: alison.schofield

CXL type2 hierachy can be setup via the cxl_test. Add a regression test
unit to CXL CLI to verify the type2 loading/unloading. Test include
removing the root port and bringing it back, unbinding the type2 mock
device driver and bringing it back, and checking to see if a region
can be destroyed and a memdev can be disabled.

Signed-off-by: Dave Jiang <dave.jiang@intel.com>
---
v2:
- Load/unload module once for test. (Alison)
- Add additional tests. (Alison)
---
 test/cxl-type2.sh | 103 ++++++++++++++++++++++++++++++++++++++++++++++
 test/meson.build  |   2 +
 2 files changed, 105 insertions(+)
 create mode 100644 test/cxl-type2.sh

diff --git a/test/cxl-type2.sh b/test/cxl-type2.sh
new file mode 100644
index 000000000000..34e22adcc223
--- /dev/null
+++ b/test/cxl-type2.sh
@@ -0,0 +1,103 @@
+#!/bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (C) 2026 Intel Corporation. All rights reserved.
+
+. "$(dirname "$0")"/common
+
+rc=77
+set -ex
+trap 'err $LINENO' ERR
+check_prereq "jq"
+
+remove_kmod() {
+	modprobe -r cxl_test
+}
+
+load_kmod() {
+	modprobe cxl_test type2_test=1
+}
+
+init_check() {
+	load_kmod
+	[ -f /sys/module/cxl_test/parameters/type2_test ] || \
+		do_skip "cxl_test type2_test module param not available"
+	region=$("$CXL" list -b "$CXL_TEST_BUS" -R | jq -r '.[0].region')
+	[ -n "$region" ] || err "$LINENO"
+}
+
+# Test rootport disable/enable case
+cycle_root_port() {
+	echo "Testing root port disable/enable"
+	memdev=$("$CXL" list -b "$CXL_TEST_BUS" -M | jq -r '.[0].memdev')
+	[ -n "$memdev" ] || err "$LINENO"
+	port=$("$CXL" list -b "$CXL_TEST_BUS" -m "$memdev" -P | jq -r '.[0].port')
+	[ -n "$port" ] || err "$LINENO"
+
+	"$CXL" disable-port "$port" -f
+	region=$("$CXL" list -b "$CXL_TEST_BUS" -R | jq -r '.[0].region // empty')
+	[ -z "$region" ] || err "$LINENO"
+
+	"$CXL" enable-port "$port"
+	echo cxl_type2_accel.0 > /sys/bus/platform/drivers/cxl_mock_accel/bind
+	region=$("$CXL" list -b "$CXL_TEST_BUS" -R | jq -r '.[0].region')
+	[ -n "$region" ] || err "$LINENO"
+}
+
+# Test rebind device driver
+cycle_pdev_driver() {
+	echo "Testing device driver unbind/bind"
+	region=$("$CXL" list -b "$CXL_TEST_BUS" -R | jq -r '.[0].region')
+	[ -n "$region" ] || err "$LINENO"
+	echo cxl_type2_accel.0 > /sys/bus/platform/drivers/cxl_mock_accel/unbind
+	region=$("$CXL" list -b "$CXL_TEST_BUS" -R | jq -r '.[0].region // empty')
+	[ -z "$region" ] || err "$LINENO"
+	echo cxl_type2_accel.0 > /sys/bus/platform/drivers/cxl_mock_accel/bind
+	region=$("$CXL" list -b "$CXL_TEST_BUS" -R | jq -r '.[0].region')
+	[ -n "$region" ] || err "$LINENO"
+}
+
+# Test memdev removal with CXL CLI
+test_dev_removal() {
+	echo "Testing device removal with CXL CLI"
+	region=$("$CXL" list -b "$CXL_TEST_BUS" -R | jq -r '.[0].region')
+	[ -n "$region" ] || err "$LINENO"
+	"$CXL" disable-region "$region"
+	region=$("$CXL" list -b "$CXL_TEST_BUS" -R | jq -r '.[0].region // empty')
+	[ -z "$region" ] || err "$LINENO"
+
+	# type2 region is auto region and cannot be destroyed
+	region=$("$CXL" list -b "$CXL_TEST_BUS" -Ri | jq -r '.[0].region // empty')
+	[ -n "$region" ] || err "$LINENO"
+	"$CXL" destroy-region "$region" || true
+	region=$("$CXL" list -b "$CXL_TEST_BUS" -Ri | jq -r '.[0].region // empty')
+	[ -n "$region" ] || err "$LINENO"
+
+	# Do it directly via sysfs since CXL CLI has checks that will skip sysfs
+	echo "0" | tee /sys/bus/cxl/devices/"$region"/commit || true
+	region=$("$CXL" list -b "$CXL_TEST_BUS" -Ri | jq -r '.[0].region // empty')
+	[ -n "$region" ] || err "$LINENO"
+
+	# Make sure there's no delete_region for a type2 root decoder
+	rd=$("$CXL" list -b "$CXL_TEST_BUS" -r"$region" -D | jq -r '.[0]."root decoders"[0].decoder')
+	[ -n "$rd" ] || err "$LINENO"
+	[ ! -f /sys/bus/cxl/devices/"$rd"/delete_region ] || err "$LINENO"
+
+	memdev=$("$CXL" list -b "$CXL_TEST_BUS" -M | jq -r '.[0].memdev')
+	[ -n "$memdev" ] || err "$LINENO"
+
+	# memdev is not expected to be removed because region can't be destroyed
+	"$CXL" disable-memdev "$memdev" || true
+	memdev=$("$CXL" list -b "$CXL_TEST_BUS" -M | jq -r '.[0].memdev // empty')
+	[ -n "$memdev" ] || err "$LINENO"
+}
+
+remove_kmod
+init_check
+rc=1
+
+cycle_root_port
+cycle_pdev_driver
+test_dev_removal
+
+check_dmesg "$LINENO"
+remove_kmod
diff --git a/test/meson.build b/test/meson.build
index e0e2193bfd51..567347b655d2 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -171,6 +171,7 @@ cxl_translate = find_program('cxl-translate.sh')
 cxl_elc = find_program('cxl-elc.sh')
 cxl_dax_hmem = find_program('cxl-dax-hmem.sh')
 cxl_region_replay = find_program('cxl-region-replay.sh')
+cxl_type2 = find_program('cxl-type2.sh')
 
 tests = [
   [ 'libndctl',               libndctl,		  'ndctl' ],
@@ -207,6 +208,7 @@ tests = [
   [ 'cxl-elc.sh',             cxl_elc,            'cxl'   ],
   [ 'cxl-dax-hmem.sh',        cxl_dax_hmem,       'cxl'   ],
   [ 'cxl-region-replay.sh',   cxl_region_replay,  'cxl'   ],
+  [ 'cxl-type2.sh',           cxl_type2,          'cxl'   ],
 ]
 
 if get_option('destructive').enabled()

base-commit: 81c7cdd6cbcb4f1f77870ff02d8dd86298036f58
-- 
2.54.0


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2026-05-15  0:12 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-15  0:12 [NDCTL PATCH v2] cxl: Add CXL type2 accelerator unit test Dave Jiang

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.