From: Will Deacon <will.deacon-5wv7dgnIgG8@public.gmane.org>
To: Thierry Reding <thierry.reding-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Cc: Mark Rutland <Mark.Rutland-5wv7dgnIgG8@public.gmane.org>,
Varun Sethi <varun.sethi-KZfg59tc24xl57MIdRCFDg@public.gmane.org>,
Pawel Moll <Pawel.Moll-5wv7dgnIgG8@public.gmane.org>,
Stephen Warren <swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>,
Marc Zyngier <Marc.Zyngier-5wv7dgnIgG8@public.gmane.org>,
Dave P Martin <Dave.Martin-5wv7dgnIgG8@public.gmane.org>,
"devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
Arnd Bergmann <arnd-r2nGTMty4D4@public.gmane.org>,
Ian Campbell
<ijc+devicetree-KcIKpvwj1kUDXYZnReoRVg@public.gmane.org>,
Grant Grundler <grundler-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>,
linux-arm-msm
<linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
Rob Herring <robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
"linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
Cho KyongHo <pullip.cho-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>,
"linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org"
<linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org>,
Linux Kernel Mailing List
<linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
"iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org"
<iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org>,
Kumar Gala <galak-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
Subject: Re: [PATCH v4] devicetree: Add generic IOMMU device tree bindings
Date: Mon, 14 Jul 2014 11:08:13 +0100 [thread overview]
Message-ID: <20140714100813.GC1779@arm.com> (raw)
In-Reply-To: <20140714064452.GD2081@ulmo>
Hi Thierry,
On Mon, Jul 14, 2014 at 07:44:53AM +0100, Thierry Reding wrote:
> On Sun, Jul 13, 2014 at 10:43:41AM +0100, Will Deacon wrote:
> > My plan for the ARM SMMU driver is:
> >
> > (1) Change ->probe() to walk the device-tree looking for all masters with
> > phandles back to the SMMU instance being probed
>
> You and Rob mentioned this several times and I don't understand why the
> SMMU needs to know all masters up front. Is this necessary because it
> needs to program all registers at .probe() time and they can't be
> reprogrammed subsequently? Or is this just some kind of optimization?
It's an optimization to reduce resource usage in the IOMMU, but one that
is *required* by certain platforms (e.g. Olav mentioned his 43-ID master
and Calxeda had something similar).
Basically, in order to perform an ->attach() for a master to a domain, we
need complete knowledge of the system so that we can avoid accidentally
attaching other masters to the same domain. The programming is done using
a form of StreamID wildcarding, so at this point we would need to have
parsed the entire DT to ensure our wildcard doesn't match other masters.
> > (2) For each master, extract the Stream IDs and add them to the internal
> > SMMU driver data structures (an rbtree per SMMU instance). For
> > hotpluggable buses, we'll need a way for the bus controller to
> > reserve a range of IDs -- this will likely be a later extension to
> > the binding.
> >
> > (3) When we get an ->add() call, warn if it's a device we haven't seen
> > and reject the addition.
>
> It seems to me like this would be the logical place to parse stream IDs.
We could do that only if we were guaranteed to have an ->add() call for
*every* master before an ->attach() call for *any* master. I don't think
that is necessarily true.
> You could for example have a case where some device tree contains a node
> for which no driver will ever be loaded (for example because it hasn't
> been built-in, or the device is never used and the module is therefore
> never loaded). That's a situation that you cannot determine by simply
> walking the device tree in the IOMMU's .probe().
Why not? If we're simply searching for phandles to the IOMMU, why does it
matter whether a driver is bound to the master?
> I've always thought about IOMMU masters much in the same way as other
> types of resources, such as memory or interrupts. In the rest of the
> kernel we do carefully try to postpone allocation of these resources
> until they are required, specifically so we don't waste resources when
> they're unused.
See above, they are all required the moment anybody tries an ->attach().
> That's also one of the reasons why I think associating an IOMMU with the
> bus type is bad. Currently if an IOMMU driver thinks it should enable
> translation for a given device, then there's no way for that device's
> driver to opt out again. There may be reasons (performance, hardware
> bugs, ...) for the driver to decide against using the IOMMU for
> translation, but there's currently no way to do that if the IOMMU driver
> disagrees.
Yes, we need a way to associate an IOMMU with a bus instance, but I think
that's a separate topic, no?
Will
WARNING: multiple messages have this Message-ID (diff)
From: will.deacon@arm.com (Will Deacon)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v4] devicetree: Add generic IOMMU device tree bindings
Date: Mon, 14 Jul 2014 11:08:13 +0100 [thread overview]
Message-ID: <20140714100813.GC1779@arm.com> (raw)
In-Reply-To: <20140714064452.GD2081@ulmo>
Hi Thierry,
On Mon, Jul 14, 2014 at 07:44:53AM +0100, Thierry Reding wrote:
> On Sun, Jul 13, 2014 at 10:43:41AM +0100, Will Deacon wrote:
> > My plan for the ARM SMMU driver is:
> >
> > (1) Change ->probe() to walk the device-tree looking for all masters with
> > phandles back to the SMMU instance being probed
>
> You and Rob mentioned this several times and I don't understand why the
> SMMU needs to know all masters up front. Is this necessary because it
> needs to program all registers at .probe() time and they can't be
> reprogrammed subsequently? Or is this just some kind of optimization?
It's an optimization to reduce resource usage in the IOMMU, but one that
is *required* by certain platforms (e.g. Olav mentioned his 43-ID master
and Calxeda had something similar).
Basically, in order to perform an ->attach() for a master to a domain, we
need complete knowledge of the system so that we can avoid accidentally
attaching other masters to the same domain. The programming is done using
a form of StreamID wildcarding, so at this point we would need to have
parsed the entire DT to ensure our wildcard doesn't match other masters.
> > (2) For each master, extract the Stream IDs and add them to the internal
> > SMMU driver data structures (an rbtree per SMMU instance). For
> > hotpluggable buses, we'll need a way for the bus controller to
> > reserve a range of IDs -- this will likely be a later extension to
> > the binding.
> >
> > (3) When we get an ->add() call, warn if it's a device we haven't seen
> > and reject the addition.
>
> It seems to me like this would be the logical place to parse stream IDs.
We could do that only if we were guaranteed to have an ->add() call for
*every* master before an ->attach() call for *any* master. I don't think
that is necessarily true.
> You could for example have a case where some device tree contains a node
> for which no driver will ever be loaded (for example because it hasn't
> been built-in, or the device is never used and the module is therefore
> never loaded). That's a situation that you cannot determine by simply
> walking the device tree in the IOMMU's .probe().
Why not? If we're simply searching for phandles to the IOMMU, why does it
matter whether a driver is bound to the master?
> I've always thought about IOMMU masters much in the same way as other
> types of resources, such as memory or interrupts. In the rest of the
> kernel we do carefully try to postpone allocation of these resources
> until they are required, specifically so we don't waste resources when
> they're unused.
See above, they are all required the moment anybody tries an ->attach().
> That's also one of the reasons why I think associating an IOMMU with the
> bus type is bad. Currently if an IOMMU driver thinks it should enable
> translation for a given device, then there's no way for that device's
> driver to opt out again. There may be reasons (performance, hardware
> bugs, ...) for the driver to decide against using the IOMMU for
> translation, but there's currently no way to do that if the IOMMU driver
> disagrees.
Yes, we need a way to associate an IOMMU with a bus instance, but I think
that's a separate topic, no?
Will
WARNING: multiple messages have this Message-ID (diff)
From: Will Deacon <will.deacon@arm.com>
To: Thierry Reding <thierry.reding@gmail.com>
Cc: Rob Clark <robdclark@gmail.com>, Arnd Bergmann <arnd@arndb.de>,
Rob Herring <robh+dt@kernel.org>, Pawel Moll <Pawel.Moll@arm.com>,
Mark Rutland <Mark.Rutland@arm.com>,
Ian Campbell <ijc+devicetree@hellion.org.uk>,
Kumar Gala <galak@codeaurora.org>,
Stephen Warren <swarren@wwwdotorg.org>,
Joerg Roedel <joro@8bytes.org>,
Olav Haugan <ohaugan@codeaurora.org>,
"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
Grant Grundler <grundler@chromium.org>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
Marc Zyngier <Marc.Zyngier@arm.com>,
"iommu@lists.linux-foundation.org"
<iommu@lists.linux-foundation.org>,
"linux-tegra@vger.kernel.org" <linux-tegra@vger.kernel.org>,
Varun Sethi <varun.sethi@freescale.com>,
Cho KyongHo <pullip.cho@samsung.com>,
Dave P Martin <Dave.Martin@arm.com>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
Hiroshi Doyu <hdoyu@nvidia.com>,
linux-arm-msm <linux-arm-msm@vger.kernel.org>
Subject: Re: [PATCH v4] devicetree: Add generic IOMMU device tree bindings
Date: Mon, 14 Jul 2014 11:08:13 +0100 [thread overview]
Message-ID: <20140714100813.GC1779@arm.com> (raw)
In-Reply-To: <20140714064452.GD2081@ulmo>
Hi Thierry,
On Mon, Jul 14, 2014 at 07:44:53AM +0100, Thierry Reding wrote:
> On Sun, Jul 13, 2014 at 10:43:41AM +0100, Will Deacon wrote:
> > My plan for the ARM SMMU driver is:
> >
> > (1) Change ->probe() to walk the device-tree looking for all masters with
> > phandles back to the SMMU instance being probed
>
> You and Rob mentioned this several times and I don't understand why the
> SMMU needs to know all masters up front. Is this necessary because it
> needs to program all registers at .probe() time and they can't be
> reprogrammed subsequently? Or is this just some kind of optimization?
It's an optimization to reduce resource usage in the IOMMU, but one that
is *required* by certain platforms (e.g. Olav mentioned his 43-ID master
and Calxeda had something similar).
Basically, in order to perform an ->attach() for a master to a domain, we
need complete knowledge of the system so that we can avoid accidentally
attaching other masters to the same domain. The programming is done using
a form of StreamID wildcarding, so at this point we would need to have
parsed the entire DT to ensure our wildcard doesn't match other masters.
> > (2) For each master, extract the Stream IDs and add them to the internal
> > SMMU driver data structures (an rbtree per SMMU instance). For
> > hotpluggable buses, we'll need a way for the bus controller to
> > reserve a range of IDs -- this will likely be a later extension to
> > the binding.
> >
> > (3) When we get an ->add() call, warn if it's a device we haven't seen
> > and reject the addition.
>
> It seems to me like this would be the logical place to parse stream IDs.
We could do that only if we were guaranteed to have an ->add() call for
*every* master before an ->attach() call for *any* master. I don't think
that is necessarily true.
> You could for example have a case where some device tree contains a node
> for which no driver will ever be loaded (for example because it hasn't
> been built-in, or the device is never used and the module is therefore
> never loaded). That's a situation that you cannot determine by simply
> walking the device tree in the IOMMU's .probe().
Why not? If we're simply searching for phandles to the IOMMU, why does it
matter whether a driver is bound to the master?
> I've always thought about IOMMU masters much in the same way as other
> types of resources, such as memory or interrupts. In the rest of the
> kernel we do carefully try to postpone allocation of these resources
> until they are required, specifically so we don't waste resources when
> they're unused.
See above, they are all required the moment anybody tries an ->attach().
> That's also one of the reasons why I think associating an IOMMU with the
> bus type is bad. Currently if an IOMMU driver thinks it should enable
> translation for a given device, then there's no way for that device's
> driver to opt out again. There may be reasons (performance, hardware
> bugs, ...) for the driver to decide against using the IOMMU for
> translation, but there's currently no way to do that if the IOMMU driver
> disagrees.
Yes, we need a way to associate an IOMMU with a bus instance, but I think
that's a separate topic, no?
Will
next prev parent reply other threads:[~2014-07-14 10:08 UTC|newest]
Thread overview: 126+ 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-04 15:29 ` Thierry Reding
2014-07-04 15:29 ` Thierry Reding
[not found] ` <1404487757-18829-1-git-send-email-thierry.reding-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2014-07-09 13:40 ` Will Deacon
2014-07-09 13:40 ` Will Deacon
2014-07-09 13:40 ` Will Deacon
[not found] ` <20140709134050.GN9485-5wv7dgnIgG8@public.gmane.org>
2014-07-09 14:21 ` Thierry Reding
2014-07-09 14:21 ` Thierry Reding
2014-07-09 14:21 ` Thierry Reding
2014-07-09 18:10 ` Will Deacon
2014-07-09 18:10 ` Will Deacon
2014-07-09 18:10 ` Will Deacon
[not found] ` <20140709181048.GX9485-5wv7dgnIgG8@public.gmane.org>
2014-07-10 9:49 ` Thierry Reding
2014-07-10 9:49 ` Thierry Reding
2014-07-10 9:49 ` Thierry Reding
2014-07-10 10:23 ` Will Deacon
2014-07-10 10:23 ` Will Deacon
2014-07-10 10:23 ` Will Deacon
[not found] ` <20140710102334.GG2449-5wv7dgnIgG8@public.gmane.org>
2014-07-10 10:57 ` Thierry Reding
2014-07-10 10:57 ` Thierry Reding
2014-07-10 10:57 ` Thierry Reding
2014-07-10 12:38 ` Will Deacon
2014-07-10 12:38 ` Will Deacon
2014-07-10 12:38 ` Will Deacon
2014-07-11 20:55 ` Rob Clark
2014-07-11 20:55 ` Rob Clark
2014-07-11 20:55 ` Rob Clark
[not found] ` <CAF6AEGv2P_Uq8CHgm1YdaUeMSNdH62ZwjLnT83Fr5GnxEAhTMw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-07-12 9:39 ` Will Deacon
2014-07-12 9:39 ` Will Deacon
2014-07-12 9:39 ` Will Deacon
[not found] ` <20140712093917.GD18601-5wv7dgnIgG8@public.gmane.org>
2014-07-12 11:26 ` Rob Clark
2014-07-12 11:26 ` Rob Clark
2014-07-12 11:26 ` Rob Clark
[not found] ` <CAF6AEGutHp+3f3iPA+jjaRkqq=5T_vytZ_ESoSqsQ4RHZ8F8yQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-07-12 12:22 ` Arnd Bergmann
2014-07-12 12:22 ` Arnd Bergmann
2014-07-12 12:22 ` Arnd Bergmann
[not found] ` <201407121422.02078.arnd-r2nGTMty4D4@public.gmane.org>
2014-07-12 12:57 ` Rob Clark
2014-07-12 12:57 ` Rob Clark
2014-07-12 12:57 ` Rob Clark
[not found] ` <CAF6AEGs7=3UByP2DLm-uwU03wr7M14x2t-0hLX-VPJ6_eZbU3g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-07-13 9:43 ` Will Deacon
2014-07-13 9:43 ` Will Deacon
2014-07-13 9:43 ` Will Deacon
[not found] ` <20140713094341.GB23235-5wv7dgnIgG8@public.gmane.org>
2014-07-13 11:43 ` Rob Clark
2014-07-13 11:43 ` Rob Clark
2014-07-13 11:43 ` Rob Clark
2014-07-16 1:25 ` Olav Haugan
2014-07-16 1:25 ` Olav Haugan
2014-07-16 1:25 ` Olav Haugan
[not found] ` <53C5D480.3030409-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2014-07-16 10:10 ` Will Deacon
2014-07-16 10:10 ` Will Deacon
2014-07-16 10:10 ` Will Deacon
2014-07-16 20:24 ` Rob Clark
2014-07-16 20:24 ` Rob Clark
2014-07-16 20:24 ` Rob Clark
2014-07-14 6:44 ` Thierry Reding
2014-07-14 6:44 ` Thierry Reding
2014-07-14 6:44 ` Thierry Reding
2014-07-14 10:08 ` Will Deacon [this message]
2014-07-14 10:08 ` Will Deacon
2014-07-14 10:08 ` Will Deacon
2014-07-14 6:24 ` Thierry Reding
2014-07-14 6:24 ` Thierry Reding
2014-07-14 6:24 ` Thierry Reding
2014-07-14 10:13 ` Rob Clark
2014-07-14 10:13 ` Rob Clark
2014-07-14 10:13 ` Rob Clark
2014-07-14 6:15 ` Thierry Reding
2014-07-14 6:15 ` Thierry Reding
2014-07-14 6:15 ` Thierry Reding
2014-07-30 11:04 ` Will Deacon
2014-07-30 11:04 ` Will Deacon
2014-07-30 11:04 ` Will Deacon
[not found] ` <20140730110425.GI12239-5wv7dgnIgG8@public.gmane.org>
2014-07-30 13:23 ` Thierry Reding
2014-07-30 13:23 ` Thierry Reding
2014-07-30 13:23 ` Thierry Reding
2014-07-30 13:33 ` Joerg Roedel
2014-07-30 13:33 ` Joerg Roedel
2014-07-30 13:33 ` Joerg Roedel
[not found] ` <20140730133309.GF9809-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
2014-07-30 17:37 ` Olof Johansson
2014-07-30 17:37 ` Olof Johansson
2014-07-30 17:37 ` Olof Johansson
2014-07-30 14:30 ` Will Deacon
2014-07-30 14:30 ` Will Deacon
2014-07-30 14:30 ` Will Deacon
[not found] ` <20140730143037.GD8989-5wv7dgnIgG8@public.gmane.org>
2014-07-30 18:08 ` Rob Herring
2014-07-30 18:08 ` Rob Herring
2014-07-30 18:08 ` Rob Herring
2014-07-30 20:11 ` Arnd Bergmann
2014-07-30 20:11 ` Arnd Bergmann
2014-07-30 20:11 ` Arnd Bergmann
2014-07-30 15:26 ` Mark Rutland
2014-07-30 15:26 ` Mark Rutland
2014-07-30 15:26 ` Mark Rutland
2014-07-30 17:35 ` Olof Johansson
2014-07-30 17:35 ` Olof Johansson
2014-07-30 17:35 ` Olof Johansson
[not found] ` <CAOesGMi3zM1-cqmeGddJ69RNXx0ktFm_zXO_yq7N0EeA3HNrUQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-07-30 18:18 ` Mark Rutland
2014-07-30 18:18 ` Mark Rutland
2014-07-30 18:18 ` Mark Rutland
2014-07-31 10:09 ` Thierry Reding
2014-07-31 10:09 ` Thierry Reding
2014-07-31 10:09 ` Thierry Reding
2014-07-31 10:50 ` Mark Rutland
2014-07-31 10:50 ` Mark Rutland
2014-07-31 10:50 ` Mark Rutland
2014-07-31 11:14 ` Thierry Reding
2014-07-31 11:14 ` Thierry Reding
2014-07-31 11:14 ` Thierry Reding
2014-07-31 9:51 ` Thierry Reding
2014-07-31 9:51 ` Thierry Reding
2014-07-31 9:51 ` Thierry Reding
2014-07-31 8:39 ` Thierry Reding
2014-07-31 8:39 ` Thierry Reding
2014-07-31 8:39 ` Thierry Reding
2014-07-31 9:22 ` Mark Rutland
2014-07-31 9:22 ` Mark Rutland
2014-07-31 9:22 ` Mark Rutland
2014-07-31 10:18 ` Thierry Reding
2014-07-31 10:18 ` Thierry Reding
2014-07-31 10:18 ` Thierry Reding
2014-07-31 10:23 ` Joerg Roedel
2014-07-31 10:23 ` Joerg Roedel
2014-07-31 10:23 ` Joerg Roedel
[not found] ` <20140731102351.GJ9809-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
2014-07-31 10:46 ` Thierry Reding
2014-07-31 10:46 ` Thierry Reding
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=20140714100813.GC1779@arm.com \
--to=will.deacon-5wv7dgnigg8@public.gmane.org \
--cc=Dave.Martin-5wv7dgnIgG8@public.gmane.org \
--cc=Marc.Zyngier-5wv7dgnIgG8@public.gmane.org \
--cc=Mark.Rutland-5wv7dgnIgG8@public.gmane.org \
--cc=Pawel.Moll-5wv7dgnIgG8@public.gmane.org \
--cc=arnd-r2nGTMty4D4@public.gmane.org \
--cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=galak-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org \
--cc=grundler-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org \
--cc=ijc+devicetree-KcIKpvwj1kUDXYZnReoRVg@public.gmane.org \
--cc=iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
--cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
--cc=linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=pullip.cho-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org \
--cc=robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org \
--cc=thierry.reding-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=varun.sethi-KZfg59tc24xl57MIdRCFDg@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.