xref: /linux/Documentation/driver-api/cxl/conventions/cxl-atl.rst (revision e812928be2ee1c2744adf20ed04e0ce1e2fc5c13)
1*0692afe9SRobert Richter.. SPDX-License-Identifier: GPL-2.0
2*0692afe9SRobert Richter
3*0692afe9SRobert RichterACPI PRM CXL Address Translation
4*0692afe9SRobert Richter================================
5*0692afe9SRobert Richter
6*0692afe9SRobert RichterDocument
7*0692afe9SRobert Richter--------
8*0692afe9SRobert Richter
9*0692afe9SRobert RichterCXL Revision 3.2, Version 1.0
10*0692afe9SRobert Richter
11*0692afe9SRobert RichterLicense
12*0692afe9SRobert Richter-------
13*0692afe9SRobert Richter
14*0692afe9SRobert RichterSPDX-License Identifier: CC-BY-4.0
15*0692afe9SRobert Richter
16*0692afe9SRobert RichterCreator/Contributors
17*0692afe9SRobert Richter--------------------
18*0692afe9SRobert Richter
19*0692afe9SRobert Richter- Robert Richter, AMD et al.
20*0692afe9SRobert Richter
21*0692afe9SRobert RichterSummary of the Change
22*0692afe9SRobert Richter---------------------
23*0692afe9SRobert Richter
24*0692afe9SRobert RichterThe CXL Fixed Memory Window Structures (CFMWS) describe zero or more Host
25*0692afe9SRobert RichterPhysical Address (HPA) windows associated with one or more CXL Host Bridges.
26*0692afe9SRobert RichterEach HPA range of a CXL Host Bridge is represented by a CFMWS entry. An HPA
27*0692afe9SRobert Richterrange may include addresses currently assigned to CXL.mem devices, or an OS may
28*0692afe9SRobert Richterassign ranges from an address window to a device.
29*0692afe9SRobert Richter
30*0692afe9SRobert RichterHost-managed Device Memory is Device-attached memory that is mapped to system
31*0692afe9SRobert Richtercoherent address space and accessible to the Host using standard write-back
32*0692afe9SRobert Richtersemantics. The managed address range is configured in the CXL HDM Decoder
33*0692afe9SRobert Richterregisters of the device. An HDM Decoder in a device is responsible for
34*0692afe9SRobert Richterconverting HPA into DPA by stripping off specific address bits.
35*0692afe9SRobert Richter
36*0692afe9SRobert RichterCXL devices and CXL bridges use the same HPA space. It is common across all
37*0692afe9SRobert Richtercomponents that belong to the same host domain. The view of the address region
38*0692afe9SRobert Richtermust be consistent on the CXL.mem path between the Host and the Device.
39*0692afe9SRobert Richter
40*0692afe9SRobert RichterThis is described in the *CXL 3.2 specification* (Table 1-1, 3.3.1,
41*0692afe9SRobert Richter8.2.4.20, 9.13.1, 9.18.1.3). [#cxl-spec-3.2]_
42*0692afe9SRobert Richter
43*0692afe9SRobert RichterDepending on the interconnect architecture of the platform, components attached
44*0692afe9SRobert Richterto a host may not share the same host physical address space. Those platforms
45*0692afe9SRobert Richterneed address translation to convert an HPA between the host and the attached
46*0692afe9SRobert Richtercomponent, such as a CXL device. The translation mechanism is host-specific and
47*0692afe9SRobert Richterimplementation dependent.
48*0692afe9SRobert Richter
49*0692afe9SRobert RichterFor example, x86 AMD platforms use a Data Fabric that manages access to physical
50*0692afe9SRobert Richtermemory. Devices have their own memory space and can be configured to use
51*0692afe9SRobert Richter'Normalized addresses' different from System Physical Addresses (SPA). Address
52*0692afe9SRobert Richtertranslation is then needed. For details, see
53*0692afe9SRobert Richter:doc:`x86 AMD Address Translation </admin-guide/RAS/address-translation>`.
54*0692afe9SRobert Richter
55*0692afe9SRobert RichterThose AMD platforms provide PRM [#prm-spec]_ handlers in firmware to perform
56*0692afe9SRobert Richtervarious types of address translation, including for CXL endpoints. AMD Zen5
57*0692afe9SRobert Richtersystems implement the ACPI PRM CXL Address Translation firmware call. The ACPI
58*0692afe9SRobert RichterPRM handler has a specific GUID to uniquely identify platforms with support for
59*0692afe9SRobert RichterNormalized addressing. This is documented in the *ACPI v6.5 Porting Guide*
60*0692afe9SRobert Richter(Address Translation - CXL DPA to System Physical Address). [#amd-ppr-58088]_
61*0692afe9SRobert Richter
62*0692afe9SRobert RichterWhen in Normalized address mode, HDM decoder address ranges must be configured
63*0692afe9SRobert Richterand handled differently. Hardware addresses used in the HDM decoder
64*0692afe9SRobert Richterconfigurations of an endpoint are not SPA and need to be translated from the
65*0692afe9SRobert Richteraddress range of the endpoint to that of the CXL host bridge. This is especially
66*0692afe9SRobert Richterimportant for finding an endpoint's associated CXL Host Bridge and HPA window
67*0692afe9SRobert Richterdescribed in the CFMWS. Additionally, the interleave decoding is done by the
68*0692afe9SRobert RichterData Fabric and the endpoint does not perform decoding when converting HPA to
69*0692afe9SRobert RichterDPA. Instead, interleaving is switched off for the endpoint (1-way). Finally,
70*0692afe9SRobert Richteraddress translation might also be needed to inspect the endpoint's hardware
71*0692afe9SRobert Richteraddresses, such as during profiling, tracing, or error handling.
72*0692afe9SRobert Richter
73*0692afe9SRobert RichterFor example, with Normalized addressing the HDM decoders could look as follows::
74*0692afe9SRobert Richter
75*0692afe9SRobert Richter                          -------------------------------
76*0692afe9SRobert Richter                          | Root Decoder (CFMWS)        |
77*0692afe9SRobert Richter                          | SPA Range: 0x850000000      |
78*0692afe9SRobert Richter                          | Size: 0x8000000000 (512 GB) |
79*0692afe9SRobert Richter                          | Interleave Ways: 1          |
80*0692afe9SRobert Richter                          -------------------------------
81*0692afe9SRobert Richter                                        |
82*0692afe9SRobert Richter                                        v
83*0692afe9SRobert Richter                          -------------------------------
84*0692afe9SRobert Richter                          | Host Bridge Decoder (HDM)   |
85*0692afe9SRobert Richter                          | SPA Range: 0x850000000      |
86*0692afe9SRobert Richter                          | Size: 0x8000000000 (512 GB) |
87*0692afe9SRobert Richter                          | Interleave Ways: 4          |
88*0692afe9SRobert Richter                          | Targets: endpoint5,8,11,13  |
89*0692afe9SRobert Richter                          | Granularity: 256            |
90*0692afe9SRobert Richter                          -------------------------------
91*0692afe9SRobert Richter                                        |
92*0692afe9SRobert Richter           -----------------------------+------------------------------
93*0692afe9SRobert Richter           |                  |                   |                   |
94*0692afe9SRobert Richter           v                  v                   v                   v
95*0692afe9SRobert Richter ------------------- ------------------- ------------------- -------------------
96*0692afe9SRobert Richter | endpoint5       | | endpoint8       | | endpoint11      | | endpoint13      |
97*0692afe9SRobert Richter | decoder5.0      | | decoder8.0      | | decoder11.0     | | decoder13.0     |
98*0692afe9SRobert Richter | PCIe:           | | PCIe:           | | PCIe:           | | PCIe:           |
99*0692afe9SRobert Richter |   0000:e2:00.0  | |   0000:e3:00.0  | |   0000:e4:00.0  | |   0000:e1:00.0  |
100*0692afe9SRobert Richter | DPA:            | | DPA:            | | DPA:            | | DPA:            |
101*0692afe9SRobert Richter |   Start: 0x0    | |   Start: 0x0    | |   Start: 0x0    | |   Start: 0x0    |
102*0692afe9SRobert Richter |   Size:         | |   Size:         | |   Size:         | |   Size:         |
103*0692afe9SRobert Richter |    0x2000000000 | |    0x2000000000 | |    0x2000000000 | |    0x2000000000 |
104*0692afe9SRobert Richter |    (128 GB)     | |    (128 GB)     | |    (128 GB)     | |    (128 GB)     |
105*0692afe9SRobert Richter | Interleaving:   | | Interleaving:   | | Interleaving:   | | Interleaving:   |
106*0692afe9SRobert Richter |   Ways: 1       | |   Ways: 1       | |   Ways: 1       | |   Ways: 1       |
107*0692afe9SRobert Richter |   Gran: 256     | |   Gran: 256     | |   Gran: 256     | |   Gran: 256     |
108*0692afe9SRobert Richter ------------------- ------------------- ------------------- -------------------
109*0692afe9SRobert Richter          |                   |                   |                   |
110*0692afe9SRobert Richter          v                   v                   v                   v
111*0692afe9SRobert Richter         DPA                 DPA                 DPA                 DPA
112*0692afe9SRobert Richter
113*0692afe9SRobert RichterThis shows the representation in sysfs:
114*0692afe9SRobert Richter
115*0692afe9SRobert Richter.. code-block:: none
116*0692afe9SRobert Richter
117*0692afe9SRobert Richter /sys/bus/cxl/devices/endpoint5/decoder5.0/interleave_granularity:256
118*0692afe9SRobert Richter /sys/bus/cxl/devices/endpoint5/decoder5.0/interleave_ways:1
119*0692afe9SRobert Richter /sys/bus/cxl/devices/endpoint5/decoder5.0/size:0x2000000000
120*0692afe9SRobert Richter /sys/bus/cxl/devices/endpoint5/decoder5.0/start:0x0
121*0692afe9SRobert Richter /sys/bus/cxl/devices/endpoint8/decoder8.0/interleave_granularity:256
122*0692afe9SRobert Richter /sys/bus/cxl/devices/endpoint8/decoder8.0/interleave_ways:1
123*0692afe9SRobert Richter /sys/bus/cxl/devices/endpoint8/decoder8.0/size:0x2000000000
124*0692afe9SRobert Richter /sys/bus/cxl/devices/endpoint8/decoder8.0/start:0x0
125*0692afe9SRobert Richter /sys/bus/cxl/devices/endpoint11/decoder11.0/interleave_granularity:256
126*0692afe9SRobert Richter /sys/bus/cxl/devices/endpoint11/decoder11.0/interleave_ways:1
127*0692afe9SRobert Richter /sys/bus/cxl/devices/endpoint11/decoder11.0/size:0x2000000000
128*0692afe9SRobert Richter /sys/bus/cxl/devices/endpoint11/decoder11.0/start:0x0
129*0692afe9SRobert Richter /sys/bus/cxl/devices/endpoint13/decoder13.0/interleave_granularity:256
130*0692afe9SRobert Richter /sys/bus/cxl/devices/endpoint13/decoder13.0/interleave_ways:1
131*0692afe9SRobert Richter /sys/bus/cxl/devices/endpoint13/decoder13.0/size:0x2000000000
132*0692afe9SRobert Richter /sys/bus/cxl/devices/endpoint13/decoder13.0/start:0x0
133*0692afe9SRobert Richter
134*0692afe9SRobert RichterNote that the endpoint interleaving configurations use direct mapping (1-way).
135*0692afe9SRobert Richter
136*0692afe9SRobert RichterWith PRM calls, the kernel can determine the following mappings:
137*0692afe9SRobert Richter
138*0692afe9SRobert Richter.. code-block:: none
139*0692afe9SRobert Richter
140*0692afe9SRobert Richter cxl decoder5.0: address mapping found for 0000:e2:00.0 (hpa -> spa):
141*0692afe9SRobert Richter   0x0+0x2000000000 -> 0x850000000+0x8000000000 ways:4 granularity:256
142*0692afe9SRobert Richter cxl decoder8.0: address mapping found for 0000:e3:00.0 (hpa -> spa):
143*0692afe9SRobert Richter   0x0+0x2000000000 -> 0x850000000+0x8000000000 ways:4 granularity:256
144*0692afe9SRobert Richter cxl decoder11.0: address mapping found for 0000:e4:00.0 (hpa -> spa):
145*0692afe9SRobert Richter   0x0+0x2000000000 -> 0x850000000+0x8000000000 ways:4 granularity:256
146*0692afe9SRobert Richter cxl decoder13.0: address mapping found for 0000:e1:00.0 (hpa -> spa):
147*0692afe9SRobert Richter   0x0+0x2000000000 -> 0x850000000+0x8000000000 ways:4 granularity:256
148*0692afe9SRobert Richter
149*0692afe9SRobert RichterThe corresponding CXL host bridge (HDM) decoders and root decoder (CFMWS) match
150*0692afe9SRobert Richterthe calculated endpoint mappings shown:
151*0692afe9SRobert Richter
152*0692afe9SRobert Richter.. code-block:: none
153*0692afe9SRobert Richter
154*0692afe9SRobert Richter /sys/bus/cxl/devices/port1/decoder1.0/interleave_granularity:256
155*0692afe9SRobert Richter /sys/bus/cxl/devices/port1/decoder1.0/interleave_ways:4
156*0692afe9SRobert Richter /sys/bus/cxl/devices/port1/decoder1.0/size:0x8000000000
157*0692afe9SRobert Richter /sys/bus/cxl/devices/port1/decoder1.0/start:0x850000000
158*0692afe9SRobert Richter /sys/bus/cxl/devices/port1/decoder1.0/target_list:0,1,2,3
159*0692afe9SRobert Richter /sys/bus/cxl/devices/port1/decoder1.0/target_type:expander
160*0692afe9SRobert Richter /sys/bus/cxl/devices/root0/decoder0.0/interleave_granularity:256
161*0692afe9SRobert Richter /sys/bus/cxl/devices/root0/decoder0.0/interleave_ways:1
162*0692afe9SRobert Richter /sys/bus/cxl/devices/root0/decoder0.0/size:0x8000000000
163*0692afe9SRobert Richter /sys/bus/cxl/devices/root0/decoder0.0/start:0x850000000
164*0692afe9SRobert Richter /sys/bus/cxl/devices/root0/decoder0.0/target_list:7
165*0692afe9SRobert Richter
166*0692afe9SRobert RichterThe following changes to the specification are needed:
167*0692afe9SRobert Richter
168*0692afe9SRobert Richter* Allow a CXL device to be in an HPA space other than the host's address space.
169*0692afe9SRobert Richter
170*0692afe9SRobert Richter* Allow the platform to use implementation-specific address translation when
171*0692afe9SRobert Richter  crossing memory domains on the CXL.mem path between the host and the device.
172*0692afe9SRobert Richter
173*0692afe9SRobert Richter* Define a PRM handler method for converting device addresses to SPAs.
174*0692afe9SRobert Richter
175*0692afe9SRobert Richter* Specify that the platform shall provide the PRM handler method to the
176*0692afe9SRobert Richter  Operating System to detect Normalized addressing and for determining Endpoint
177*0692afe9SRobert Richter  SPA ranges and interleaving configurations.
178*0692afe9SRobert Richter
179*0692afe9SRobert Richter* Add reference to:
180*0692afe9SRobert Richter
181*0692afe9SRobert Richter  | Platform Runtime Mechanism Specification, Version 1.1 – November 2020
182*0692afe9SRobert Richter  | https://uefi.org/sites/default/files/resources/PRM_Platform_Runtime_Mechanism_1_1_release_candidate.pdf
183*0692afe9SRobert Richter
184*0692afe9SRobert RichterBenefits of the Change
185*0692afe9SRobert Richter----------------------
186*0692afe9SRobert Richter
187*0692afe9SRobert RichterWithout the change, the Operating System may be unable to determine the memory
188*0692afe9SRobert Richterregion and Root Decoder for an Endpoint and its corresponding HDM decoder.
189*0692afe9SRobert RichterRegion creation would fail. Platforms with a different interconnect architecture
190*0692afe9SRobert Richterwould fail to set up and use CXL.
191*0692afe9SRobert Richter
192*0692afe9SRobert RichterReferences
193*0692afe9SRobert Richter----------
194*0692afe9SRobert Richter
195*0692afe9SRobert Richter.. [#cxl-spec-3.2] Compute Express Link Specification, Revision 3.2, Version 1.0,
196*0692afe9SRobert Richter   https://www.computeexpresslink.org/
197*0692afe9SRobert Richter
198*0692afe9SRobert Richter.. [#amd-ppr-58088] AMD Family 1Ah Models 00h–0Fh and Models 10h–1Fh,
199*0692afe9SRobert Richter   ACPI v6.5 Porting Guide, Publication # 58088,
200*0692afe9SRobert Richter   https://www.amd.com/en/search/documentation/hub.html
201*0692afe9SRobert Richter
202*0692afe9SRobert Richter.. [#prm-spec] Platform Runtime Mechanism, Version: 1.1,
203*0692afe9SRobert Richter   https://uefi.org/sites/default/files/resources/PRM_Platform_Runtime_Mechanism_1_1_release_candidate.pdf
204*0692afe9SRobert Richter
205*0692afe9SRobert RichterDetailed Description of the Change
206*0692afe9SRobert Richter----------------------------------
207*0692afe9SRobert Richter
208*0692afe9SRobert RichterThe following describes the necessary changes to the *CXL 3.2 specification*
209*0692afe9SRobert Richter[#cxl-spec-3.2]_:
210*0692afe9SRobert Richter
211*0692afe9SRobert RichterAdd the following reference to the table:
212*0692afe9SRobert Richter
213*0692afe9SRobert RichterTable 1-2. Reference Documents
214*0692afe9SRobert Richter
215*0692afe9SRobert Richter+----------------------------+-------------------+---------------------------+
216*0692afe9SRobert Richter| Document                   | Chapter Reference | Document No./Location     |
217*0692afe9SRobert Richter+============================+===================+===========================+
218*0692afe9SRobert Richter| Platform Runtime Mechanism | Chapter 8, 9      | https://www.uefi.org/acpi |
219*0692afe9SRobert Richter| Version: 1.1               |                   |                           |
220*0692afe9SRobert Richter+----------------------------+-------------------+---------------------------+
221*0692afe9SRobert Richter
222*0692afe9SRobert RichterAdd the following paragraphs to the end of the section:
223*0692afe9SRobert Richter
224*0692afe9SRobert Richter**8.2.4.20 CXL HDM Decoder Capability Structure**
225*0692afe9SRobert Richter
226*0692afe9SRobert Richter"A device may use an HPA space that is not common to other components of the
227*0692afe9SRobert Richterhost domain. The platform is responsible for address translation when crossing
228*0692afe9SRobert RichterHPA spaces. The Operating System must determine the interleaving configuration
229*0692afe9SRobert Richterand perform address translation to the HPA ranges of the HDM decoders as needed.
230*0692afe9SRobert RichterThe translation mechanism is host-specific and implementation dependent.
231*0692afe9SRobert Richter
232*0692afe9SRobert RichterThe platform indicates support of independent HPA spaces and the need for
233*0692afe9SRobert Richteraddress translation by providing a Platform Runtime Mechanism (PRM) handler. The
234*0692afe9SRobert RichterOS shall use that handler to perform the necessary translations from the DPA
235*0692afe9SRobert Richterspace to the HPA space. The handler is defined in Section 9.18.4 *PRM Handler
236*0692afe9SRobert Richterfor CXL DPA to System Physical Address Translation*."
237*0692afe9SRobert Richter
238*0692afe9SRobert RichterAdd the following section and sub-section including tables:
239*0692afe9SRobert Richter
240*0692afe9SRobert Richter**9.18.4 PRM Handler for CXL DPA to System Physical Address Translation**
241*0692afe9SRobert Richter
242*0692afe9SRobert Richter"A platform may be configured to use 'Normalized addresses'. Host physical
243*0692afe9SRobert Richteraddress (HPA) spaces are component-specific and differ from system physical
244*0692afe9SRobert Richteraddresses (SPAs). The endpoint has its own physical address space. All requests
245*0692afe9SRobert Richterpresented to the device already use Device Physical Addresses (DPAs). The CXL
246*0692afe9SRobert Richterendpoint decoders have interleaving disabled (1-way interleaving) and the device
247*0692afe9SRobert Richterdoes not perform HPA decoding to determine a DPA.
248*0692afe9SRobert Richter
249*0692afe9SRobert RichterThe platform provides a PRM handler for CXL DPA to System Physical Address
250*0692afe9SRobert RichterTranslation. The PRM handler translates a Device Physical Address (DPA) to a
251*0692afe9SRobert RichterSystem Physical Address (SPA) for a specified CXL endpoint. In the address space
252*0692afe9SRobert Richterof the host, SPA and HPA are equivalent, and the OS shall use this handler to
253*0692afe9SRobert Richterdetermine the HPA that corresponds to a device address, for example when
254*0692afe9SRobert Richterconfiguring HDM decoders on platforms with Normalized addressing. The GUID and
255*0692afe9SRobert Richterthe parameter buffer format of the handler are specified in section 9.18.4.1. If
256*0692afe9SRobert Richterthe OS identifies the PRM handler, the platform supports Normalized addressing
257*0692afe9SRobert Richterand the OS must perform DPA address translation as needed."
258*0692afe9SRobert Richter
259*0692afe9SRobert Richter**9.18.4.1 PRM Handler Invocation**
260*0692afe9SRobert Richter
261*0692afe9SRobert Richter"The OS calls the PRM handler for CXL DPA to System Physical Address Translation
262*0692afe9SRobert Richterusing the direct invocation mechanism. Details of calling a PRM handler are
263*0692afe9SRobert Richterdescribed in the Platform Runtime Mechanism (PRM) specification.
264*0692afe9SRobert Richter
265*0692afe9SRobert RichterThe PRM handler is identified by the following GUID:
266*0692afe9SRobert Richter
267*0692afe9SRobert Richter EE41B397-25D4-452C-AD54-48C6E3480B94
268*0692afe9SRobert Richter
269*0692afe9SRobert RichterThe caller allocates and prepares a Parameter Buffer, then passes the PRM
270*0692afe9SRobert Richterhandler GUID and a pointer to the Parameter Buffer to invoke the handler. The
271*0692afe9SRobert RichterParameter Buffer is described in Table 9-32."
272*0692afe9SRobert Richter
273*0692afe9SRobert Richter**Table 9-32. PRM Parameter Buffer used for CXL DPA to System Physical Address Translation**
274*0692afe9SRobert Richter
275*0692afe9SRobert Richter+-------------+-----------+------------------------------------------------------------------------+
276*0692afe9SRobert Richter| Byte Offset | Length in | Description                                                            |
277*0692afe9SRobert Richter|             |   Bytes   |                                                                        |
278*0692afe9SRobert Richter+=============+===========+========================================================================+
279*0692afe9SRobert Richter| 00h         | 8         | **CXL Device Physical Address (DPA)**: CXL DPA (e.g., from             |
280*0692afe9SRobert Richter|             |           | CXL Component Event Log)                                               |
281*0692afe9SRobert Richter+-------------+-----------+------------------------------------------------------------------------+
282*0692afe9SRobert Richter| 08h         | 4         | **CXL Endpoint SBDF**:                                                 |
283*0692afe9SRobert Richter|             |           |                                                                        |
284*0692afe9SRobert Richter|             |           | - Byte 3 - PCIe Segment                                                |
285*0692afe9SRobert Richter|             |           | - Byte 2 - Bus Number                                                  |
286*0692afe9SRobert Richter|             |           | - Byte 1:                                                              |
287*0692afe9SRobert Richter|             |           |          - Device Number Bits[7:3]                                     |
288*0692afe9SRobert Richter|             |           |          - Function Number Bits[2:0]                                   |
289*0692afe9SRobert Richter|             |           | - Byte 0 - RESERVED (MBZ)                                              |
290*0692afe9SRobert Richter|             |           |                                                                        |
291*0692afe9SRobert Richter+-------------+-----------+------------------------------------------------------------------------+
292*0692afe9SRobert Richter| 0Ch         | 8         | **Output Buffer**: Virtual Address Pointer to the buffer,              |
293*0692afe9SRobert Richter|             |           | as defined in Table 9-33.                                              |
294*0692afe9SRobert Richter+-------------+-----------+------------------------------------------------------------------------+
295*0692afe9SRobert Richter
296*0692afe9SRobert Richter**Table 9-33. PRM Output Buffer used for CXL DPA to System Physical Address Translation**
297*0692afe9SRobert Richter
298*0692afe9SRobert Richter+-------------+-----------+------------------------------------------------------------------------+
299*0692afe9SRobert Richter| Byte Offset | Length in | Description                                                            |
300*0692afe9SRobert Richter|             |   Bytes   |                                                                        |
301*0692afe9SRobert Richter+=============+===========+========================================================================+
302*0692afe9SRobert Richter| 00h         | 8         | **System Physical Address (SPA)**: The SPA converted                   |
303*0692afe9SRobert Richter|             |           | from the CXL DPA.                                                      |
304*0692afe9SRobert Richter+-------------+-----------+------------------------------------------------------------------------+
305