* [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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox