From: Damien Le Moal <dlemoal@kernel.org>
To: "Manivannan Sadhasivam" <manivannan.sadhasivam@linaro.org>,
"Krzysztof Wilczyński" <kw@linux.com>,
"Kishon Vijay Abraham I" <kishon@kernel.org>,
"Bjorn Helgaas" <bhelgaas@google.com>,
"Lorenzo Pieralisi" <lpieralisi@kernel.org>,
"Rob Herring" <robh@kernel.org>,
"Jonathan Corbet" <corbet@lwn.net>,
"Jingoo Han" <jingoohan1@gmail.com>,
linux-pci@vger.kernel.org
Cc: Rick Wertenbroek <rick.wertenbroek@gmail.com>,
Niklas Cassel <cassel@kernel.org>
Subject: [PATCH v4 0/7] Improve PCI memory mapping API
Date: Mon, 7 Oct 2024 13:03:12 +0900 [thread overview]
Message-ID: <20241007040319.157412-1-dlemoal@kernel.org> (raw)
This series introduces the new functions pci_epc_map_align(),
pci_epc_mem_map() and pci_epc_mem_unmap() to improve handling of the
PCI address mapping alignment constraints of endpoint controllers in a
controller independent manner.
The issue fixed is that the fixed alignment defined by the "align" field
of struct pci_epc_features is defined for inbound ATU entries (e.g.
BARs) and is a fixed value, whereas some controllers need a PCI address
alignment that depends on the PCI address itself. For instance, the
rk3399 SoC controller in endpoint mode uses the lower bits of the local
endpoint memory address as the lower bits for the PCI addresses for data
transfers. That is, when mapping local memory, one must take into
account the number of bits of the RC PCI address that change from the
start address of the mapping.
To fix this, the new endpoint controller method .map_align is introduced
and called from pci_epc_map_align(). This method is optional and for
controllers that do not define it, it is assumed that the controller has
no PCI address constraint.
The functions pci_epc_mem_map() is a helper function which obtains
mapping information, allocates endpoint controller memory according to
the mapping size obtained and maps the memory. pci_epc_mem_unmap()
unmaps and frees the endpoint memory.
This series is organized as follows:
- Patch 1 introduces a small helper to clean up the epc core code
- Patch 2 improves pci_epc_mem_alloc_addr()
- Patch 3 and 4 introduce the new map_align endpoint controller method
and the epc functions pci_epc_mem_map() and pci_epc_mem_unmap().
- Patch 5 documents these new functions.
- Patch 6 modifies the test endpoint function driver to use
pci_epc_mem_map() and pci_epc_mem_unmap() to illustrate the use of
these functions.
- Finally, patch 7 implements the rk3588 endpoint controller driver
.map_align operation to satisfy that controller PCI address
alignment constraint.
Changes from v3:
- Addressed Niklas comments (improved patch 2 commit message, added
comments in the pci_epc_map_align() function in patch 3, typos and
improvements in patch 5, patch 7 commit message).
- Added review tags
Changes from v2:
- Dropped all patches for the rockchip-ep. These patches will be sent
later as a separate series.
- Added patch 2 and 5
- Added review tags to patch 1
Changes from v1:
- Changed pci_epc_check_func() to pci_epc_function_is_valid() in patch
1.
- Removed patch "PCI: endpoint: Improve pci_epc_mem_alloc_addr()"
(former patch 2 of v1)
- Various typos cleanups all over. Also fixed some blank space
indentation.
- Added review tags
Damien Le Moal (7):
PCI: endpoint: Introduce pci_epc_function_is_valid()
PCI: endpoint: Improve pci_epc_mem_alloc_addr()
PCI: endpoint: Introduce pci_epc_map_align()
PCI: endpoint: Introduce pci_epc_mem_map()/unmap()
PCI: endpoint: Update documentation
PCI: endpoint: test: Use pci_epc_mem_map/unmap()
PCI: dwc: endpoint: Define the .map_align() controller operation
Documentation/PCI/endpoint/pci-endpoint.rst | 35 ++
.../pci/controller/dwc/pcie-designware-ep.c | 15 +
drivers/pci/endpoint/functions/pci-epf-test.c | 372 +++++++++---------
drivers/pci/endpoint/pci-epc-core.c | 223 ++++++++---
drivers/pci/endpoint/pci-epc-mem.c | 9 +-
include/linux/pci-epc.h | 41 ++
6 files changed, 465 insertions(+), 230 deletions(-)
--
2.46.2
next reply other threads:[~2024-10-07 4:03 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-07 4:03 Damien Le Moal [this message]
2024-10-07 4:03 ` [PATCH v4 1/7] PCI: endpoint: Introduce pci_epc_function_is_valid() Damien Le Moal
2024-10-07 4:03 ` [PATCH v4 2/7] PCI: endpoint: Improve pci_epc_mem_alloc_addr() Damien Le Moal
2024-10-07 8:23 ` Niklas Cassel
2024-10-10 14:10 ` Manivannan Sadhasivam
2024-10-07 4:03 ` [PATCH v4 3/7] PCI: endpoint: Introduce pci_epc_map_align() Damien Le Moal
2024-10-10 14:36 ` Manivannan Sadhasivam
2024-10-11 1:07 ` Damien Le Moal
2024-10-12 6:32 ` Manivannan Sadhasivam
2024-10-12 8:30 ` Damien Le Moal
2024-10-12 9:40 ` Manivannan Sadhasivam
2024-10-12 11:06 ` Damien Le Moal
2024-10-12 11:59 ` Manivannan Sadhasivam
2024-10-07 4:03 ` [PATCH v4 4/7] PCI: endpoint: Introduce pci_epc_mem_map()/unmap() Damien Le Moal
2024-10-10 16:43 ` Manivannan Sadhasivam
2024-10-11 2:01 ` Damien Le Moal
2024-10-12 7:56 ` Manivannan Sadhasivam
2024-10-12 8:33 ` Damien Le Moal
2024-10-12 9:41 ` Manivannan Sadhasivam
2024-10-12 11:10 ` Damien Le Moal
2024-10-07 4:03 ` [PATCH v4 5/7] PCI: endpoint: Update documentation Damien Le Moal
2024-10-07 4:03 ` [PATCH v4 6/7] PCI: endpoint: test: Use pci_epc_mem_map/unmap() Damien Le Moal
2024-10-07 8:48 ` Niklas Cassel
2024-10-10 17:05 ` Manivannan Sadhasivam
2024-10-07 4:03 ` [PATCH v4 7/7] PCI: dwc: endpoint: Define the .map_align() controller operation Damien Le Moal
2024-10-07 4:47 ` [PATCH v4 0/7] Improve PCI memory mapping API Damien Le Moal
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20241007040319.157412-1-dlemoal@kernel.org \
--to=dlemoal@kernel.org \
--cc=bhelgaas@google.com \
--cc=cassel@kernel.org \
--cc=corbet@lwn.net \
--cc=jingoohan1@gmail.com \
--cc=kishon@kernel.org \
--cc=kw@linux.com \
--cc=linux-pci@vger.kernel.org \
--cc=lpieralisi@kernel.org \
--cc=manivannan.sadhasivam@linaro.org \
--cc=rick.wertenbroek@gmail.com \
--cc=robh@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).