| .. SPDX-License-Identifier: GPL-2.0 | 
 | .. include:: <isonum.txt> | 
 |  | 
 | =========================================== | 
 | Compute Express Link Subsystem Maturity Map | 
 | =========================================== | 
 |  | 
 | The Linux CXL subsystem tracks the dynamic `CXL specification | 
 | <https://computeexpresslink.org/cxl-specification-landing-page>`_ that | 
 | continues to respond to new use cases with new features, capability | 
 | updates and fixes. At any given point some aspects of the subsystem are | 
 | more mature than others. While the periodic pull requests summarize the | 
 | `work being incorporated each merge window | 
 | <https://lore.kernel.org/linux-cxl/?q=s%3APULL+s%3ACXL+tc%3Atorvalds+NOT+s%3ARe>`_, | 
 | those do not always convey progress relative to a starting point and a | 
 | future end goal. | 
 |  | 
 | What follows is a coarse breakdown of the subsystem's major | 
 | responsibilities along with a maturity score. The expectation is that | 
 | the change-history of this document provides an overview summary of the | 
 | subsystem maturation over time. | 
 |  | 
 | The maturity scores are: | 
 |  | 
 | - [3] Mature: Work in this area is complete and no changes on the horizon. | 
 |   Note that this score can regress from one kernel release to the next | 
 |   based on new test results or end user reports. | 
 |  | 
 | - [2] Stabilizing: Major functionality operational, common cases are | 
 |   mature, but known corner cases are still a work in progress. | 
 |  | 
 | - [1] Initial: Capability that has exited the Proof of Concept phase, but | 
 |   may still have significant gaps to close and fixes to apply as real | 
 |   world testing occurs. | 
 |  | 
 | - [0] Known gap: Feature is on a medium to long term horizon to | 
 |   implement.  If the specification has a feature that does not even have | 
 |   a '0' score in this document, there is a good chance that no one in | 
 |   the linux-cxl@vger.kernel.org community has started to look at it. | 
 |  | 
 | - X: Out of scope for kernel enabling, or kernel enabling not required | 
 |  | 
 | Feature and Capabilities | 
 | ======================== | 
 |  | 
 | Enumeration / Provisioning | 
 | -------------------------- | 
 | All of the fundamental enumeration an object model of the subsystem is | 
 | in place, but there are several corner cases that are pending closure. | 
 |  | 
 |  | 
 | * [2] CXL Window Enumeration | 
 |  | 
 |   * [2] :ref:`Extended-linear memory-side cache <extended-linear>` | 
 |   * [0] Low Memory-hole | 
 |   * [X] Hetero-interleave | 
 |  | 
 | * [2] Switch Enumeration | 
 |  | 
 |   * [0] CXL register enumeration link-up dependency | 
 |  | 
 | * [2] HDM Decoder Configuration | 
 |  | 
 |   * [0] Decoder target and granularity constraints | 
 |  | 
 | * [2] Performance enumeration | 
 |  | 
 |   * [3] Endpoint CDAT | 
 |   * [3] Switch CDAT | 
 |   * [1] CDAT to Core-mm integration | 
 |  | 
 |     * [1] x86 | 
 |     * [0] Arm64 | 
 |     * [0] All other arch. | 
 |  | 
 |   * [0] Shared link | 
 |  | 
 | * [2] Hotplug | 
 |   (see CXL Window Enumeration) | 
 |  | 
 |   * [0] Handle Soft Reserved conflicts | 
 |  | 
 | * [0] :ref:`RCH link status <rch-link-status>` | 
 | * [0] Fabrics / G-FAM (chapter 7) | 
 | * [0] Global Access Endpoint | 
 |  | 
 |  | 
 | RAS | 
 | --- | 
 | In many ways CXL can be seen as a standardization of what would normally | 
 | be handled by custom EDAC drivers. The open development here is | 
 | mainly caused by the enumeration corner cases above. | 
 |  | 
 | * [3] Component events (OS) | 
 | * [2] Component events (FFM) | 
 | * [1] Endpoint protocol errors (OS) | 
 | * [1] Endpoint protocol errors (FFM) | 
 | * [0] Switch protocol errors (OS) | 
 | * [1] Switch protocol errors (FFM) | 
 | * [2] DPA->HPA Address translation | 
 |  | 
 |     * [1] XOR Interleave translation | 
 |       (see CXL Window Enumeration) | 
 |  | 
 | * [1] Memory Failure coordination | 
 | * [0] Scrub control | 
 | * [2] ACPI error injection EINJ | 
 |  | 
 |   * [0] EINJ v2 | 
 |   * [X] Compliance DOE | 
 |  | 
 | * [2] Native error injection | 
 | * [3] RCH error handling | 
 | * [1] VH error handling | 
 | * [0] PPR | 
 | * [0] Sparing | 
 | * [0] Device built in test | 
 |  | 
 |  | 
 | Mailbox commands | 
 | ---------------- | 
 |  | 
 | * [3] Firmware update | 
 | * [3] Health / Alerts | 
 | * [1] :ref:`Background commands <background-commands>` | 
 | * [3] Sanitization | 
 | * [3] Security commands | 
 | * [3] RAW Command Debug Passthrough | 
 | * [0] CEL-only-validation Passthrough | 
 | * [0] Switch CCI | 
 | * [3] Timestamp | 
 | * [1] PMEM labels | 
 | * [3] PMEM GPF / Dirty Shutdown | 
 | * [0] Scan Media | 
 |  | 
 | PMU | 
 | --- | 
 | * [1] Type 3 PMU | 
 | * [0] Switch USP/ DSP, Root Port | 
 |  | 
 | Security | 
 | -------- | 
 |  | 
 | * [X] CXL Trusted Execution Environment Security Protocol (TSP) | 
 | * [X] CXL IDE (subsumed by TSP) | 
 |  | 
 | Memory-pooling | 
 | -------------- | 
 |  | 
 | * [1] Hotplug of LDs (via PCI hotplug) | 
 | * [0] Dynamic Capacity Device (DCD) Support | 
 |  | 
 | Multi-host sharing | 
 | ------------------ | 
 |  | 
 | * [0] Hardware coherent shared memory | 
 | * [0] Software managed coherency shared memory | 
 |  | 
 | Multi-host memory | 
 | ----------------- | 
 |  | 
 | * [0] Dynamic Capacity Device Support | 
 | * [0] Sharing | 
 |  | 
 | Accelerator | 
 | ----------- | 
 |  | 
 | * [0] Accelerator memory enumeration HDM-D (CXL 1.1/2.0 Type-2) | 
 | * [0] Accelerator memory enumeration HDM-DB (CXL 3.0 Type-2) | 
 | * [0] CXL.cache 68b (CXL 2.0) | 
 | * [0] CXL.cache 256b Cache IDs (CXL 3.0) | 
 |  | 
 | User Flow Support | 
 | ----------------- | 
 |  | 
 | * [2] Inject & clear poison by region offset | 
 |  | 
 | Details | 
 | ======= | 
 |  | 
 | .. _extended-linear: | 
 |  | 
 | * **Extended-linear memory-side cache**: An HMAT proposal to enumerate the presence of a | 
 |   memory-side cache where the cache capacity extends the SRAT address | 
 |   range capacity. `See the ECN | 
 |   <https://lore.kernel.org/linux-cxl/6650e4f835a0e_195e294a8@dwillia2-mobl3.amr.corp.intel.com.notmuch/>`_ | 
 |   for more details: | 
 |  | 
 | .. _rch-link-status: | 
 |  | 
 | * **RCH Link Status**: RCH (Restricted CXL Host) topologies, end up | 
 |   hiding some standard registers like PCIe Link Status / Capabilities in | 
 |   the CXL RCRB (Root Complex Register Block). | 
 |  | 
 | .. _background-commands: | 
 |  | 
 | * **Background commands**: The CXL background command mechanism is | 
 |   awkward as the single slot is monopolized potentially indefinitely by | 
 |   various commands. A `cancel on conflict | 
 |   <http://lore.kernel.org/r/66035c2e8ba17_770232948b@dwillia2-xfh.jf.intel.com.notmuch>`_ | 
 |   facility is needed to make sure the kernel can ensure forward progress | 
 |   of priority commands. |