linux/drivers/dma/idxd
Lukas Wunner 0ba76b19fd PCI/P2PDMA: Add Intel QAT, DSA, IAA devices to whitelist
The first device on a PCI root bus determines whether the host bridge is
whitelisted for P2PDMA.  All Intel Xeon chips since Ice Lake (ICX, 2021)
expose a device with ID 0x09a2 as first device.  It is loosely associated
with the IOMMU.  All these Xeon chips support P2PDMA, so since the addition
of the device with commit feaea1fe8b ("PCI/P2PDMA: Add Intel 3rd Gen
Intel Xeon Scalable Processors to whitelist"), P2PDMA has been allowed on
all new Xeons without the need to amend the whitelist:

Xeons with Performance Cores:
  Sapphire Rapids (SPR, 2023)
  Emerald Rapids (EMR, 2023)
  Granite Rapids (GNR, 2024)
  Diamond Rapids (DMR, 2026)

Xeons with Efficiency Cores:
  Sierra Forest (SRF, 2024)
  Clearwater Forest (CWF, 2026)

However these Xeons also expose accelerators as first device on a root bus
of its own:

  QuickAssist Technology (QAT, crypto & compression accelerator)
  Data Streaming Accelerator (DSA, dma engine)
  In-Memory Analytics Accelerator (IAA, compression accelerator)

Whitelist them for P2PDMA as well.  Move their Device ID macros from the
accelerator drivers to <linux/pci_ids.h> for reuse by P2PDMA code.

Unfortunately the Device IDs vary across Xeon generations as additional
features were added to the accelerators.  This currently necessitates an
amendment for each new Xeon chip.

For future chips, this need shall be avoided by an ongoing effort to extend
ACPI HMAT with PCIe P2PDMA characteristics (latency, bandwidth, ordering
constraints).  The PCI core will be able look up in this BIOS-provided ACPI
table whether P2PDMA is supported, instead of relying on a whitelist that
needs to be amended continuously.

Signed-off-by: Lukas Wunner <lukas@wunner.de>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Acked-by: Vinicius Costa Gomes <vinicius.gomes@intel.com>
Acked-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com> # QAT
Cc: stable@vger.kernel.org
Link: https://patch.msgid.link/6aac4922b5fe7070b11874427a9285e42ddd05a4.1780585518.git.lukas@wunner.de
2026-06-09 17:04:02 -05:00
..
bus.c driver core: have match() callback in struct bus_type take a const * 2024-07-03 15:16:54 +02:00
cdev.c dmaengine: idxd: Fix freeing the allocated ida too late 2026-02-25 16:39:18 +05:30
compat.c dmaengine: idxd: fix device leaks on compat bind and unbind 2025-12-14 14:47:24 +05:30
debugfs.c dmaengine: idxd: Convert spinlock to mutex to lock evl workqueue 2024-04-07 13:31:44 +05:30
defaults.c dmaengine: idxd: Replace memset(0) + strscpy() with strscpy_pad() 2025-08-20 23:01:27 +05:30
device.c dmaengine: idxd: Fix leaking event log memory 2026-02-25 16:39:18 +05:30
dma.c dmaengine: idxd: Wait for submitted operations on .device_synchronize() 2026-02-25 16:39:18 +05:30
idxd.h dmaengine: idxd: Flush kernel workqueues on Function Level Reset 2026-02-25 16:39:17 +05:30
init.c dmaengine: idxd: Fix possible invalid memory access after FLR 2026-02-25 16:39:17 +05:30
irq.c dmaengine: idxd: Flush kernel workqueues on Function Level Reset 2026-02-25 16:39:17 +05:30
Makefile module: Convert default symbol namespace to string literal 2024-12-03 08:22:25 -08:00
perfmon.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
perfmon.h dmaengine: idxd: Add IDXD performance monitor support 2021-04-25 21:46:12 +05:30
registers.h PCI/P2PDMA: Add Intel QAT, DSA, IAA devices to whitelist 2026-06-09 17:04:02 -05:00
submit.c dmaengine: idxd: fix possible wrong descriptor completion in llist_abort_desc() 2026-03-09 12:27:11 +01:00
sysfs.c dmaengine: idxd: Fix not releasing workqueue on .release() 2026-02-25 16:39:18 +05:30