[PATCH 0/5] PCI/CXL: Save and restore CXL DVSEC and HDM state across resets

smadhavan
2026-03-06T08:00:51Z

From: Srirangan Madhavan <smadhavan@nvidia.com>

CXL devices could lose their DVSEC configuration and HDM decoder programming
after multiple reset methods (whenever link disable/enable). This means a
device that was fully configured — with DVSEC control/range registers set
and HDM decoders committed — loses that state after reset. In cases where
these are programmed by firmware, downstream drivers are unable to re-initialize
the device because CXL memory ranges are no longer mapped.

This series adds CXL state save/restore logic to the PCI core so
that DVSEC and HDM decoder state is preserved across any PCI reset
path that calls pci_save_state() / pci_restore_state(), for a CXL capable device.

HDM decoder defines and the cxl_register_map infrastructure are moved from
internal CXL driver headers to a new public include/cxl/pci.h, allowing
drivers/pci/cxl.c to use them.
This layout aligns with Alejandro Lucero's CXL Type-2 device series [1] to
minimize conflicts when both land. When he rebases to 7.0-rc2, I can move my
changes on top of his.

These patches were previously part of the CXL reset series and have been
split out [2] to allow independent review and merging. Review feedback on
the save/restore portions from v4 has been addressed.

Tested on a CXL Type-2 device. DVSEC and HDM state is correctly saved
before reset and restored after, with decoder commit confirmed via the
COMMITTED status bit. Type-3 device testing is in progress.

This series is based on v7.0-rc1.

[1] https://lore.kernel.org/linux-cxl/20260201155438.2664640-1-alejandro.lucero-palau@amd.com/
[2] https://lore.kernel.org/linux-cxl/aa8d4f6a-e7bd-4a20-8d34-4376ea314b8f@intel.com/T/#m825c6bdd1934022123807e86d235358a63b08dbc

Srirangan Madhavan (5):
PCI: Add CXL DVSEC control, lock, and range register definitions
cxl: Move HDM decoder and register map definitions to
include/cxl/pci.h
PCI: Add virtual extended cap save buffer for CXL state
PCI: Add cxl DVSEC state save/restore across resets
PCI/CXL: Add HDM decoder state save/restore

drivers/cxl/cxl.h | 107 +-------
drivers/cxl/cxlpci.h | 10 -
drivers/pci/Kconfig | 4 +
drivers/pci/Makefile | 1 +
drivers/pci/cxl.c | 468 ++++++++++++++++++++++++++++++++++
drivers/pci/pci.c | 23 ++
drivers/pci/pci.h | 18 ++
include/cxl/pci.h | 129 ++++++++++
include/uapi/linux/pci_regs.h | 6 +
9 files changed, 650 insertions(+), 116 deletions(-)
create mode 100644 drivers/pci/cxl.c
create mode 100644 include/cxl/pci.h

base-commit: 6de23f81a5e0
--
2.43.0