PCI: endpoint: BAR subrange mapping support
| From: | Koichiro Den <den-AT-valinux.co.jp> | |
| To: | jingoohan1-AT-gmail.com, mani-AT-kernel.org, lpieralisi-AT-kernel.org, kwilczynski-AT-kernel.org, robh-AT-kernel.org, bhelgaas-AT-google.com, cassel-AT-kernel.org | |
| Subject: | [PATCH v6 0/5] PCI: endpoint: BAR subrange mapping support | |
| Date: | Tue, 13 Jan 2026 11:37:10 +0900 | |
| Message-ID: | <20260113023715.3463724-1-den@valinux.co.jp> | |
| Cc: | vigneshr-AT-ti.com, s-vadapalli-AT-ti.com, hongxing.zhu-AT-nxp.com, l.stach-AT-pengutronix.de, shawnguo-AT-kernel.org, s.hauer-AT-pengutronix.de, kernel-AT-pengutronix.de, festevam-AT-gmail.com, minghuan.Lian-AT-nxp.com, mingkai.hu-AT-nxp.com, roy.zang-AT-nxp.com, jesper.nilsson-AT-axis.com, heiko-AT-sntech.de, srikanth.thokala-AT-intel.com, marek.vasut+renesas-AT-gmail.com, yoshihiro.shimoda.uh-AT-renesas.com, geert+renesas-AT-glider.be, magnus.damm-AT-gmail.com, christian.bruel-AT-foss.st.com, mcoquelin.stm32-AT-gmail.com, alexandre.torgue-AT-foss.st.com, thierry.reding-AT-gmail.com, jonathanh-AT-nvidia.com, hayashi.kunihiko-AT-socionext.com, mhiramat-AT-kernel.org, kishon-AT-kernel.org, jirislaby-AT-kernel.org, rongqianfeng-AT-vivo.com, 18255117159-AT-163.com, shawn.lin-AT-rock-chips.com, nicolas.frattaroli-AT-collabora.com, linux.amoon-AT-gmail.com, vidyas-AT-nvidia.com, Frank.Li-AT-nxp.com, linux-omap-AT-vger.kernel.org, linux-pci-AT-vger.kernel.org, linux-arm-kernel-AT-lists.infradead.org, linux-kernel-AT-vger.kernel.org, imx-AT-lists.linux.dev, linuxppc-dev-AT-lists.ozlabs.org, linux-arm-kernel-AT-axis.com, linux-rockchip-AT-lists.infradead.org, linux-arm-msm-AT-vger.kernel.org, linux-renesas-soc-AT-vger.kernel.org, linux-stm32-AT-st-md-mailman.stormreply.com, linux-tegra-AT-vger.kernel.org | |
| Archive-link: | Article |
This series proposes support for mapping subranges within a PCIe endpoint BAR and enables controllers to program inbound address translation for those subranges. - Patch 1/5 introduces generic BAR subrange mapping support in the PCI endpoint core. - Patch 2/5 changes dw_pcie_ep_ops.get_features() to return a mutable struct pci_epc_features * and updates all DWC-based glue drivers accordingly. This is preparatory work for subsequent patches. - Patch 3/5 introduces dynamic_inbound_mapping feature bit. This can be used as a safeguard to check whether a BAR can really be reconfigured without clearing/resetting it. - Patch 4/5 adds an implementation for the DesignWare PCIe endpoint controller using Address Match Mode IB iATU. It also advertises subrange_mapping support from the DWC EP midlayer. - Patch 5/5 updates a documentation for pci_epc_set_bar(). This series is originally a spin-off from a larger RFC series posted earlier: https://lore.kernel.org/all/20251217151609.3162665-4-den@... The first user will likely be Remote eDMA-backed NTB transport, demonstrated in that RFC series. Kernel base: - repo: git://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git - branch: controller/dwc - commit: 68ac85fb42cf ("PCI: dwc: Use cfg0_base as iMSI-RX target address to support 32-bit MSI devices") Changelog: * v5->v6 changes: - Added a new feature bit dynamic_inbound_mapping and set it centrally in dw_pcie_ep_get_features() for all DWC-based glue drivers. - Updated documentation for pci_epc_set_bar(). - Dropped a needless and harmful dw_pcie_ep_clear_bar() call on the error path. - Fixed "Bar Match Mode" to "BAR Match Mode" in a source code comment. * v4->v5 changes: - Added subrange_mapping to struct pci_epc_features and enforced a strict capability check in pci_epc_set_bar() (reject use_submap when unsupported). - Changed DWC-based glue drivers to return a mutable features pointer and set subrange_mapping centrally at the DWC midlayer. - Split the series into 3 patches accordingly. * v3->v4 changes: - Drop unused includes that should have been removed in v3 * v2->v3 changes: - Remove submap copying and sorting from dw_pcie_ep_ib_atu_addr(), and require callers to pass a sorted submap. The related source code comments are updated accordingly. - Refine source code comments and commit messages, including normalizing "Address Match Mode" wording. - Add const qualifiers where applicable. * v1->v2 changes: - Introduced stricter submap validation: no holes/overlaps and the subranges must exactly cover the whole BAR. Added dw_pcie_ep_validate_submap() to enforce alignment and full-coverage constraints. - Enforced one-shot (all-or-nothing) submap programming to avoid leaving half-programmed BAR state: * Dropped incremental/overwrite logic that is no longer needed with the one-shot design. * Added dw_pcie_ep_clear_ib_maps() and used it from multiple places to tear down BAR match / address match inbound mappings without code duplication. - Updated kernel source code comments and commit messages, including a small refinement made along the way. - Changed num_submap type to unsigned int. v5: https://lore.kernel.org/all/20260108172403.2629671-1-den@... v4: https://lore.kernel.org/all/20260108044148.2352800-1-den@... v3: https://lore.kernel.org/all/20260108024829.2255501-1-den@... v2: https://lore.kernel.org/all/20260107041358.1986701-1-den@... v1: https://lore.kernel.org/all/20260105080214.1254325-1-den@... Thank you for reviewing, Koichiro Den (5): PCI: endpoint: Add BAR subrange mapping support PCI: dwc: Allow glue drivers to return mutable EPC features PCI: endpoint: Add dynamic_inbound_mapping EPC feature PCI: dwc: ep: Support BAR subrange inbound mapping via Address Match Mode iATU Documentation: PCI: endpoint: Clarify pci_epc_set_bar() usage Documentation/PCI/endpoint/pci-endpoint.rst | 22 ++ drivers/pci/controller/dwc/pci-dra7xx.c | 4 +- drivers/pci/controller/dwc/pci-imx6.c | 10 +- drivers/pci/controller/dwc/pci-keystone.c | 4 +- .../pci/controller/dwc/pci-layerscape-ep.c | 2 +- drivers/pci/controller/dwc/pcie-artpec6.c | 4 +- .../pci/controller/dwc/pcie-designware-ep.c | 240 +++++++++++++++++- .../pci/controller/dwc/pcie-designware-plat.c | 4 +- drivers/pci/controller/dwc/pcie-designware.h | 4 +- drivers/pci/controller/dwc/pcie-dw-rockchip.c | 8 +- drivers/pci/controller/dwc/pcie-keembay.c | 4 +- drivers/pci/controller/dwc/pcie-qcom-ep.c | 4 +- drivers/pci/controller/dwc/pcie-rcar-gen4.c | 4 +- drivers/pci/controller/dwc/pcie-stm32-ep.c | 4 +- drivers/pci/controller/dwc/pcie-tegra194.c | 4 +- drivers/pci/controller/dwc/pcie-uniphier-ep.c | 58 +++-- drivers/pci/endpoint/pci-epc-core.c | 3 + include/linux/pci-epc.h | 8 + include/linux/pci-epf.h | 31 +++ 19 files changed, 355 insertions(+), 67 deletions(-) -- 2.51.0
