[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20260113162719.3710268-1-den@valinux.co.jp>
Date: Wed, 14 Jan 2026 01:27:13 +0900
From: Koichiro Den <den@...inux.co.jp>
To: jingoohan1@...il.com,
mani@...nel.org,
lpieralisi@...nel.org,
kwilczynski@...nel.org,
robh@...nel.org,
bhelgaas@...gle.com,
cassel@...nel.org
Cc: vigneshr@...com,
s-vadapalli@...com,
hongxing.zhu@....com,
l.stach@...gutronix.de,
shawnguo@...nel.org,
s.hauer@...gutronix.de,
kernel@...gutronix.de,
festevam@...il.com,
minghuan.Lian@....com,
mingkai.hu@....com,
roy.zang@....com,
jesper.nilsson@...s.com,
heiko@...ech.de,
srikanth.thokala@...el.com,
marek.vasut+renesas@...il.com,
yoshihiro.shimoda.uh@...esas.com,
geert+renesas@...der.be,
magnus.damm@...il.com,
christian.bruel@...s.st.com,
mcoquelin.stm32@...il.com,
alexandre.torgue@...s.st.com,
thierry.reding@...il.com,
jonathanh@...dia.com,
hayashi.kunihiko@...ionext.com,
mhiramat@...nel.org,
kishon@...nel.org,
jirislaby@...nel.org,
rongqianfeng@...o.com,
18255117159@....com,
shawn.lin@...k-chips.com,
nicolas.frattaroli@...labora.com,
linux.amoon@...il.com,
vidyas@...dia.com,
Frank.Li@....com,
linux-omap@...r.kernel.org,
linux-pci@...r.kernel.org,
linux-arm-kernel@...ts.infradead.org,
linux-kernel@...r.kernel.org,
imx@...ts.linux.dev,
linuxppc-dev@...ts.ozlabs.org,
linux-arm-kernel@...s.com,
linux-rockchip@...ts.infradead.org,
linux-arm-msm@...r.kernel.org,
linux-renesas-soc@...r.kernel.org,
linux-stm32@...md-mailman.stormreply.com,
linux-tegra@...r.kernel.org
Subject: [PATCH v7 0/6] PCI: endpoint: BAR subrange mapping support
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/6 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 2/6 introduces generic BAR subrange mapping support in the PCI
endpoint core.
- Patch 3/6 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 4/6 advertises dynamic inbound mapping support centrally for all
DWC-based glue drivers.
- Patch 5/6 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 6/6 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@valinux.co.jp/
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:
* v6->v7 changes:
- Added missing check of dynamic_inbound_mapping feature bit in
pci_epc_set_bar() when use_submap is set true.
- Addressed the remaining review comments from Niklas (patch reordering,
splitting, and source code comment/documentation refinements).
* 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.
v6: https://lore.kernel.org/all/20260113023715.3463724-1-den@valinux.co.jp/
v5: https://lore.kernel.org/all/20260108172403.2629671-1-den@valinux.co.jp/
v4: https://lore.kernel.org/all/20260108044148.2352800-1-den@valinux.co.jp/
v3: https://lore.kernel.org/all/20260108024829.2255501-1-den@valinux.co.jp/
v2: https://lore.kernel.org/all/20260107041358.1986701-1-den@valinux.co.jp/
v1: https://lore.kernel.org/all/20260105080214.1254325-1-den@valinux.co.jp/
Thank you for reviewing,
Koichiro Den (6):
PCI: endpoint: Add dynamic_inbound_mapping EPC feature
PCI: endpoint: Add BAR subrange mapping support
PCI: dwc: Allow glue drivers to return mutable EPC features
PCI: dwc: Advertise dynamic inbound mapping support
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 | 24 ++
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 | 5 +
include/linux/pci-epc.h | 9 +
include/linux/pci-epf.h | 31 +++
19 files changed, 360 insertions(+), 67 deletions(-)
--
2.51.0
Powered by blists - more mailing lists