[PATCH 0/3] PCI: endpoint: Support hardware-owned MSI-X table and PBA
From: Koichiro Den
Date: Thu Aug 27 2026 - 14:21:51 EST
Hi,
Some DWC endpoint controllers keep the MSI-X Table and PBA at fixed
locations in a reserved BAR. On RK3588, the MSI-X doorbell uses this
hardware-owned layout, as discussed in e.g. [1].
The reserved-region types for the Table and PBA were added with the
Tegra194 description. The MSI-X setup API, however, still takes only the
Table BAR and offset and assumes that the PBA immediately follows it in
the same BAR.
This series passes the complete layout to pci_epc_set_msix() and adds
pci_epc_get_hw_msix_layout() to expose a hardware-owned layout. The core
does not select it automatically. The choice stays with the EPF.
A hardware-owned layout is not a direct replacement for every caller.
pci-epf-ntb, for example, reads host-programmed Table entries from its
own BAR to set up peer outbound mappings.
The series also fixes an interrupt-type mismatch in vNTB. ntb_hw_epf can
select MSI-X, while pci-epf-vntb currently configures and raises only
MSI. On RK3588, selecting the fixed BAR4 layout also selects the DWC
MSI-X doorbell. EPF-owned layouts continue to use the regular path.
In short:
- pci-epf-vntb gains MSI-X support and uses the hardware-owned layout
when available.
- pci-epf-test, pci-epf-ntb, and the NVMe PCI EPF keep their EPF-owned
layouts. This avoids unnecessary changes and reduces regression risk.
They can use a hardware-owned layout later if/when needed.
[1] https://lore.kernel.org/r/aY2q80zeRKSRO21H@fedora
Best regards,
Koichiro
Koichiro Den (3):
PCI: endpoint: Support hardware-owned MSI-X table and PBA
PCI: dw-rockchip: Support fixed MSI-X table and PBA on RK3588
PCI: endpoint: pci-epf-vntb: Honor MSI-X selection
drivers/nvme/target/pci-epf.c | 16 ++-
.../pci/controller/cadence/pcie-cadence-ep.c | 9 +-
.../pci/controller/dwc/pcie-designware-ep.c | 28 ++++-
drivers/pci/controller/dwc/pcie-designware.h | 1 +
drivers/pci/controller/dwc/pcie-dw-rockchip.c | 28 ++++-
drivers/pci/endpoint/functions/pci-epf-ntb.c | 30 +++---
drivers/pci/endpoint/functions/pci-epf-test.c | 17 +--
drivers/pci/endpoint/functions/pci-epf-vntb.c | 67 +++++++++---
drivers/pci/endpoint/pci-epc-core.c | 102 +++++++++++++++++-
include/linux/pci-epc.h | 25 ++++-
10 files changed, 266 insertions(+), 57 deletions(-)
base-commit: 0a6f72eda328c773324555491e1ad7f0b0153155
--
2.51.0