mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-09-21 20:22:13 +08:00
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>
This commit is contained in:
parent
90c46d12ba
commit
803184f1ef
@ -1,66 +0,0 @@
|
||||
* virtio IOMMU PCI device
|
||||
|
||||
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.
|
||||
|
||||
Required properties:
|
||||
|
||||
- compatible: Should be "virtio,pci-iommu"
|
||||
- reg: PCI address of the IOMMU. As defined in the PCI Bus
|
||||
Binding reference [1], 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.
|
||||
- #iommu-cells: Each platform DMA master managed by the IOMMU is assigned
|
||||
an endpoint ID, described by the "iommus" property [2].
|
||||
For virtio-iommu, #iommu-cells must be 1.
|
||||
|
||||
Notes:
|
||||
|
||||
- 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.
|
||||
|
||||
Example:
|
||||
|
||||
pcie@10000000 {
|
||||
compatible = "pci-host-ecam-generic";
|
||||
...
|
||||
|
||||
/* The IOMMU programming interface uses slot 00:01.0 */
|
||||
iommu0: iommu@0008 {
|
||||
compatible = "virtio,pci-iommu";
|
||||
reg = <0x00000800 0 0 0 0>;
|
||||
#iommu-cells = <1>;
|
||||
};
|
||||
|
||||
/*
|
||||
* 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>;
|
||||
};
|
||||
|
||||
pcie@20000000 {
|
||||
compatible = "pci-host-ecam-generic";
|
||||
...
|
||||
/*
|
||||
* The IOMMU also manages all functions from this domain,
|
||||
* with endpoint IDs 0x10000 - 0x1ffff
|
||||
*/
|
||||
iommu-map = <0x0 &iommu0 0x10000 0x10000>;
|
||||
};
|
||||
|
||||
ethernet@fe001000 {
|
||||
...
|
||||
/* The IOMMU manages this platform device with endpoint ID 0x20000 */
|
||||
iommus = <&iommu0 0x20000>;
|
||||
};
|
||||
|
||||
[1] Documentation/devicetree/bindings/pci/pci.txt
|
||||
[2] Documentation/devicetree/bindings/iommu/iommu.txt
|
101
Documentation/devicetree/bindings/virtio/pci-iommu.yaml
Normal file
101
Documentation/devicetree/bindings/virtio/pci-iommu.yaml
Normal file
@ -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>;
|
||||
};
|
||||
};
|
||||
|
||||
...
|
Loading…
Reference in New Issue
Block a user