2021-02-17 04:09:50 +00:00
|
|
|
# SPDX-License-Identifier: GPL-2.0-only
|
|
|
|
menuconfig CXL_BUS
|
|
|
|
tristate "CXL (Compute Express Link) Devices Support"
|
|
|
|
depends on PCI
|
|
|
|
help
|
|
|
|
CXL is a bus that is electrically compatible with PCI Express, but
|
|
|
|
layers three protocols on that signalling (CXL.io, CXL.cache, and
|
|
|
|
CXL.mem). The CXL.cache protocol allows devices to hold cachelines
|
|
|
|
locally, the CXL.mem protocol allows devices to be fully coherent
|
|
|
|
memory targets, the CXL.io protocol is equivalent to PCI Express.
|
|
|
|
Say 'y' to enable support for the configuration and management of
|
|
|
|
devices supporting these protocols.
|
|
|
|
|
|
|
|
if CXL_BUS
|
|
|
|
|
|
|
|
config CXL_MEM
|
|
|
|
tristate "CXL.mem: Memory Devices"
|
2021-06-09 16:01:41 +00:00
|
|
|
default CXL_BUS
|
2021-02-17 04:09:50 +00:00
|
|
|
help
|
|
|
|
The CXL.mem protocol allows a device to act as a provider of
|
|
|
|
"System RAM" and/or "Persistent Memory" that is fully coherent
|
|
|
|
as if the memory was attached to the typical CPU memory
|
|
|
|
controller.
|
|
|
|
|
cxl: Rename mem to pci
As the driver has undergone development, it's become clear that the
majority [entirety?] of the current functionality in mem.c is actually a
layer encapsulating functionality exposed through PCI based
interactions. This layer can be used either in isolation or to provide
functionality for higher level functionality.
CXL capabilities exist in a parallel domain to PCIe. CXL devices are
enumerable and controllable via "legacy" PCIe mechanisms; however, their
CXL capabilities are a superset of PCIe. For example, a CXL device may
be connected to a non-CXL capable PCIe root port, and therefore will not
be able to participate in CXL.mem or CXL.cache operations, but can still
be accessed through PCIe mechanisms for CXL.io operations.
To properly represent the PCI nature of this driver, and in preparation for
introducing a new driver for the CXL.mem / HDM decoder (Host-managed Device
Memory) capabilities of a CXL memory expander, rename mem.c to pci.c so that
mem.c is available for this new driver.
The result of the change is that there is a clear layering distinction
in the driver, and a systems administrator may load only the cxl_pci
module and gain access to such operations as, firmware update, offline
provisioning of devices, and error collection. In addition to freeing up
the file name for another purpose, there are two primary reasons this is
useful,
1. Acting upon devices which don't have full CXL capabilities. This
may happen for instance if the CXL device is connected in a CXL
unaware part of the platform topology.
2. Userspace-first provisioning for devices without kernel driver
interference. This may be useful when provisioning a new device
in a specific manner that might otherwise be blocked or prevented
by the real CXL mem driver.
Reviewed-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Ben Widawsky <ben.widawsky@intel.com>
Link: https://lore.kernel.org/r/20210526174413.802913-1-ben.widawsky@intel.com
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
2021-05-26 17:44:13 +00:00
|
|
|
Say 'y/m' to enable a driver that will attach to CXL.mem devices for
|
|
|
|
configuration and management primarily via the mailbox interface. See
|
|
|
|
Chapter 2.3 Type 3 CXL Device in the CXL 2.0 specification for more
|
|
|
|
details.
|
2021-02-17 04:09:50 +00:00
|
|
|
|
|
|
|
If unsure say 'm'.
|
2021-02-17 04:09:54 +00:00
|
|
|
|
|
|
|
config CXL_MEM_RAW_COMMANDS
|
|
|
|
bool "RAW Command Interface for Memory Devices"
|
|
|
|
depends on CXL_MEM
|
|
|
|
help
|
|
|
|
Enable CXL RAW command interface.
|
|
|
|
|
|
|
|
The CXL driver ioctl interface may assign a kernel ioctl command
|
|
|
|
number for each specification defined opcode. At any given point in
|
|
|
|
time the number of opcodes that the specification defines and a device
|
|
|
|
may implement may exceed the kernel's set of associated ioctl function
|
|
|
|
numbers. The mismatch is either by omission, specification is too new,
|
|
|
|
or by design. When prototyping new hardware, or developing / debugging
|
|
|
|
the driver it is useful to be able to submit any possible command to
|
|
|
|
the hardware, even commands that may crash the kernel due to their
|
|
|
|
potential impact to memory currently in use by the kernel.
|
|
|
|
|
|
|
|
If developing CXL hardware or the driver say Y, otherwise say N.
|
2021-06-09 16:01:35 +00:00
|
|
|
|
|
|
|
config CXL_ACPI
|
|
|
|
tristate "CXL ACPI: Platform Support"
|
|
|
|
depends on ACPI
|
2021-06-09 16:01:41 +00:00
|
|
|
default CXL_BUS
|
2021-06-09 16:01:35 +00:00
|
|
|
help
|
|
|
|
Enable support for host managed device memory (HDM) resources
|
|
|
|
published by a platform's ACPI CXL memory layout description. See
|
|
|
|
Chapter 9.14.1 CXL Early Discovery Table (CEDT) in the CXL 2.0
|
|
|
|
specification, and CXL Fixed Memory Window Structures (CEDT.CFMWS)
|
|
|
|
(https://www.computeexpresslink.org/spec-landing). The CXL core
|
|
|
|
consumes these resource to publish the root of a cxl_port decode
|
|
|
|
hierarchy to map regions that represent System RAM, or Persistent
|
|
|
|
Memory regions to be managed by LIBNVDIMM.
|
|
|
|
|
2021-06-15 23:18:17 +00:00
|
|
|
If unsure say 'm'.
|
|
|
|
|
|
|
|
config CXL_PMEM
|
|
|
|
tristate "CXL PMEM: Persistent Memory Support"
|
|
|
|
depends on LIBNVDIMM
|
|
|
|
default CXL_BUS
|
|
|
|
help
|
|
|
|
In addition to typical memory resources a platform may also advertise
|
|
|
|
support for persistent memory attached via CXL. This support is
|
|
|
|
managed via a bridge driver from CXL to the LIBNVDIMM system
|
|
|
|
subsystem. Say 'y/m' to enable support for enumerating and
|
|
|
|
provisioning the persistent memory capacity of CXL memory expanders.
|
|
|
|
|
2021-06-09 16:01:35 +00:00
|
|
|
If unsure say 'm'.
|
2021-02-17 04:09:50 +00:00
|
|
|
endif
|