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