[PATCH 0/3] PCI: endpoint: Support hardware-owned MSI-X table and PBA
From: Koichiro Den <hidden>
Date: 2026-08-27 18:20:44
Also in:
linux-nvme, linux-pci, linux-rockchip, lkml
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 (local) 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