-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
dt-bindings: virtio: Convert virtio,pci-iommu to DT schema
Convert the binding that describes the virtio-pci based IOMMU to DT schema. Change the compatible string to "pci<vendor>,<device>", which is defined by the PCI Bus Binding, but keep "virtio,pci-iommu" as an option for backward compatibility. Signed-off-by: Jean-Philippe Brucker <jean-philippe@linaro.org> Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> Link: https://lore.kernel.org/r/20220923074435.420531-1-jean-philippe@linaro.org Signed-off-by: Rob Herring <robh@kernel.org>
- Loading branch information
Jean-Philippe Brucker
authored and
Rob Herring
committed
Sep 26, 2022
1 parent
90c46d1
commit 803184f
Showing
2 changed files
with
101 additions
and
66 deletions.
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
101 changes: 101 additions & 0 deletions
101
Documentation/devicetree/bindings/virtio/pci-iommu.yaml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,101 @@ | ||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) | ||
%YAML 1.2 | ||
--- | ||
$id: http://devicetree.org/schemas/virtio/pci-iommu.yaml# | ||
$schema: http://devicetree.org/meta-schemas/core.yaml# | ||
|
||
title: virtio-iommu device using the virtio-pci transport | ||
|
||
maintainers: | ||
- Jean-Philippe Brucker <jean-philippe@linaro.org> | ||
|
||
description: | | ||
When virtio-iommu uses the PCI transport, its programming interface is | ||
discovered dynamically by the PCI probing infrastructure. However the | ||
device tree statically describes the relation between IOMMU and DMA | ||
masters. Therefore, the PCI root complex that hosts the virtio-iommu | ||
contains a child node representing the IOMMU device explicitly. | ||
DMA from the IOMMU device isn't managed by another IOMMU. Therefore the | ||
virtio-iommu node doesn't have an "iommus" property, and is omitted from | ||
the iommu-map property of the root complex. | ||
properties: | ||
# If compatible is present, it should contain the vendor and device ID | ||
# according to the PCI Bus Binding specification. Since PCI provides | ||
# built-in identification methods, compatible is not actually required. | ||
compatible: | ||
oneOf: | ||
- items: | ||
- const: virtio,pci-iommu | ||
- const: pci1af4,1057 | ||
- items: | ||
- const: pci1af4,1057 | ||
|
||
reg: | ||
description: | | ||
PCI address of the IOMMU. As defined in the PCI Bus Binding | ||
reference, the reg property is a five-cell address encoded as (phys.hi | ||
phys.mid phys.lo size.hi size.lo). phys.hi should contain the device's | ||
BDF as 0b00000000 bbbbbbbb dddddfff 00000000. The other cells should be | ||
zero. See Documentation/devicetree/bindings/pci/pci.txt | ||
'#iommu-cells': | ||
const: 1 | ||
|
||
required: | ||
- compatible | ||
- reg | ||
- '#iommu-cells' | ||
|
||
additionalProperties: false | ||
|
||
examples: | ||
- | | ||
bus { | ||
#address-cells = <2>; | ||
#size-cells = <2>; | ||
pcie@40000000 { | ||
device_type = "pci"; | ||
#address-cells = <3>; | ||
#size-cells = <2>; | ||
reg = <0x0 0x40000000 0x0 0x1000000>; | ||
ranges = <0x02000000 0x0 0x41000000 0x0 0x41000000 0x0 0x0f000000>; | ||
/* | ||
* The IOMMU manages all functions in this PCI domain except | ||
* itself. Omit BDF 00:01.0. | ||
*/ | ||
iommu-map = <0x0 &iommu0 0x0 0x8 | ||
0x9 &iommu0 0x9 0xfff7>; | ||
/* The IOMMU programming interface uses slot 00:01.0 */ | ||
iommu0: iommu@1,0 { | ||
compatible = "pci1af4,1057"; | ||
reg = <0x800 0 0 0 0>; | ||
#iommu-cells = <1>; | ||
}; | ||
}; | ||
pcie@50000000 { | ||
device_type = "pci"; | ||
#address-cells = <3>; | ||
#size-cells = <2>; | ||
reg = <0x0 0x50000000 0x0 0x1000000>; | ||
ranges = <0x02000000 0x0 0x51000000 0x0 0x51000000 0x0 0x0f000000>; | ||
/* | ||
* The IOMMU also manages all functions from this domain, | ||
* with endpoint IDs 0x10000 - 0x1ffff | ||
*/ | ||
iommu-map = <0x0 &iommu0 0x10000 0x10000>; | ||
}; | ||
ethernet { | ||
/* The IOMMU manages this platform device with endpoint ID 0x20000 */ | ||
iommus = <&iommu0 0x20000>; | ||
}; | ||
}; | ||
... |