102 lines
3.2 KiB
YAML
102 lines
3.2 KiB
YAML
|
# 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>;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
...
|