From: Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org>
To: Robin Murphy <Robin.Murphy-5wv7dgnIgG8@public.gmane.org>
Cc: "devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
Lorenzo Pieralisi
<Lorenzo.Pieralisi-5wv7dgnIgG8@public.gmane.org>,
"arnd-r2nGTMty4D4@public.gmane.org"
<arnd-r2nGTMty4D4@public.gmane.org>,
Marc Zyngier <Marc.Zyngier-5wv7dgnIgG8@public.gmane.org>,
Will Deacon <Will.Deacon-5wv7dgnIgG8@public.gmane.org>,
"linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
"ddaney-M3mlKVOIwJVv6pq1l3V1OdBPR1lH4CV8@public.gmane.org"
<ddaney-M3mlKVOIwJVv6pq1l3V1OdBPR1lH4CV8@public.gmane.org>,
"iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org"
<iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org>,
"tirumalesh.chalamarla-M3mlKVOIwJVv6pq1l3V1OdBPR1lH4CV8@public.gmane.org"
<tirumalesh.chalamarla-M3mlKVOIwJVv6pq1l3V1OdBPR1lH4CV8@public.gmane.org>,
"laurent.pinchart-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org"
<laurent.pinchart-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org>,
"thunder.leizhen-hv44wF8Li93QT0dZR+AlfA@public.gmane.org"
<thunder.leizhen-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>,
"treding-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org"
<treding-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>,
"linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org"
<linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org>,
"majun258-hv44wF8Li93QT0dZR+AlfA@public.gmane.org"
<majun258-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
Subject: Re: [PATCH 3/3] Docs: dt: add PCI IOMMU map bindings
Date: Fri, 24 Jul 2015 14:26:23 +0100 [thread overview]
Message-ID: <20150724132623.GB21234@leverpostej> (raw)
In-Reply-To: <55B22E5B.7080208-5wv7dgnIgG8@public.gmane.org>
Hi,
> This looks sane, and lets me describe the thing I have on my desk, so
> I'm happy. I have a couple of general thoughts below, but I don't intend
> that they should stand in the way of this proposal as-is.
Good to hear that this doesn't fall apart at the sight of a real system!
> On 23/07/15 17:52, Mark Rutland wrote:
> > The existing IOMMU bindings are able to specify the relationship between
> > masters and IOMMUs, but they are insufficient for describing the general
> > case of hotpluggable busses such as PCI where the set of masters is not
> > known until runtime, and the relationship between masters and IOMMUs is
> > a property of the integration of the system.
> >
> > This patch adds a generic binding for mapping PCI devices to IOMMUs,
> > using a new iommu-map property (specific to PCI*) which may be used to
> > map devices (identified by their Requester ID) to sideband data for the
> > IOMMU which they master through.
> >
> > Signed-off-by: Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org>
> > ---
> > .../devicetree/bindings/pci/pci-iommu.txt | 171 +++++++++++++++++++++
> > 1 file changed, 171 insertions(+)
> > create mode 100644 Documentation/devicetree/bindings/pci/pci-iommu.txt
> >
> > diff --git a/Documentation/devicetree/bindings/pci/pci-iommu.txt b/Documentation/devicetree/bindings/pci/pci-iommu.txt
> > new file mode 100644
> > index 0000000..56c8296
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/pci/pci-iommu.txt
> > @@ -0,0 +1,171 @@
> > +This document describes the generic device tree binding for describing the
> > +relationship between PCI(e) devices and IOMMU(s).
> > +
> > +Each PCI(e) device under a root complex is uniquely identified by its Requester
> > +ID (AKA RID). A Requester ID is a triplet of a Bus number, Device number, and
> > +Function number.
> > +
> > +For the purpose of this document, when treated as a numeric value, a RID is
> > +formatted such that:
> > +
> > +* Bits [15:8] are the Bus number.
> > +* Bits [7:3] are the Device number.
> > +* Bits [2:0] are the Function number.
> > +* Any other bits required for padding must be zero.
> > +
> > +IOMMUs may distinguish PCI devices through sideband data derived from the
> > +Requester ID. While a given PCI device can only master through one IOMMU, a
> > +root complex may split masters across a set of IOMMUs (e.g. with one IOMMU per
> > +bus).
> > +
> > +The generic 'iommus' property is insufficient to describe this relationship,
> > +and a mechanism is required to map from a PCI device to its IOMMU and sideband
> > +data.
> > +
> > +For generic IOMMU bindings, see
> > +Documentation/devicetree/bindings/iommu/iommu.txt.
> > +
> > +
> > +PCI root complex
> > +================
> > +
> > +Optional properties
> > +-------------------
> > +
> > +- iommu-map: Maps a Requester ID to an IOMMU and associated iommu-specifier
> > + data.
> > +
> > + The property is an arbitrary number of tuples of
> > + (rid-base,iommu,iommu-base,length).
> > +
> > + Any RID r in the interval [rid-base, rid-base + length) is associated with
> > + the listed IOMMU, with the iommu-specifier (r - rid-base + iommu-base).
>
> Can we take as a guarantee that the system cannot present any ID at a
> given IOMMU that is not represented in an appropriate output range (in
> the sense that we may do things that could blow up horribly if spurious
> IDs appeared)?
I would expect that for the root complex, the iommu-map should cover all
possible RIDs (and hence we would know their output IDs). In the case
that a possible RID was not translated by the property, I would hope
that we could either detect this at parse time, or prevent probing of
the device when it appeared.
The root complex could share IOMMUs with other masters, so in general
iommu-map alone would not be sufficient to detect all possible IDs.
> Furthermore, would representing one-to-many mappings by having multiple
> matches for a given RID be legal? In the general case it's certainly
> feasible for the IOMMU to see different IDs for e.g. reads vs. writes,
> where the system munges extra bus lines into the sideband signals -
> whether anyone would actually integrate a PCI host controller that way
> is another matter, so I don't think it's something worth really worrying
> about without a definite need.
I'd expect no-one would implement separate read and write IDs, given
that the IOMMU should distinguish reads and writes anyway.
Generally I don't think multiple matches for the same RID make sense.
> > +- iommu-map-mask: A mask to be applied to each Requester ID prior to being
> > + mapped to an iommu-specifier per the iommu-map property.
>
> Am I right to assume a mask of 0 would be a valid way to represent
> "everything" (and if so, should rid-base and length just be ignored, or
> mandated to be 0 and 1 respectively)? It looks a bit off at first
> glance, but it does neatly address a genuine use-case.
I think that should be valid, yes.
> > +
> > +
> > +Example (1)
> > +===========
> > +
> > +/ {
> > + #address-cells = <1>;
> > + #size-cells = <1>;
> > +
> > + iommu: iommu@a {
> > + reg = <0xa 0x1>;
> > + compatible = "vendor,some-iommu";
> > + #iommu-cells = <1>;
>
> Troll question; what do we do when #iommu-cells > 1, where the IOMMU is
> expecting some extra data associated with each ID (say, memory attributes)?
It really depends on the format of your iommu-specifier.
In the degenerate case, you can simply provide each RID with its own
translation and a full iommu-specifier, though that could take an
appeciable amount of space.
I would hope that for PCI you shouldn't need to describe the
transformation of memory attributes, however.
Thanks,
Mark.
prev parent reply other threads:[~2015-07-24 13:26 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-23 16:52 [PATCH 0/3] Generic PCI MSI + IOMMU topology bindings Mark Rutland
[not found] ` <1437670365-20704-1-git-send-email-mark.rutland-5wv7dgnIgG8@public.gmane.org>
2015-07-23 16:52 ` [PATCH 1/3] Docs: dt: add generic MSI bindings Mark Rutland
2015-07-27 8:02 ` Marc Zyngier
[not found] ` <55B5E5A6.2030509-5wv7dgnIgG8@public.gmane.org>
2015-07-27 9:46 ` Mark Rutland
2015-08-03 10:44 ` Marc Zyngier
[not found] ` <1437670365-20704-2-git-send-email-mark.rutland-5wv7dgnIgG8@public.gmane.org>
2015-07-23 18:26 ` David Daney
2015-07-24 7:04 ` Marc Zyngier
2015-08-05 16:51 ` Mark Rutland
2015-08-06 7:56 ` Marc Zyngier
2015-08-24 10:17 ` Mark Rutland
2015-08-24 13:37 ` Rob Herring
[not found] ` <CAL_Jsq+-xKsfBwqjHnSKPxtO1muu-NLEHZTTLpSqw=sBuU1Gjw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-08-24 13:47 ` Mark Rutland
2015-07-23 16:52 ` [PATCH 2/3] Docs: dt: Add PCI MSI map bindings Mark Rutland
[not found] ` <1437670365-20704-3-git-send-email-mark.rutland-5wv7dgnIgG8@public.gmane.org>
2015-07-24 23:27 ` Chalamarla, Tirumalesh
[not found] ` <FD9C4916-6BDC-40F2-A273-91BFBD3B0075-M3mlKVOIwJVv6pq1l3V1OdBPR1lH4CV8@public.gmane.org>
2015-07-27 9:16 ` Mark Rutland
2015-07-27 8:16 ` Marc Zyngier
[not found] ` <55B5E8C1.4030707-5wv7dgnIgG8@public.gmane.org>
2015-09-04 22:33 ` David Daney
[not found] ` <55EA1C3F.1030300-M3mlKVOIwJVv6pq1l3V1OdBPR1lH4CV8@public.gmane.org>
2015-09-07 18:05 ` Mark Rutland
2015-09-08 15:53 ` Stuart Yoder
2015-09-07 17:56 ` Mark Rutland
2015-08-05 16:39 ` Varun Sethi
[not found] ` <BN1PR0301MB06277FDA6EB34E77B557CA75EA750-RQSpjbwlmjSD1ymB6+i1+JwN6zqB+hSMnBOFsp37pqbUKgpGm//BTAC/G2K4zDHf@public.gmane.org>
2015-08-06 17:38 ` Mark Rutland
2015-08-08 15:06 ` Varun Sethi
[not found] ` <CALRxmdA32xiSX7DDKAJPLR8=bh_9j-6MN124u4KjYGRT8bAKNg@mail.gmail.com>
[not found] ` <CALRxmdA32xiSX7DDKAJPLR8=bh_9j-6MN124u4KjYGRT8bAKNg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-08-05 19:53 ` Stuart Yoder
[not found] ` <CY1PR0301MB07486794749E499F71BDFCD287750-YrwGdl+PljkyhdUd3pz1uJwN6zqB+hSMnBOFsp37pqbUKgpGm//BTAC/G2K4zDHf@public.gmane.org>
2015-08-06 18:14 ` Mark Rutland
2015-08-06 19:46 ` Stuart Yoder
2015-07-23 16:52 ` [PATCH 3/3] Docs: dt: add PCI IOMMU " Mark Rutland
[not found] ` <1437670365-20704-4-git-send-email-mark.rutland-5wv7dgnIgG8@public.gmane.org>
2015-07-24 12:23 ` Robin Murphy
[not found] ` <55B22E5B.7080208-5wv7dgnIgG8@public.gmane.org>
2015-07-24 13:26 ` Mark Rutland [this message]
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=20150724132623.GB21234@leverpostej \
--to=mark.rutland-5wv7dgnigg8@public.gmane.org \
--cc=Lorenzo.Pieralisi-5wv7dgnIgG8@public.gmane.org \
--cc=Marc.Zyngier-5wv7dgnIgG8@public.gmane.org \
--cc=Robin.Murphy-5wv7dgnIgG8@public.gmane.org \
--cc=Will.Deacon-5wv7dgnIgG8@public.gmane.org \
--cc=arnd-r2nGTMty4D4@public.gmane.org \
--cc=ddaney-M3mlKVOIwJVv6pq1l3V1OdBPR1lH4CV8@public.gmane.org \
--cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
--cc=laurent.pinchart-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org \
--cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=majun258-hv44wF8Li93QT0dZR+AlfA@public.gmane.org \
--cc=thunder.leizhen-hv44wF8Li93QT0dZR+AlfA@public.gmane.org \
--cc=tirumalesh.chalamarla-M3mlKVOIwJVv6pq1l3V1OdBPR1lH4CV8@public.gmane.org \
--cc=treding-DDmLM1+adcrQT0dZR+AlfA@public.gmane.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