From: Alison Schofield <alison.schofield@intel.com>
To: Davidlohr Bueso <dave@stgolabs.net>,
Jonathan Cameron <jic23@kernel.org>,
Dave Jiang <dave.jiang@intel.com>,
Alison Schofield <alison.schofield@intel.com>,
Vishal Verma <vishal.l.verma@intel.com>,
Ira Weiny <iweiny@kernel.org>, Li Ming <ming.li@zohomail.com>
Cc: linux-cxl@vger.kernel.org, Richard Cheng <icheng@nvidia.com>
Subject: [PATCH v4 2/2] cxl/test: Add a 2-way 16K root decoder for passthrough testing
Date: Thu, 3 Sep 2026 20:21:33 -0700 [thread overview]
Message-ID: <8a0b5f58445ecf5f5dcef33fa593fdb916628750.1788487020.git.alison.schofield@intel.com> (raw)
In-Reply-To: <cover.1788487020.git.alison.schofield@intel.com>
The cxl-test topologies do not provide a configuration where passthrough
decoders compute a granularity above the 16K max encodable in hardware. The
widest power-of-2 root decoder currently available is 2-way at 4K
granularity, so a passthrough decoder below it computes 8K and the
granularity accumulated at the endpoints tops out at 16K.
Add a CFMWS entry for a 2-way root decoder at 16K granularity. This
topology supports a region configuration spanning the two multi-port host
bridges and placing one endpoint under each bridge. The intermediate switch
decoders are then passthrough decoders with a computed granularity of 32K.
This allows a CXL unit test to be added for this case.
Place the new window in the XOR topology set so the default modulo topology
used by most cxl-test coverage is unchanged.
Assisted-by: Claude:Opus-4-8
Reviewed-by: Richard Cheng <icheng@nvidia.com>
Reviewed-by: Dave Jiang <dave.jiang@intel.com>
Signed-off-by: Alison Schofield <alison.schofield@intel.com>
---
tools/testing/cxl/test/cxl.c | 48 ++++++++++++++++++++++++++++++++++--
1 file changed, 46 insertions(+), 2 deletions(-)
diff --git a/tools/testing/cxl/test/cxl.c b/tools/testing/cxl/test/cxl.c
index 62bd92b3be45..08ecb9b74372 100644
--- a/tools/testing/cxl/test/cxl.c
+++ b/tools/testing/cxl/test/cxl.c
@@ -190,10 +190,18 @@ static struct {
struct acpi_cedt_cfmws cfmws;
u32 target[3];
} cfmws8;
+ struct {
+ struct acpi_cedt_cfmws cfmws;
+ u32 target[2];
+ } cfmws9;
struct {
struct acpi_cedt_cxims cxims;
u64 xormap_list[2];
} cxims0;
+ struct {
+ struct acpi_cedt_cxims cxims;
+ u64 xormap_list[1];
+ } cxims1;
} __packed mock_cedt = {
.cedt = {
.header = {
@@ -373,6 +381,28 @@ static struct {
},
.target = { 0, 1, 2, },
},
+ /*
+ * A 2-way root at 16K granularity. A passthrough decoder below this
+ * root computes a 32K granularity (16K * 2), which exceeds the maximum
+ * encodable in hardware. It exercises the passthrough granularity path
+ * in cxl_port_setup_targets().
+ */
+ .cfmws9 = {
+ .cfmws = {
+ .header = {
+ .type = ACPI_CEDT_TYPE_CFMWS,
+ .length = sizeof(mock_cedt.cfmws9),
+ },
+ .interleave_arithmetic = ACPI_CEDT_CFMWS_ARITHMETIC_XOR,
+ .interleave_ways = 1,
+ .granularity = 6,
+ .restrictions = ACPI_CEDT_CFMWS_RESTRICT_HOSTONLYMEM |
+ ACPI_CEDT_CFMWS_RESTRICT_PMEM,
+ .qtg_id = FAKE_QTG_ID,
+ .window_size = SZ_256M * 8UL,
+ },
+ .target = { 0, 1, },
+ },
.cxims0 = {
.cxims = {
.header = {
@@ -384,6 +414,18 @@ static struct {
},
.xormap_list = { 0x404100, 0x808200, },
},
+ /* CXIMS for the 16K (hbig = 6) 2-way root, cfmws9 */
+ .cxims1 = {
+ .cxims = {
+ .header = {
+ .type = ACPI_CEDT_TYPE_CXIMS,
+ .length = sizeof(mock_cedt.cxims1),
+ },
+ .hbig = 6,
+ .nr_xormaps = 1,
+ },
+ .xormap_list = { 0x0, },
+ },
};
static struct acpi_cedt_cfmws type2_cfmws0 = {
@@ -410,6 +452,7 @@ struct acpi_cedt_cfmws *mock_cfmws[] = {
[6] = &mock_cedt.cfmws6.cfmws,
[7] = &mock_cedt.cfmws7.cfmws,
[8] = &mock_cedt.cfmws8.cfmws,
+ [9] = &mock_cedt.cfmws9.cfmws,
};
static int cfmws_start;
@@ -417,10 +460,11 @@ static int cfmws_end;
#define CFMWS_MOD_ARRAY_START 0
#define CFMWS_MOD_ARRAY_END 5
#define CFMWS_XOR_ARRAY_START 6
-#define CFMWS_XOR_ARRAY_END 8
+#define CFMWS_XOR_ARRAY_END 9
-struct acpi_cedt_cxims *mock_cxims[1] = {
+struct acpi_cedt_cxims *mock_cxims[2] = {
[0] = &mock_cedt.cxims0.cxims,
+ [1] = &mock_cedt.cxims1.cxims,
};
struct cxl_mock_res {
--
2.37.3
prev parent reply other threads:[~2026-09-04 3:21 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-04 3:21 [PATCH v4 0/2] cxl: Allow passthrough decoders with >16K granularity Alison Schofield
2026-09-04 3:21 ` [PATCH v4 1/2] cxl/region: Allow regions with an unencodable passthrough granularity Alison Schofield
2026-09-04 3:36 ` sashiko-bot
2026-09-04 3:53 ` Alison Schofield
2026-09-04 3:21 ` Alison Schofield [this message]
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=8a0b5f58445ecf5f5dcef33fa593fdb916628750.1788487020.git.alison.schofield@intel.com \
--to=alison.schofield@intel.com \
--cc=dave.jiang@intel.com \
--cc=dave@stgolabs.net \
--cc=icheng@nvidia.com \
--cc=iweiny@kernel.org \
--cc=jic23@kernel.org \
--cc=linux-cxl@vger.kernel.org \
--cc=ming.li@zohomail.com \
--cc=vishal.l.verma@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