From: thierry.reding@gmail.com (Thierry Reding)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v4] devicetree: Add generic IOMMU device tree bindings
Date: Thu, 31 Jul 2014 13:14:54 +0200 [thread overview]
Message-ID: <20140731111453.GA11955@ulmo> (raw)
In-Reply-To: <20140731105017.GB22994@leverpostej>
On Thu, Jul 31, 2014 at 11:50:17AM +0100, Mark Rutland wrote:
> On Thu, Jul 31, 2014 at 11:09:06AM +0100, Thierry Reding wrote:
> > On Wed, Jul 30, 2014 at 07:18:42PM +0100, Mark Rutland wrote:
> > [...]
> > > > >> +
> > > > >> +Multiple-master IOMMU with configurable DMA window:
> > > > >> +---------------------------------------------------
> > > > >> +
> > > > >> + / {
> > > > >> + #address-cells = <1>;
> > > > >> + #size-cells = <1>;
> > > > >> +
> > > > >> + iommu {
> > > > >> + /* master ID, address and length of DMA window */
> > > > >> + #iommu-cells = <4>;
> > > > >> + };
> > > > >> +
> > > > >> + master {
> > > > >> + /* master ID 42, 4 GiB DMA window starting at 0 */
> > > > >> + iommus = <&/iommu 42 0 0x1 0x0>;
> > > > >
> > > > > Is this that window is from the POV of the master, i.e. the master can
> > > > > address 0x0 to 0xffffffff when generating transactions, and these get
> > > > > translated somehow?
> > > > >
> > > > > Or is this the physical addresses to allocate to the master?
> > > >
> > > > It needs to be clarified in the documentation, but as far as I know it
> > > > is the DMA address space that is used.
> > >
> > > Ok. So that's pre-translation, from the POV of the master?
> >
> > Correct. It represents the window of the IOMMU's addressable I/O virtual
> > address space that should be assigned to this particular master.
> >
> > > If we don't have that knowledge about the master already (e.g. based on
> > > the compatible string), surely we always need that information in a
> > > given iommu-specifier format? Otherwise certain iommus won't be able to
> > > handle masters with limited addressing only due to limitations of their
> > > binding.
> >
> > This is only used for what's often called a windowed IOMMU. Many IOMMUs
> > (non-windowed) typically allow only a complete address space to be
> > assigned to a master without additional control over subregions. So this
> > is really a property/capability of the IOMMU rather than the masters
> > themselves.
>
> I'm not sure I follow, but I'm happy to wait until we have the first
> windowed IOMMU using this binding. I'll try to get myself up to speed in
> the mean time.
As I understand it, a windowed IOMMU manages a given I/O virtual address
space (only one or perhaps even several). Each such address space is the
complete range that the IOMMU can take as inputs from any master. For
purposes of virtualization and process separation it can subdivide this
address space into subranges, so that each context can only access that
given range of virtual I/O addresses. I suspect that this works by
setting up a mapping between that range and the context's master ID(s).
And I also suppose it could be possible for the DMA windows to be truly
configurable within the IOMMU or for specific devices to be assigned a
fixed window.
Simpler IOMMUs (Tegra uses one of those for example) know only address
spaces. That is each address space can be assigned to one or more
masters. But each master can always access the whole address space and
accesses cannot be restricted to subregions thereof.
So from a memory protection point of view the difference is that for
non-windowed IOMMUs translations will fault only if no mapping has been
set up for the I/O virtual address being accessed, whereas for windowed
IOMMUs translations can in addition also fault if they access an I/O
virtual addresses outside of the range that they've been assigned.
Does that help? Note that I've never dealt with windowed IOMMUs myself,
so this is largely based on what I scooped up in previous discussions
with Arnd.
Thierry
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20140731/e98963bc/attachment.sig>
next prev parent reply other threads:[~2014-07-31 11:14 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-04 15:29 [PATCH v4] devicetree: Add generic IOMMU device tree bindings Thierry Reding
2014-07-09 13:40 ` Will Deacon
2014-07-09 14:21 ` Thierry Reding
2014-07-09 18:10 ` Will Deacon
2014-07-10 9:49 ` Thierry Reding
2014-07-10 10:23 ` Will Deacon
2014-07-10 10:57 ` Thierry Reding
2014-07-10 12:38 ` Will Deacon
2014-07-11 20:55 ` Rob Clark
2014-07-12 9:39 ` Will Deacon
2014-07-12 11:26 ` Rob Clark
2014-07-12 12:22 ` Arnd Bergmann
2014-07-12 12:57 ` Rob Clark
2014-07-13 9:43 ` Will Deacon
2014-07-13 11:43 ` Rob Clark
2014-07-16 1:25 ` Olav Haugan
2014-07-16 10:10 ` Will Deacon
2014-07-16 20:24 ` Rob Clark
2014-07-14 6:44 ` Thierry Reding
2014-07-14 10:08 ` Will Deacon
2014-07-14 6:24 ` Thierry Reding
2014-07-14 10:13 ` Rob Clark
2014-07-14 6:15 ` Thierry Reding
2014-07-30 11:04 ` Will Deacon
2014-07-30 13:23 ` Thierry Reding
2014-07-30 13:33 ` Joerg Roedel
2014-07-30 17:37 ` Olof Johansson
2014-07-30 14:30 ` Will Deacon
2014-07-30 18:08 ` Rob Herring
2014-07-30 20:11 ` Arnd Bergmann
2014-07-30 15:26 ` Mark Rutland
2014-07-30 17:35 ` Olof Johansson
2014-07-30 18:18 ` Mark Rutland
2014-07-31 10:09 ` Thierry Reding
2014-07-31 10:50 ` Mark Rutland
2014-07-31 11:14 ` Thierry Reding [this message]
2014-07-31 9:51 ` Thierry Reding
2014-07-31 8:39 ` Thierry Reding
2014-07-31 9:22 ` Mark Rutland
2014-07-31 10:18 ` Thierry Reding
2014-07-31 10:23 ` Joerg Roedel
2014-07-31 10:46 ` Thierry Reding
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20140731111453.GA11955@ulmo \
--to=thierry.reding@gmail.com \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).