|
| 1 | +# Title: Introduce a Generic Port for hotplug memory buses like CXL |
| 2 | + |
| 3 | +# Status: Draft v2 |
| 4 | + |
| 5 | +# Document: ACPI Specification 6.4 |
| 6 | + |
| 7 | +# License |
| 8 | +SPDX-License Identifier: CC-BY-4.0 |
| 9 | + |
| 10 | +# Submitter: |
| 11 | +* Sponsor: Dan Williams, Intel |
| 12 | +* Creators/Contributors: |
| 13 | + * Mahesh Natu, Intel |
| 14 | + * Chet Douglas, Intel |
| 15 | + * Deepak Shivakumar, Intel |
| 16 | + * Jonathan Cameron, Huawei |
| 17 | + |
| 18 | +# Changes since v1 |
| 19 | + * Rename Generic Target to Generic Port and make a new distinct SRAT |
| 20 | + type independent of Generic Initiator (Jonathan) |
| 21 | + * Clarify that this new "Port" concept is not limited to CXL. It is a |
| 22 | + generic way to describe the performance of static paths to |
| 23 | + dynamically added system memory (Mahesh) |
| 24 | + |
| 25 | +# Summary of the Change |
| 26 | +Introduce a new "Generic Port" type to the SRAT to describe the |
| 27 | +performance from CPU and other initiator domains to the root of a CXL |
| 28 | +topology, or any other topology that might dynamically add system memory |
| 29 | +behind the "Port". This is in support of, but not limited to, the OS |
| 30 | +being able to enumerate the performance topology for dynamically added / |
| 31 | +discovered CXL Memory Device endpoints. |
| 32 | + |
| 33 | +# Benefits of the Change |
| 34 | +Consider the case of a system with a set of CXL Host Bridges (ACPI0016), |
| 35 | +and some endpoints attached at boot. In that scenario the platform |
| 36 | +firmware is able to enumerate those devices, enumerate and map CXL |
| 37 | +memory into the system physical memory address space, and generate the |
| 38 | +typical static SRAT/SLIT/HMAT set of tables describing CXL attached |
| 39 | +memory. Now, consider the case where devices are dynamically added and |
| 40 | +enumerated post boot, i.e. post generation of the static memory tables. |
| 41 | +In this scenario platform firmware is unable to perform the end-to-end |
| 42 | +enumeration necessary to populate SRAT and HMAT for the endpoints that |
| 43 | +may be hot-inserted behind those bridges post power-on. The |
| 44 | +address-range is unknown so SRAT can not be pre-populated in the typical |
| 45 | +way that hotplug system memory is enumerated. Even if a static address |
| 46 | +range was set aside for future hotplug the performance is unknown (no |
| 47 | +CDAT nor interleave configuration) so HMAT can not be pre-populated. |
| 48 | + |
| 49 | +However, what is known to platform firmware that generates the |
| 50 | +SRAT/SLIT/HMAT and is the performance characteristics of the path |
| 51 | +between CPU and Generic Initiators to the Generic Port (e.g. CXL Host |
| 52 | +Bridge). With the addition of a Generic Port proximity domain to the |
| 53 | +SRAT then the SLIT and HMAT can enumerate the platform-static component |
| 54 | +of a given edge in the platform-performance topology graph. It enables |
| 55 | +the OS to build out a performance mapping for system memory address |
| 56 | +ranges dynamically discovered, or provisioned, behind a Generic Port. |
| 57 | +The OS mapping takes into account the Generic Port performance (as |
| 58 | +either an initiator or a target), the interleave configuration, and the |
| 59 | +bus enumerable performance characteristics (link latency, bandwidth, |
| 60 | +switch traversals) to supplement the static HMAT data enumerated at |
| 61 | +boot. |
| 62 | + |
| 63 | +# Impact of the Change |
| 64 | +A new SRAT type requires non-conforming system software to ignore the |
| 65 | +new type in the SRAT, ignore any coordinate in the SLIT that includes |
| 66 | +the associated port's proximity domain, and ignore any coordinate in the |
| 67 | +HMAT that includes the port's proximity domain as either an initiator or |
| 68 | +a target. |
| 69 | + |
| 70 | +In contrast, conforming system software need only consult the Generic |
| 71 | +Port data to optionally extend the enumeration and distinguish Port |
| 72 | +attached initiators and memory targets from the existing set of |
| 73 | +enumerated proximity domains. |
| 74 | + |
| 75 | +A conforming implementation also has the option to ignore the Generic Port |
| 76 | +contribution to the performance, in either a row, or col to be considered |
| 77 | +by system software that parses SRAT, SLIT, and HMAT. Given that the OS |
| 78 | +still needs to dynamically enumerate and instantiate the memory ranges and |
| 79 | +initiators behind the Generic Port. The assumption is that operating systems |
| 80 | +that do not support native CXL enumeration will ignore this data in the HMAT, |
| 81 | +while CXL native enumeration aware environments will use this fragment of the |
| 82 | +performance path to calculate the performance characteristics. |
| 83 | + |
| 84 | +# References |
| 85 | +* Compute Express Link Specification v2.0, |
| 86 | +<https://www.computeexpresslink.org/> |
| 87 | + |
| 88 | +# Detailed Description of the Change |
| 89 | + |
| 90 | +* Section 5.2.16 System Resource Affinity Table (SRAT) add another |
| 91 | + bullet for Generic Ports: |
| 92 | + |
| 93 | + * generic ports (e.g. host bridges that can dynamically discover |
| 94 | + new initiators and instantiate new memory range targets) |
| 95 | + |
| 96 | +* Add new section 5.2.16.7 Generic Port Affinity Structure: |
| 97 | + The Generic Port Affinity Structure provides an association between a |
| 98 | + proximity domain number and a device handle representing a Generic |
| 99 | + Port (e.g. CXL Host Bridge, or similar device that hosts a dynamic |
| 100 | + topology of memory ranges and/or initiators). |
| 101 | + |
| 102 | + Support of Generic Port Affinity Structures by an OSPM is optional. |
| 103 | + |
| 104 | +* Add a table describing the Generic Port Affinity Structure (Table |
| 105 | + 5.xx): |
| 106 | + |
| 107 | + |
| 108 | +| Field | Byte Length | Byte Offset | Description | |
| 109 | +| :----- | :--- | :--- | :--------------------------- | |
| 110 | +| Type | 1 | 0 | 6 Generic Port Structure | |
| 111 | +| Length | 1 | 1 | 32 | |
| 112 | +| Reserved | 1 | 2 | Reserved and must be zero | |
| 113 | +| Device Handle Type | 1 | 3 | Device Handle Type: See 5.2.16.6 Generic Initiator Affinity Structure for the possible device handle types and their format. | |
| 114 | +| Proximity Domain | 4 | 4 | The proximity domain to identify the performance of this port in the HMAT. | |
| 115 | +| Device Handle | 16 | 8 | Device Handle of the Generic Port, see Table 5.57 and 5.58 for a description of this field. | |
| 116 | +| Flags | 4 | 24 | See table 5.59 for a description of this field. | |
| 117 | +| Reserved | 4 | 28 | Reserved and must be zero. | |
| 118 | + |
| 119 | +* Replace all instances of "Initiator" with "Initiator / Port" in "Table |
| 120 | + 5.59 Flags - Generic Initiator Affinity Structure", including the |
| 121 | + table name. |
0 commit comments