[PATCH 0/7] Enumerate HDM Decoder registers

Ben Widawsky
2021-04-07T22:26:55Z

The arbiter of a Host-managed Device Memory (HDM) region is an "HDM Decoder".
An HDM decoder is defined in the Compute eXpress Link (CXL) specification as
hardware that handles the routing of memory ranges controlled by CXL devices in
a linear, or interleaved fashion.

HDM decoders are not specific to CXL devices and therefore live in a different
part of the MMIO space for CXL *components*. The CXL component registers are
found and mapped in a similar way to the device registers and so a lot of this
series is refactoring to try to easily add the new register block type.

Management of HDM decoders is not handled in this series. This work is the
foundation for the eventual integration with libnvdimm. That integration will
enable CXL persistent and volatile capacities to be managed by Linux and gain
use of all the related existing infrastructure.

These patches go on top of the reworks and improvements recently submitted by
Dan [1].

[1]: https://lore.kernel.org/linux-cxl/161728744224.2474040.12854720917440712854.stgit@dwillia2-desk3.amr.corp.intel.com/T/#t

Ben Widawsky (7):
cxl/mem: Use dev instead of pdev->dev
cxl/mem: Split creation from mapping in probe
cxl/mem: Move register locator logic into reg setup
cxl/mem: Get rid of @cxlm.base
cxl/mem: Move device register setup
cxl/mem: Create a helper to setup device regs
cxl: Add HDM decoder capbilities

drivers/cxl/core.c | 73 +++++++++++++++
drivers/cxl/cxl.h | 48 ++++++++++
drivers/cxl/mem.c | 225 +++++++++++++++++++++++++++------------------
drivers/cxl/mem.h | 2 -
drivers/cxl/pci.h | 1 +
5 files changed, 260 insertions(+), 89 deletions(-)

base-commit: 24ca2d6ff18cc59c14c0aff65025b0cc11a72722
--
2.31.1