xref: /qemu/docs/system/devices/cxl.rst (revision ca4750583a597e97cbf8cec008d228f95d22c426)
1aa69abe6SJonathan CameronCompute Express Link (CXL)
2aa69abe6SJonathan Cameron==========================
3aa69abe6SJonathan CameronFrom the view of a single host, CXL is an interconnect standard that
4aa69abe6SJonathan Camerontargets accelerators and memory devices attached to a CXL host.
5aa69abe6SJonathan CameronThis description will focus on those aspects visible either to
6aa69abe6SJonathan Cameronsoftware running on a QEMU emulated host or to the internals of
7aa69abe6SJonathan Cameronfunctional emulation. As such, it will skip over many of the
8aa69abe6SJonathan Cameronelectrical and protocol elements that would be more of interest
9aa69abe6SJonathan Cameronfor real hardware and will dominate more general introductions to CXL.
10aa69abe6SJonathan CameronIt will also completely ignore the fabric management aspects of CXL
11aa69abe6SJonathan Cameronby considering only a single host and a static configuration.
12aa69abe6SJonathan Cameron
13aa69abe6SJonathan CameronCXL shares many concepts and much of the infrastructure of PCI Express,
14aa69abe6SJonathan Cameronwith CXL Host Bridges, which have CXL Root Ports which may be directly
15aa69abe6SJonathan Cameronattached to CXL or PCI End Points. Alternatively there may be CXL Switches
16aa69abe6SJonathan Cameronwith CXL and PCI Endpoints attached below them.  In many cases additional
17aa69abe6SJonathan Cameroncontrol and capabilities are exposed via PCI Express interfaces.
187a21bee2SDaniel P. BerrangéThis sharing of interfaces and hence emulation code is reflected
19aa69abe6SJonathan Cameronin how the devices are emulated in QEMU. In most cases the various
20aa69abe6SJonathan CameronCXL elements are built upon an equivalent PCIe devices.
21aa69abe6SJonathan Cameron
22aa69abe6SJonathan CameronCXL devices support the following interfaces:
23aa69abe6SJonathan Cameron
24aa69abe6SJonathan Cameron* Most conventional PCIe interfaces
25aa69abe6SJonathan Cameron
26aa69abe6SJonathan Cameron  - Configuration space access
27aa69abe6SJonathan Cameron  - BAR mapped memory accesses used for registers and mailboxes.
28aa69abe6SJonathan Cameron  - MSI/MSI-X
29aa69abe6SJonathan Cameron  - AER
30aa69abe6SJonathan Cameron  - DOE mailboxes
31aa69abe6SJonathan Cameron  - IDE
32aa69abe6SJonathan Cameron  - Many other PCI express defined interfaces..
33aa69abe6SJonathan Cameron
34aa69abe6SJonathan Cameron* Memory operations
35aa69abe6SJonathan Cameron
36aa69abe6SJonathan Cameron  - Equivalent of accessing DRAM / NVDIMMs. Any access / feature
37aa69abe6SJonathan Cameron    supported by the host for normal memory should also work for
38aa69abe6SJonathan Cameron    CXL attached memory devices.
39aa69abe6SJonathan Cameron
40aa69abe6SJonathan Cameron* Cache operations. The are mostly irrelevant to QEMU emulation as
41aa69abe6SJonathan Cameron  QEMU is not emulating a coherency protocol. Any emulation related
42aa69abe6SJonathan Cameron  to these will be device specific and is out of the scope of this
43aa69abe6SJonathan Cameron  document.
44aa69abe6SJonathan Cameron
45aa69abe6SJonathan CameronCXL 2.0 Device Types
46aa69abe6SJonathan Cameron--------------------
47aa69abe6SJonathan CameronCXL 2.0 End Points are often categorized into three types.
48aa69abe6SJonathan Cameron
49aa69abe6SJonathan Cameron**Type 1:** These support coherent caching of host memory.  Example might
50aa69abe6SJonathan Cameronbe a crypto accelerators.  May also have device private memory accessible
51aa69abe6SJonathan Cameronvia means such as PCI memory reads and writes to BARs.
52aa69abe6SJonathan Cameron
53aa69abe6SJonathan Cameron**Type 2:** These support coherent caching of host memory and host
54aa69abe6SJonathan Cameronmanaged device memory (HDM) for which the coherency protocol is managed
55aa69abe6SJonathan Cameronby the host. This is a complex topic, so for more information on CXL
56aa69abe6SJonathan Cameroncoherency see the CXL 2.0 specification.
57aa69abe6SJonathan Cameron
58aa69abe6SJonathan Cameron**Type 3 Memory devices:**  These devices act as a means of attaching
59aa69abe6SJonathan Cameronadditional memory (HDM) to a CXL host including both volatile and
60aa69abe6SJonathan Cameronpersistent memory. The CXL topology may support interleaving across a
61aa69abe6SJonathan Cameronnumber of Type 3 memory devices using HDM Decoders in the host, host
62aa69abe6SJonathan Cameronbridge, switch upstream port and endpoints.
63aa69abe6SJonathan Cameron
64aa69abe6SJonathan CameronScope of CXL emulation in QEMU
65aa69abe6SJonathan Cameron------------------------------
66aa69abe6SJonathan CameronThe focus of CXL emulation is CXL revision 2.0 and later. Earlier CXL
67aa69abe6SJonathan Cameronrevisions defined a smaller set of features, leaving much of the control
68aa69abe6SJonathan Cameroninterface as implementation defined or device specific, making generic
69aa69abe6SJonathan Cameronemulation challenging with host specific firmware being responsible
70aa69abe6SJonathan Cameronfor setup and the Endpoints being presented to operating systems
71aa69abe6SJonathan Cameronas Root Complex Integrated End Points. CXL rev 2.0 looks a lot
72aa69abe6SJonathan Cameronmore like PCI Express, with fully specified discoverability
73aa69abe6SJonathan Cameronof the CXL topology.
74aa69abe6SJonathan Cameron
75aa69abe6SJonathan CameronCXL System components
76aa69abe6SJonathan Cameron----------------------
77aa69abe6SJonathan CameronA CXL system is made up a Host with a number of 'standard components'
78aa69abe6SJonathan Cameronthe control and capabilities of which are discoverable by system software
79aa69abe6SJonathan Cameronusing means described in the CXL 2.0 specification.
80aa69abe6SJonathan Cameron
81aa69abe6SJonathan CameronCXL Fixed Memory Windows (CFMW)
82aa69abe6SJonathan Cameron~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
83aa69abe6SJonathan CameronA CFMW consists of a particular range of Host Physical Address space
84aa69abe6SJonathan Cameronwhich is routed to particular CXL Host Bridges.  At time of generic
85aa69abe6SJonathan Cameronsoftware initialization it will have a particularly interleaving
86120f765eSStefan Weilconfiguration and associated Quality of Service Throttling Group (QTG).
87aa69abe6SJonathan CameronThis information is available to system software, when making
88aa69abe6SJonathan Camerondecisions about how to configure interleave across available CXL
89aa69abe6SJonathan Cameronmemory devices.  It is provide as CFMW Structures (CFMWS) in
90aa69abe6SJonathan Cameronthe CXL Early Discovery Table, an ACPI table.
91aa69abe6SJonathan Cameron
92aa69abe6SJonathan CameronNote: QTG 0 is the only one currently supported in QEMU.
93aa69abe6SJonathan Cameron
94aa69abe6SJonathan CameronCXL Host Bridge (CXL HB)
95aa69abe6SJonathan Cameron~~~~~~~~~~~~~~~~~~~~~~~~
96aa69abe6SJonathan CameronA CXL host bridge is similar to the PCIe equivalent, but with a
97aa69abe6SJonathan Cameronspecification defined register interface called CXL Host Bridge
98aa69abe6SJonathan CameronComponent Registers (CHBCR). The location of this CHBCR MMIO
99aa69abe6SJonathan Cameronspace is described to system software via a CXL Host Bridge
100aa69abe6SJonathan CameronStructure (CHBS) in the CEDT ACPI table.  The actual interfaces
101120f765eSStefan Weilare identical to those used for other parts of the CXL hierarchy
102aa69abe6SJonathan Cameronas CXL Component Registers in PCI BARs.
103aa69abe6SJonathan Cameron
104aa69abe6SJonathan CameronInterfaces provided include:
105aa69abe6SJonathan Cameron
106aa69abe6SJonathan Cameron* Configuration of HDM Decoders to route CXL Memory accesses with
107aa69abe6SJonathan Cameron  a particularly Host Physical Address range to the target port
108aa69abe6SJonathan Cameron  below which the CXL device servicing that address lies.  This
109aa69abe6SJonathan Cameron  may be a mapping to a single Root Port (RP) or across a set of
110aa69abe6SJonathan Cameron  target RPs.
111aa69abe6SJonathan Cameron
112aa69abe6SJonathan CameronCXL Root Ports (CXL RP)
113aa69abe6SJonathan Cameron~~~~~~~~~~~~~~~~~~~~~~~
11463cec050SStefan WeilA CXL Root Port serves the same purpose as a PCIe Root Port.
115aa69abe6SJonathan CameronThere are a number of CXL specific Designated Vendor Specific
116aa69abe6SJonathan CameronExtended Capabilities (DVSEC) in PCIe Configuration Space
117aa69abe6SJonathan Cameronand associated component register access via PCI bars.
118aa69abe6SJonathan Cameron
119aa69abe6SJonathan CameronCXL Switch
120aa69abe6SJonathan Cameron~~~~~~~~~~
121aa69abe6SJonathan CameronHere we consider a simple CXL switch with only a single
122aa69abe6SJonathan Cameronvirtual hierarchy. Whilst more complex devices exist, their
123aa69abe6SJonathan Cameronvisibility to a particular host is generally the same as for
124aa69abe6SJonathan Camerona simple switch design. Hosts often have no awareness
125aa69abe6SJonathan Cameronof complex rerouting and device pooling, they simply see
126aa69abe6SJonathan Camerondevices being hot added or hot removed.
127aa69abe6SJonathan Cameron
128aa69abe6SJonathan CameronA CXL switch has a similar architecture to those in PCIe,
129aa69abe6SJonathan Cameronwith a single upstream port, internal PCI bus and multiple
130aa69abe6SJonathan Camerondownstream ports.
131aa69abe6SJonathan Cameron
132aa69abe6SJonathan CameronBoth the CXL upstream and downstream ports have CXL specific
133aa69abe6SJonathan CameronDVSECs in configuration space, and component registers in PCI
134aa69abe6SJonathan CameronBARs.  The Upstream Port has the configuration interfaces for
135aa69abe6SJonathan Cameronthe HDM decoders which route incoming memory accesses to the
136aa69abe6SJonathan Cameronappropriate downstream port.
137aa69abe6SJonathan Cameron
1383afcbb7bSJonathan CameronA CXL switch is created in a similar fashion to PCI switches
1393afcbb7bSJonathan Cameronby creating an upstream port (cxl-upstream) and a number of
1403afcbb7bSJonathan Camerondownstream ports on the internal switch bus (cxl-downstream).
1413afcbb7bSJonathan Cameron
142aa69abe6SJonathan CameronCXL Memory Devices - Type 3
143aa69abe6SJonathan Cameron~~~~~~~~~~~~~~~~~~~~~~~~~~~
144aa69abe6SJonathan CameronCXL type 3 devices use a PCI class code and are intended to be supported
145aa69abe6SJonathan Cameronby a generic operating system driver. They have HDM decoders
146120f765eSStefan Weilthough in these EP devices, the decoder is responsible not for
147aa69abe6SJonathan Cameronrouting but for translation of the incoming host physical address (HPA)
148aa69abe6SJonathan Cameroninto a Device Physical Address (DPA).
149aa69abe6SJonathan Cameron
150aa69abe6SJonathan CameronCXL Memory Interleave
151aa69abe6SJonathan Cameron---------------------
152aa69abe6SJonathan CameronTo understand the interaction of different CXL hardware components which
153aa69abe6SJonathan Cameronare emulated in QEMU, let us consider a memory read in a fully configured
154aa69abe6SJonathan CameronCXL topology.  Note that system software is responsible for configuration
155aa69abe6SJonathan Cameronof all components with the exception of the CFMWs. System software is
156aa69abe6SJonathan Cameronresponsible for allocating appropriate ranges from within the CFMWs
157aa69abe6SJonathan Cameronand exposing those via normal memory configurations as would be done
158aa69abe6SJonathan Cameronfor system RAM.
159aa69abe6SJonathan Cameron
160aa69abe6SJonathan CameronExample system Topology. x marks the match in each decoder level::
161aa69abe6SJonathan Cameron
162aa69abe6SJonathan Cameron  |<------------------SYSTEM PHYSICAL ADDRESS MAP (1)----------------->|
163aa69abe6SJonathan Cameron  |    __________   __________________________________   __________    |
164aa69abe6SJonathan Cameron  |   |          | |                                  | |          |   |
165*ca475058SBrice Goglin  |   | CFMW 0   | |  CXL Fixed Memory Window 1       | | CFMW 2   |   |
166aa69abe6SJonathan Cameron  |   | HB0 only | |  Configured to interleave memory | | HB1 only |   |
167aa69abe6SJonathan Cameron  |   |          | |  memory accesses across HB0/HB1  | |          |   |
168aa69abe6SJonathan Cameron  |   |__________| |_____x____________________________| |__________|   |
169aa69abe6SJonathan Cameron           |             |                     |             |
170aa69abe6SJonathan Cameron           |             |                     |             |
171aa69abe6SJonathan Cameron           |             |                     |             |
172aa69abe6SJonathan Cameron           |       Interleave Decoder          |             |
173aa69abe6SJonathan Cameron           |       Matches this HB             |             |
174aa69abe6SJonathan Cameron           \_____________|                     |_____________/
175aa69abe6SJonathan Cameron               __________|__________      _____|_______________
176aa69abe6SJonathan Cameron              |                     |    |                     |
177aa69abe6SJonathan Cameron       (2)    | CXL HB 0            |    | CXL HB 1            |
178aa69abe6SJonathan Cameron              | HB IntLv Decoders   |    | HB IntLv Decoders   |
179aa69abe6SJonathan Cameron              | PCI/CXL Root Bus 0c |    | PCI/CXL Root Bus 0d |
180aa69abe6SJonathan Cameron              |                     |    |                     |
181aa69abe6SJonathan Cameron              |___x_________________|    |_____________________|
182aa69abe6SJonathan Cameron                  |                |       |               |
183aa69abe6SJonathan Cameron                  |                |       |               |
184aa69abe6SJonathan Cameron       A HB 0 HDM Decoder          |       |               |
185aa69abe6SJonathan Cameron       matches this Port           |       |               |
186aa69abe6SJonathan Cameron                  |                |       |               |
187aa69abe6SJonathan Cameron       ___________|___   __________|__   __|_________   ___|_________
188aa69abe6SJonathan Cameron   (3)|  Root Port 0  | | Root Port 1 | | Root Port 2| | Root Port 3 |
189aa69abe6SJonathan Cameron      |  Appears in   | | Appears in  | | Appears in | | Appear in   |
190aa69abe6SJonathan Cameron      |  PCI topology | | PCI Topology| | PCI Topo   | | PCI Topo    |
191aa69abe6SJonathan Cameron      |  As 0c:00.0   | | as 0c:01.0  | | as de:00.0 | | as de:01.0  |
192aa69abe6SJonathan Cameron      |_______________| |_____________| |____________| |_____________|
193aa69abe6SJonathan Cameron            |                  |               |              |
194aa69abe6SJonathan Cameron            |                  |               |              |
195aa69abe6SJonathan Cameron       _____|_________   ______|______   ______|_____   ______|_______
196aa69abe6SJonathan Cameron   (4)|     x         | |             | |            | |              |
197aa69abe6SJonathan Cameron      | CXL Type3 0   | | CXL Type3 1 | | CXL type3 2| | CLX Type 3 3 |
198aa69abe6SJonathan Cameron      |               | |             | |            | |              |
199aa69abe6SJonathan Cameron      | PMEM0(Vol LSA)| | PMEM1 (...) | | PMEM2 (...)| | PMEM3 (...)  |
200aa69abe6SJonathan Cameron      | Decoder to go | |             | |            | |              |
201aa69abe6SJonathan Cameron      | from host PA  | | PCI 0e:00.0 | | PCI df:00.0| | PCI e0:00.0  |
202aa69abe6SJonathan Cameron      | to device PA  | |             | |            | |              |
203aa69abe6SJonathan Cameron      | PCI as 0d:00.0| |             | |            | |              |
204aa69abe6SJonathan Cameron      |_______________| |_____________| |____________| |______________|
205aa69abe6SJonathan Cameron
206aa69abe6SJonathan CameronNotes:
207aa69abe6SJonathan Cameron
208aa69abe6SJonathan Cameron(1) **3 CXL Fixed Memory Windows (CFMW)** corresponding to different
209aa69abe6SJonathan Cameron    ranges of the system physical address map.  Each CFMW has
210aa69abe6SJonathan Cameron    particular interleave setup across the CXL Host Bridges (HB)
211*ca475058SBrice Goglin    CFMW0 provides uninterleaved access to HB0, CFMW2 provides
212*ca475058SBrice Goglin    uninterleaved access to HB1. CFMW1 provides interleaved memory access
213aa69abe6SJonathan Cameron    across HB0 and HB1.
214aa69abe6SJonathan Cameron
215aa69abe6SJonathan Cameron(2) **Two CXL Host Bridges**. Each of these has 2 CXL Root Ports and
216aa69abe6SJonathan Cameron    programmable HDM decoders to route memory accesses either to
217aa69abe6SJonathan Cameron    a single port or interleave them across multiple ports.
218aa69abe6SJonathan Cameron    A complex configuration here, might be to use the following HDM
219aa69abe6SJonathan Cameron    decoders in HB0. HDM0 routes CFMW0 requests to RP0 and hence
220aa69abe6SJonathan Cameron    part of CXL Type3 0. HDM1 routes CFMW0 requests from a
221aa69abe6SJonathan Cameron    different region of the CFMW0 PA range to RP2 and hence part
222aa69abe6SJonathan Cameron    of CXL Type 3 1.  HDM2 routes yet another PA range from within
223aa69abe6SJonathan Cameron    CFMW0 to be interleaved across RP0 and RP1, providing 2 way
224aa69abe6SJonathan Cameron    interleave of part of the memory provided by CXL Type3 0 and
225aa69abe6SJonathan Cameron    CXL Type 3 1. HDM3 routes those interleaved accesses from
226aa69abe6SJonathan Cameron    CFMW1 that target HB0 to RP 0 and another part of the memory of
227aa69abe6SJonathan Cameron    CXL Type 3 0 (as part of a 2 way interleave at the system level
228aa69abe6SJonathan Cameron    across for example CXL Type3 0 and CXL Type3 2.
229aa69abe6SJonathan Cameron    HDM4 is used to enable system wide 4 way interleave across all
230aa69abe6SJonathan Cameron    the present CXL type3 devices, by interleaving those (interleaved)
231aa69abe6SJonathan Cameron    requests that HB0 receives from from CFMW1 across RP 0 and
232aa69abe6SJonathan Cameron    RP 1 and hence to yet more regions of the memory of the
233aa69abe6SJonathan Cameron    attached Type3 devices.  Note this is a representative subset
234aa69abe6SJonathan Cameron    of the full range of possible HDM decoder configurations in this
235aa69abe6SJonathan Cameron    topology.
236aa69abe6SJonathan Cameron
237aa69abe6SJonathan Cameron(3) **Four CXL Root Ports.** In this case the CXL Type 3 devices are
238aa69abe6SJonathan Cameron    directly attached to these ports.
239aa69abe6SJonathan Cameron
240aa69abe6SJonathan Cameron(4) **Four CXL Type3 memory expansion devices.**  These will each have
241aa69abe6SJonathan Cameron    HDM decoders, but in this case rather than performing interleave
242aa69abe6SJonathan Cameron    they will take the Host Physical Addresses of accesses and map
243aa69abe6SJonathan Cameron    them to their own local Device Physical Address Space (DPA).
244aa69abe6SJonathan Cameron
2453afcbb7bSJonathan CameronExample topology involving a switch::
2463afcbb7bSJonathan Cameron
2473afcbb7bSJonathan Cameron  |<------------------SYSTEM PHYSICAL ADDRESS MAP (1)----------------->|
2483afcbb7bSJonathan Cameron  |    __________   __________________________________   __________    |
2493afcbb7bSJonathan Cameron  |   |          | |                                  | |          |   |
250*ca475058SBrice Goglin  |   | CFMW 0   | |  CXL Fixed Memory Window 1       | | CFMW 2   |   |
2513afcbb7bSJonathan Cameron  |   | HB0 only | |  Configured to interleave memory | | HB1 only |   |
2523afcbb7bSJonathan Cameron  |   |          | |  memory accesses across HB0/HB1  | |          |   |
2533afcbb7bSJonathan Cameron  |   |____x_____| |__________________________________| |__________|   |
2543afcbb7bSJonathan Cameron           |             |                     |             |
2553afcbb7bSJonathan Cameron           |             |                     |             |
2563afcbb7bSJonathan Cameron           |             |                     |
2573afcbb7bSJonathan Cameron  Interleave Decoder     |                     |             |
2583afcbb7bSJonathan Cameron   Matches this HB       |                     |             |
2593afcbb7bSJonathan Cameron           \_____________|                     |_____________/
2603afcbb7bSJonathan Cameron               __________|__________      _____|_______________
2613afcbb7bSJonathan Cameron              |                     |    |                     |
2623afcbb7bSJonathan Cameron              | CXL HB 0            |    | CXL HB 1            |
2633afcbb7bSJonathan Cameron              | HB IntLv Decoders   |    | HB IntLv Decoders   |
2643afcbb7bSJonathan Cameron              | PCI/CXL Root Bus 0c |    | PCI/CXL Root Bus 0d |
2653afcbb7bSJonathan Cameron              |                     |    |                     |
2663afcbb7bSJonathan Cameron              |___x_________________|    |_____________________|
2673afcbb7bSJonathan Cameron                  |              |          |               |
2683afcbb7bSJonathan Cameron                  |
2693afcbb7bSJonathan Cameron       A HB 0 HDM Decoder
2703afcbb7bSJonathan Cameron       matches this Port
2713afcbb7bSJonathan Cameron       ___________|___
2723afcbb7bSJonathan Cameron      |  Root Port 0  |
2733afcbb7bSJonathan Cameron      |  Appears in   |
2743afcbb7bSJonathan Cameron      |  PCI topology |
2753afcbb7bSJonathan Cameron      |  As 0c:00.0   |
2763afcbb7bSJonathan Cameron      |___________x___|
2773afcbb7bSJonathan Cameron                  |
2783afcbb7bSJonathan Cameron                  |
2793afcbb7bSJonathan Cameron                  \_____________________
2803afcbb7bSJonathan Cameron                                        |
2813afcbb7bSJonathan Cameron                                        |
2823afcbb7bSJonathan Cameron            ---------------------------------------------------
2833afcbb7bSJonathan Cameron           |    Switch 0  USP as PCI 0d:00.0                   |
2843afcbb7bSJonathan Cameron           |    USP has HDM decoder which direct traffic to    |
285120f765eSStefan Weil           |    appropriate downstream port                    |
2863afcbb7bSJonathan Cameron           |    Switch BUS appears as 0e                       |
2873afcbb7bSJonathan Cameron           |x__________________________________________________|
2883afcbb7bSJonathan Cameron            |                  |               |              |
2893afcbb7bSJonathan Cameron            |                  |               |              |
2903afcbb7bSJonathan Cameron       _____|_________   ______|______   ______|_____   ______|_______
2913afcbb7bSJonathan Cameron   (4)|     x         | |             | |            | |              |
2923afcbb7bSJonathan Cameron      | CXL Type3 0   | | CXL Type3 1 | | CXL type3 2| | CLX Type 3 3 |
2933afcbb7bSJonathan Cameron      |               | |             | |            | |              |
2943afcbb7bSJonathan Cameron      | PMEM0(Vol LSA)| | PMEM1 (...) | | PMEM2 (...)| | PMEM3 (...)  |
2953afcbb7bSJonathan Cameron      | Decoder to go | |             | |            | |              |
2963afcbb7bSJonathan Cameron      | from host PA  | | PCI 10:00.0 | | PCI 11:00.0| | PCI 12:00.0  |
2973afcbb7bSJonathan Cameron      | to device PA  | |             | |            | |              |
2983afcbb7bSJonathan Cameron      | PCI as 0f:00.0| |             | |            | |              |
2993afcbb7bSJonathan Cameron      |_______________| |_____________| |____________| |______________|
3003afcbb7bSJonathan Cameron
301aa69abe6SJonathan CameronExample command lines
302aa69abe6SJonathan Cameron---------------------
303aa69abe6SJonathan CameronA very simple setup with just one directly attached CXL Type 3 device::
304aa69abe6SJonathan Cameron
305aa69abe6SJonathan Cameron  qemu-system-aarch64 -M virt,gic-version=3,cxl=on -m 4g,maxmem=8G,slots=8 -cpu max \
306aa69abe6SJonathan Cameron  ...
307aa69abe6SJonathan Cameron  -object memory-backend-file,id=cxl-mem1,share=on,mem-path=/tmp/cxltest.raw,size=256M \
308aa69abe6SJonathan Cameron  -object memory-backend-file,id=cxl-lsa1,share=on,mem-path=/tmp/lsa.raw,size=256M \
309aa69abe6SJonathan Cameron  -device pxb-cxl,bus_nr=12,bus=pcie.0,id=cxl.1 \
310aa69abe6SJonathan Cameron  -device cxl-rp,port=0,bus=cxl.1,id=root_port13,chassis=0,slot=2 \
311aa69abe6SJonathan Cameron  -device cxl-type3,bus=root_port13,memdev=cxl-mem1,lsa=cxl-lsa1,id=cxl-pmem0 \
31203b39fcfSJonathan Cameron  -M cxl-fmw.0.targets.0=cxl.1,cxl-fmw.0.size=4G
313aa69abe6SJonathan Cameron
314aa69abe6SJonathan CameronA setup suitable for 4 way interleave. Only one fixed window provided, to enable 2 way
315aa69abe6SJonathan Cameroninterleave across 2 CXL host bridges.  Each host bridge has 2 CXL Root Ports, with
316aa69abe6SJonathan Cameronthe CXL Type3 device directly attached (no switches).::
317aa69abe6SJonathan Cameron
318aa69abe6SJonathan Cameron  qemu-system-aarch64 -M virt,gic-version=3,cxl=on -m 4g,maxmem=8G,slots=8 -cpu max \
319aa69abe6SJonathan Cameron  ...
320aa69abe6SJonathan Cameron  -object memory-backend-file,id=cxl-mem1,share=on,mem-path=/tmp/cxltest.raw,size=256M \
321aa69abe6SJonathan Cameron  -object memory-backend-file,id=cxl-mem2,share=on,mem-path=/tmp/cxltest2.raw,size=256M \
322aa69abe6SJonathan Cameron  -object memory-backend-file,id=cxl-mem3,share=on,mem-path=/tmp/cxltest3.raw,size=256M \
323aa69abe6SJonathan Cameron  -object memory-backend-file,id=cxl-mem4,share=on,mem-path=/tmp/cxltest4.raw,size=256M \
324aa69abe6SJonathan Cameron  -object memory-backend-file,id=cxl-lsa1,share=on,mem-path=/tmp/lsa.raw,size=256M \
325aa69abe6SJonathan Cameron  -object memory-backend-file,id=cxl-lsa2,share=on,mem-path=/tmp/lsa2.raw,size=256M \
326aa69abe6SJonathan Cameron  -object memory-backend-file,id=cxl-lsa3,share=on,mem-path=/tmp/lsa3.raw,size=256M \
327aa69abe6SJonathan Cameron  -object memory-backend-file,id=cxl-lsa4,share=on,mem-path=/tmp/lsa4.raw,size=256M \
328aa69abe6SJonathan Cameron  -device pxb-cxl,bus_nr=12,bus=pcie.0,id=cxl.1 \
329aa69abe6SJonathan Cameron  -device pxb-cxl,bus_nr=222,bus=pcie.0,id=cxl.2 \
330aa69abe6SJonathan Cameron  -device cxl-rp,port=0,bus=cxl.1,id=root_port13,chassis=0,slot=2 \
331aa69abe6SJonathan Cameron  -device cxl-type3,bus=root_port13,memdev=cxl-mem1,lsa=cxl-lsa1,id=cxl-pmem0 \
332aa69abe6SJonathan Cameron  -device cxl-rp,port=1,bus=cxl.1,id=root_port14,chassis=0,slot=3 \
333aa69abe6SJonathan Cameron  -device cxl-type3,bus=root_port14,memdev=cxl-mem2,lsa=cxl-lsa2,id=cxl-pmem1 \
334aa69abe6SJonathan Cameron  -device cxl-rp,port=0,bus=cxl.2,id=root_port15,chassis=0,slot=5 \
335aa69abe6SJonathan Cameron  -device cxl-type3,bus=root_port15,memdev=cxl-mem3,lsa=cxl-lsa3,id=cxl-pmem2 \
336aa69abe6SJonathan Cameron  -device cxl-rp,port=1,bus=cxl.2,id=root_port16,chassis=0,slot=6 \
337aa69abe6SJonathan Cameron  -device cxl-type3,bus=root_port16,memdev=cxl-mem4,lsa=cxl-lsa4,id=cxl-pmem3 \
33803b39fcfSJonathan Cameron  -M cxl-fmw.0.targets.0=cxl.1,cxl-fmw.0.targets.1=cxl.2,cxl-fmw.0.size=4G,cxl-fmw.0.interleave-granularity=8k
339aa69abe6SJonathan Cameron
3403afcbb7bSJonathan CameronAn example of 4 devices below a switch suitable for 1, 2 or 4 way interleave::
3413afcbb7bSJonathan Cameron
3423afcbb7bSJonathan Cameron  qemu-system-aarch64 -M virt,gic-version=3,cxl=on -m 4g,maxmem=8G,slots=8 -cpu max \
3433afcbb7bSJonathan Cameron  ...
3443afcbb7bSJonathan Cameron  -object memory-backend-file,id=cxl-mem0,share=on,mem-path=/tmp/cxltest.raw,size=256M \
3453afcbb7bSJonathan Cameron  -object memory-backend-file,id=cxl-mem1,share=on,mem-path=/tmp/cxltest1.raw,size=256M \
3463afcbb7bSJonathan Cameron  -object memory-backend-file,id=cxl-mem2,share=on,mem-path=/tmp/cxltest2.raw,size=256M \
3473afcbb7bSJonathan Cameron  -object memory-backend-file,id=cxl-mem3,share=on,mem-path=/tmp/cxltest3.raw,size=256M \
3483afcbb7bSJonathan Cameron  -object memory-backend-file,id=cxl-lsa0,share=on,mem-path=/tmp/lsa0.raw,size=256M \
3493afcbb7bSJonathan Cameron  -object memory-backend-file,id=cxl-lsa1,share=on,mem-path=/tmp/lsa1.raw,size=256M \
3503afcbb7bSJonathan Cameron  -object memory-backend-file,id=cxl-lsa2,share=on,mem-path=/tmp/lsa2.raw,size=256M \
3513afcbb7bSJonathan Cameron  -object memory-backend-file,id=cxl-lsa3,share=on,mem-path=/tmp/lsa3.raw,size=256M \
3523afcbb7bSJonathan Cameron  -device pxb-cxl,bus_nr=12,bus=pcie.0,id=cxl.1 \
3533afcbb7bSJonathan Cameron  -device cxl-rp,port=0,bus=cxl.1,id=root_port0,chassis=0,slot=0 \
3543afcbb7bSJonathan Cameron  -device cxl-rp,port=1,bus=cxl.1,id=root_port1,chassis=0,slot=1 \
3553afcbb7bSJonathan Cameron  -device cxl-upstream,bus=root_port0,id=us0 \
3563afcbb7bSJonathan Cameron  -device cxl-downstream,port=0,bus=us0,id=swport0,chassis=0,slot=4 \
3573afcbb7bSJonathan Cameron  -device cxl-type3,bus=swport0,memdev=cxl-mem0,lsa=cxl-lsa0,id=cxl-pmem0,size=256M \
3583afcbb7bSJonathan Cameron  -device cxl-downstream,port=1,bus=us0,id=swport1,chassis=0,slot=5 \
3593afcbb7bSJonathan Cameron  -device cxl-type3,bus=swport1,memdev=cxl-mem1,lsa=cxl-lsa1,id=cxl-pmem1,size=256M \
3603afcbb7bSJonathan Cameron  -device cxl-downstream,port=2,bus=us0,id=swport2,chassis=0,slot=6 \
3613afcbb7bSJonathan Cameron  -device cxl-type3,bus=swport2,memdev=cxl-mem2,lsa=cxl-lsa2,id=cxl-pmem2,size=256M \
3623afcbb7bSJonathan Cameron  -device cxl-downstream,port=3,bus=us0,id=swport3,chassis=0,slot=7 \
3633afcbb7bSJonathan Cameron  -device cxl-type3,bus=swport3,memdev=cxl-mem3,lsa=cxl-lsa3,id=cxl-pmem3,size=256M \
3643afcbb7bSJonathan Cameron  -M cxl-fmw.0.targets.0=cxl.1,cxl-fmw.0.size=4G,cxl-fmw.0.interleave-granularity=4k
3653afcbb7bSJonathan Cameron
366aa69abe6SJonathan CameronKernel Configuration Options
367aa69abe6SJonathan Cameron----------------------------
368aa69abe6SJonathan Cameron
369120f765eSStefan WeilIn Linux 5.18 the following options are necessary to make use of
370aa69abe6SJonathan CameronOS management of CXL memory devices as described here.
371aa69abe6SJonathan Cameron
372aa69abe6SJonathan Cameron* CONFIG_CXL_BUS
373aa69abe6SJonathan Cameron* CONFIG_CXL_PCI
374aa69abe6SJonathan Cameron* CONFIG_CXL_ACPI
375aa69abe6SJonathan Cameron* CONFIG_CXL_PMEM
376aa69abe6SJonathan Cameron* CONFIG_CXL_MEM
377aa69abe6SJonathan Cameron* CONFIG_CXL_PORT
378aa69abe6SJonathan Cameron* CONFIG_CXL_REGION
379aa69abe6SJonathan Cameron
380aa69abe6SJonathan CameronReferences
381aa69abe6SJonathan Cameron----------
382aa69abe6SJonathan Cameron
383aa69abe6SJonathan Cameron - Consortium website for specifications etc:
384aa69abe6SJonathan Cameron   http://www.computeexpresslink.org
385aa69abe6SJonathan Cameron - Compute Express link Revision 2 specification, October 2020
386aa69abe6SJonathan Cameron - CEDT CFMWS & QTG _DSM ECN May 2021
387