~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/Documentation/devicetree/bindings/iommu/iommu.txt

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 This document describes the generic device tree binding for IOMMUs and their
  2 master(s).
  3 
  4 
  5 IOMMU device node:
  6 ==================
  7 
  8 An IOMMU can provide the following services:
  9 
 10 * Remap address space to allow devices to access physical memory ranges that
 11   they otherwise wouldn't be capable of accessing.
 12 
 13   Example: 32-bit DMA to 64-bit physical addresses
 14 
 15 * Implement scatter-gather at page level granularity so that the device does
 16   not have to.
 17 
 18 * Provide system protection against "rogue" DMA by forcing all accesses to go
 19   through the IOMMU and faulting when encountering accesses to unmapped
 20   address regions.
 21 
 22 * Provide address space isolation between multiple contexts.
 23 
 24   Example: Virtualization
 25 
 26 Device nodes compatible with this binding represent hardware with some of the
 27 above capabilities.
 28 
 29 IOMMUs can be single-master or multiple-master. Single-master IOMMU devices
 30 typically have a fixed association to the master device, whereas multiple-
 31 master IOMMU devices can translate accesses from more than one master.
 32 
 33 The device tree node of the IOMMU device's parent bus must contain a valid
 34 "dma-ranges" property that describes how the physical address space of the
 35 IOMMU maps to memory. An empty "dma-ranges" property means that there is a
 36 1:1 mapping from IOMMU to memory.
 37 
 38 Required properties:
 39 --------------------
 40 - #iommu-cells: The number of cells in an IOMMU specifier needed to encode an
 41   address.
 42 
 43 The meaning of the IOMMU specifier is defined by the device tree binding of
 44 the specific IOMMU. Below are a few examples of typical use-cases:
 45 
 46 - #iommu-cells = <0>: Single master IOMMU devices are not configurable and
 47   therefore no additional information needs to be encoded in the specifier.
 48   This may also apply to multiple master IOMMU devices that do not allow the
 49   association of masters to be configured. Note that an IOMMU can by design
 50   be multi-master yet only expose a single master in a given configuration.
 51   In such cases the number of cells will usually be 1 as in the next case.
 52 - #iommu-cells = <1>: Multiple master IOMMU devices may need to be configured
 53   in order to enable translation for a given master. In such cases the single
 54   address cell corresponds to the master device's ID. In some cases more than
 55   one cell can be required to represent a single master ID.
 56 - #iommu-cells = <4>: Some IOMMU devices allow the DMA window for masters to
 57   be configured. The first cell of the address in this may contain the master
 58   device's ID for example, while the second cell could contain the start of
 59   the DMA window for the given device. The length of the DMA window is given
 60   by the third and fourth cells.
 61 
 62 Note that these are merely examples and real-world use-cases may use different
 63 definitions to represent their individual needs. Always refer to the specific
 64 IOMMU binding for the exact meaning of the cells that make up the specifier.
 65 
 66 
 67 IOMMU master node:
 68 ==================
 69 
 70 Devices that access memory through an IOMMU are called masters. A device can
 71 have multiple master interfaces (to one or more IOMMU devices).
 72 
 73 Required properties:
 74 --------------------
 75 - iommus: A list of phandle and IOMMU specifier pairs that describe the IOMMU
 76   master interfaces of the device. One entry in the list describes one master
 77   interface of the device.
 78 
 79 When an "iommus" property is specified in a device tree node, the IOMMU will
 80 be used for address translation. If a "dma-ranges" property exists in the
 81 device's parent node it will be ignored. An exception to this rule is if the
 82 referenced IOMMU is disabled, in which case the "dma-ranges" property of the
 83 parent shall take effect. Note that merely disabling a device tree node does
 84 not guarantee that the IOMMU is really disabled since the hardware may not
 85 have a means to turn off translation. But it is invalid in such cases to
 86 disable the IOMMU's device tree node in the first place because it would
 87 prevent any driver from properly setting up the translations.
 88 
 89 Optional properties:
 90 --------------------
 91 - pasid-num-bits: Some masters support multiple address spaces for DMA, by
 92   tagging DMA transactions with an address space identifier. By default,
 93   this is 0, which means that the device only has one address space.
 94 
 95 - dma-can-stall: When present, the master can wait for a transaction to
 96   complete for an indefinite amount of time. Upon translation fault some
 97   IOMMUs, instead of aborting the translation immediately, may first
 98   notify the driver and keep the transaction in flight. This allows the OS
 99   to inspect the fault and, for example, make physical pages resident
100   before updating the mappings and completing the transaction. Such IOMMU
101   accepts a limited number of simultaneous stalled transactions before
102   having to either put back-pressure on the master, or abort new faulting
103   transactions.
104 
105   Firmware has to opt-in stalling, because most buses and masters don't
106   support it. In particular it isn't compatible with PCI, where
107   transactions have to complete before a time limit. More generally it
108   won't work in systems and masters that haven't been designed for
109   stalling. For example the OS, in order to handle a stalled transaction,
110   may attempt to retrieve pages from secondary storage in a stalled
111   domain, leading to a deadlock.
112 
113 
114 Notes:
115 ======
116 
117 One possible extension to the above is to use an "iommus" property along with
118 a "dma-ranges" property in a bus device node (such as PCI host bridges). This
119 can be useful to describe how children on the bus relate to the IOMMU if they
120 are not explicitly listed in the device tree (e.g. PCI devices). However, the
121 requirements of that use-case haven't been fully determined yet. Implementing
122 this is therefore not recommended without further discussion and extension of
123 this binding.
124 
125 
126 Examples:
127 =========
128 
129 Single-master IOMMU:
130 --------------------
131 
132         iommu {
133                 #iommu-cells = <0>;
134         };
135 
136         master {
137                 iommus = <&{/iommu}>;
138         };
139 
140 Multiple-master IOMMU with fixed associations:
141 ----------------------------------------------
142 
143         /* multiple-master IOMMU */
144         iommu {
145                 /*
146                  * Masters are statically associated with this IOMMU and share
147                  * the same address translations because the IOMMU does not
148                  * have sufficient information to distinguish between masters.
149                  *
150                  * Consequently address translation is always on or off for
151                  * all masters at any given point in time.
152                  */
153                 #iommu-cells = <0>;
154         };
155 
156         /* static association with IOMMU */
157         master@1 {
158                 reg = <1>;
159                 iommus = <&{/iommu}>;
160         };
161 
162         /* static association with IOMMU */
163         master@2 {
164                 reg = <2>;
165                 iommus = <&{/iommu}>;
166         };
167 
168 Multiple-master IOMMU:
169 ----------------------
170 
171         iommu {
172                 /* the specifier represents the ID of the master */
173                 #iommu-cells = <1>;
174         };
175 
176         master@1 {
177                 /* device has master ID 42 in the IOMMU */
178                 iommus = <&{/iommu} 42>;
179         };
180 
181         master@2 {
182                 /* device has master IDs 23 and 24 in the IOMMU */
183                 iommus = <&{/iommu} 23>, <&{/iommu} 24>;
184         };
185 
186 Multiple-master IOMMU with configurable DMA window:
187 ---------------------------------------------------
188 
189         / {
190                 iommu {
191                         /*
192                          * One cell for the master ID and one cell for the
193                          * address of the DMA window. The length of the DMA
194                          * window is encoded in two cells.
195                          *
196                          * The DMA window is the range addressable by the
197                          * master (i.e. the I/O virtual address space).
198                          */
199                         #iommu-cells = <4>;
200                 };
201 
202                 master {
203                         /* master ID 42, 4 GiB DMA window starting at 0 */
204                         iommus = <&{/iommu}  42  0  0x1 0x0>;
205                 };
206         };

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php