diff mbox series

[v2,1/3] dt-bindings: PCI: generic: Add ats-supported property

Message ID 20240607105415.2501934-3-jean-philippe@linaro.org (mailing list archive)
State New, archived
Headers show
Series Enable PCIe ATS for devicetree boot | expand

Commit Message

Jean-Philippe Brucker June 7, 2024, 10:54 a.m. UTC
Add a way for firmware to tell the OS that ATS is supported by the PCI
root complex. An endpoint with ATS enabled may send Translation Requests
and Translated Memory Requests, which look just like Normal Memory
Requests with a non-zero AT field. So a root controller that ignores the
AT field may simply forward the request to the IOMMU as a Normal Memory
Request, which could end badly. In any case, the endpoint will be
unusable.

The ats-supported property allows the OS to only enable ATS in endpoints
if the root controller can handle ATS requests. Only add the property to
pcie-host-ecam-generic for the moment. For non-generic root controllers,
availability of ATS can be inferred from the compatible string.

Reviewed-by: Rob Herring <robh@kernel.org>
Reviewed-by: Liviu Dudau <liviu.dudau@arm.com>
Signed-off-by: Jean-Philippe Brucker <jean-philippe@linaro.org>
---
 Documentation/devicetree/bindings/pci/host-generic-pci.yaml | 6 ++++++
 1 file changed, 6 insertions(+)

Comments

Krzysztof Wilczyński July 6, 2024, 3:24 a.m. UTC | #1
Hello,

> Add a way for firmware to tell the OS that ATS is supported by the PCI
> root complex. An endpoint with ATS enabled may send Translation Requests
> and Translated Memory Requests, which look just like Normal Memory
> Requests with a non-zero AT field. So a root controller that ignores the
> AT field may simply forward the request to the IOMMU as a Normal Memory
> Request, which could end badly. In any case, the endpoint will be
> unusable.
> 
> The ats-supported property allows the OS to only enable ATS in endpoints
> if the root controller can handle ATS requests. Only add the property to
> pcie-host-ecam-generic for the moment. For non-generic root controllers,
> availability of ATS can be inferred from the compatible string.

Applied to dt-bindings, thank you!

[1/1] dt-bindings: PCI: generic: Add ats-supported property
      https://git.kernel.org/pci/pci/c/631b2e7318d45

	Krzysztof
Will Deacon July 8, 2024, 9:36 a.m. UTC | #2
Hi Krzysztof,

On Sat, Jul 06, 2024 at 12:24:31PM +0900, Krzysztof Wilczyński wrote:
> > Add a way for firmware to tell the OS that ATS is supported by the PCI
> > root complex. An endpoint with ATS enabled may send Translation Requests
> > and Translated Memory Requests, which look just like Normal Memory
> > Requests with a non-zero AT field. So a root controller that ignores the
> > AT field may simply forward the request to the IOMMU as a Normal Memory
> > Request, which could end badly. In any case, the endpoint will be
> > unusable.
> > 
> > The ats-supported property allows the OS to only enable ATS in endpoints
> > if the root controller can handle ATS requests. Only add the property to
> > pcie-host-ecam-generic for the moment. For non-generic root controllers,
> > availability of ATS can be inferred from the compatible string.
> 
> Applied to dt-bindings, thank you!
> 
> [1/1] dt-bindings: PCI: generic: Add ats-supported property
>       https://git.kernel.org/pci/pci/c/631b2e7318d45

FWIW: I already picked this up in the IOMMU tree last week. If you need
it to avoid a conflict, then you can pull from the pci/ats branch:

https://git.kernel.org/pub/scm/linux/kernel/git/iommu/linux.git/commit/?h=pci/ats&id=40929e8e5449a18bc98baf7a907dd6674bd60049

Cheers,

Will
diff mbox series

Patch

diff --git a/Documentation/devicetree/bindings/pci/host-generic-pci.yaml b/Documentation/devicetree/bindings/pci/host-generic-pci.yaml
index 3484e0b4b412e..bcfbaf5582cc9 100644
--- a/Documentation/devicetree/bindings/pci/host-generic-pci.yaml
+++ b/Documentation/devicetree/bindings/pci/host-generic-pci.yaml
@@ -110,6 +110,12 @@  properties:
   iommu-map-mask: true
   msi-parent: true
 
+  ats-supported:
+    description:
+      Indicates that a PCIe host controller supports ATS, and can handle Memory
+      Requests with Address Type (AT).
+    type: boolean
+
 required:
   - compatible
   - reg