linux/Documentation/driver-api
Ben Widawsky 779dd20cfb cxl/region: Add region creation support
CXL 2.0 allows for dynamic provisioning of new memory regions (system
physical address resources like "System RAM" and "Persistent Memory").
Whereas DDR and PMEM resources are conveyed statically at boot, CXL
allows for assembling and instantiating new regions from the available
capacity of CXL memory expanders in the system.

Sysfs with an "echo $region_name > $create_region_attribute" interface
is chosen as the mechanism to initiate the provisioning process. This
was chosen over ioctl() and netlink() to keep the configuration
interface entirely in a pseudo-fs interface, and it was chosen over
configfs since, aside from this one creation event, the interface is
read-mostly. I.e. configfs supports cases where an object is designed to
be provisioned each boot, like an iSCSI storage target, and CXL region
creation is mostly for PMEM regions which are created usually once
per-lifetime of a server instance. This is an improvement over nvdimm
that pre-created "seed" devices that tended to confuse users looking to
determine which devices are active and which are idle.

Recall that the major change that CXL brings over previous persistent
memory architectures is the ability to dynamically define new regions.
Compare that to drivers like 'nfit' where the region configuration is
statically defined by platform firmware.

Regions are created as a child of a root decoder that encompasses an
address space with constraints. When created through sysfs, the root
decoder is explicit. When created from an LSA's region structure a root
decoder will possibly need to be inferred by the driver.

Upon region creation through sysfs, a vacant region is created with a
unique name. Regions have a number of attributes that must be configured
before the region can be bound to the driver where HDM decoder program
is completed.

An example of creating a new region:

- Allocate a new region name:
region=$(cat /sys/bus/cxl/devices/decoder0.0/create_pmem_region)

- Create a new region by name:
while
region=$(cat /sys/bus/cxl/devices/decoder0.0/create_pmem_region)
! echo $region > /sys/bus/cxl/devices/decoder0.0/create_pmem_region
do true; done

- Region now exists in sysfs:
stat -t /sys/bus/cxl/devices/decoder0.0/$region

- Delete the region, and name:
echo $region > /sys/bus/cxl/devices/decoder0.0/delete_region

Signed-off-by: Ben Widawsky <bwidawsk@kernel.org>
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Link: https://lore.kernel.org/r/165784333909.1758207.794374602146306032.stgit@dwillia2-xfh.jf.intel.com
[djbw: simplify locking, reword changelog]
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
2022-07-21 17:19:25 -07:00
..
80211
acpi Documentation: ACPI: fix error script name 2021-06-17 13:21:48 -06:00
backlight
cxl cxl/region: Add region creation support 2022-07-21 17:19:25 -07:00
dmaengine dmaengine: Document dmaengine_prep_dma_memset 2022-04-20 17:28:12 +05:30
driver-model Documentation: devres: fix typo in interface list 2022-04-28 12:29:52 -06:00
early-userspace Documentation: Fix intiramfs script name 2021-07-18 23:48:14 +09:00
firmware firmware_loader: Add sysfs nodes to monitor fw_upload 2022-04-26 12:35:55 +02:00
fpga fpga: region: Use standard dev_release for class driver 2021-11-28 14:02:41 -08:00
gpio Documentation: gpio: Advertise irqd_to_hwirq() helper in the examples 2022-05-16 20:16:54 +03:00
hte docs: Move the HTE documentation to driver-api/ 2022-06-09 10:02:47 -06:00
i3c
iio docs: iio: mark "repeat" sysfs attribute as optional 2021-03-11 20:47:08 +00:00
md
media media: Documentation: mc: Add media_device_{init,cleanup} 2022-05-17 09:18:02 +02:00
mei
memory-devices
mmc docs: mmc: update maintainer name and URL 2021-10-28 11:54:54 +02:00
mtd Documentation / MTD: Rename the intel-spi driver 2022-02-14 12:53:10 +00:00
nfc nfc: constify nfc_llc_ops 2021-07-25 09:21:21 +01:00
nvdimm nvdimm/blk: Fix title level 2022-03-23 17:52:33 -07:00
pci PCI/MSI: Move code into a separate directory 2021-12-09 11:52:22 +01:00
phy
pldmfw
pm docs: devices.rst: better reference documentation docs 2021-06-17 13:24:36 -06:00
rapidio
serial Documentation: tty: move moxa-smartio.rst to tty 2022-04-14 18:24:24 +02:00
soundwire
surface_aggregator platform-drivers-x86 for v5.14-1 2021-06-30 11:15:39 -07:00
thermal docs: driver-api/thermal/intel_dptf: Use copyright symbol 2022-04-05 09:46:06 -06:00
tty Documentation: tty: n_gsm, use power of ReST 2022-04-14 18:24:24 +02:00
usb Docs: usb: update writesize, copy_from_user, usb_fill_bulk_urb, usb_submit_urb 2021-11-17 14:54:58 +01:00
xilinx firmware: xilinx: Remove zynqmp_pm_get_eemi_ops() in IS_REACHABLE(CONFIG_ZYNQMP_FIRMWARE) 2021-03-01 12:52:07 +01:00
auxiliary_bus.rst Documentation/auxiliary_bus: Move the text into the code 2021-12-03 16:41:50 +01:00
basics.rst
clk.rst
component.rst
connector.rst
console.rst
dcdbas.rst
devfreq.rst
device_link.rst
device-io.rst dma-buf-map: Rename to iosys-map 2022-02-07 16:35:35 -08:00
dma-buf.rst dma-buf: add dma_fence_unwrap v2 2022-03-25 14:18:28 +01:00
edac.rst
eisa.rst
firewire.rst Documentation: fix firewire.rst ABI file path error 2022-01-20 17:01:32 -07:00
frame-buffer.rst
generic-counter.rst counter: Update documentation for new counter registration functions 2021-12-30 17:44:06 +01:00
hsi.rst
i2c.rst
index.rst docs: Move the HTE documentation to driver-api/ 2022-06-09 10:02:47 -06:00
infiniband.rst
infrastructure.rst
input.rst
interconnect.rst
io_ordering.rst
io-mapping.rst
ioctl.rst docs: driver-api: avoid using ReST :doc:foo markup 2021-06-17 13:24:37 -06:00
ipmb.rst
ipmi.rst ipmi: Add docs for the IPMI IPMB driver 2021-10-05 06:54:17 -05:00
isa.rst
isapnp.rst
libata.rst libata: Improve ATA queued command allocation 2022-04-11 09:27:44 +09:00
mailbox.rst
men-chameleon-bus.rst
message-based.rst
misc_devices.rst
miscellaneous.rst
mtdnand.rst
ntb.rst
nvmem.rst doc: nvmem: Update example 2022-02-21 18:00:30 +01:00
parport-lowlevel.rst
pin-control.rst docs/pinctrl: fix the reference to the u300 platform 2021-05-28 02:59:40 +02:00
pps.rst
ptp.rst
pwm.rst pwm: Document that the pinstate of a disabled PWM isn't reliable 2022-05-20 16:36:07 +02:00
regulator.rst
reset.rst
rfkill.rst
s390-drivers.rst
scsi.rst
slimbus.rst
sm501.rst
spi.rst
switchtec.rst
sync_file.rst
target.rst
uio-howto.rst
vfio-mediated-device.rst vfio/mdev: Pass in a struct vfio_device * to vfio_pin/unpin_pages() 2022-05-11 13:12:59 -06:00
vfio-pci-device-specific-driver-acceptance.rst vfio-pci: Provide reviewers and acceptance criteria for variant drivers 2022-03-17 09:57:11 -06:00
vfio.rst vfio: Introduce a vfio_uninit_group_dev() API call 2021-08-11 09:50:10 -06:00
vme.rst
w1.rst
xillybus.rst
zorro.rst