From: Thierry Reding <thierry.reding-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
To: Hiroshi Doyu <hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
Cc: "grant.likely-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org"
<grant.likely-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>,
"joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org"
<joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>,
Stephen Warren <swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>,
"rob.herring-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org"
<rob.herring-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org>,
"iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org"
<iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org>,
"linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
"devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Subject: Re: [PATCHv3 01/19] [HACK] of: dev_node has struct device pointer
Date: Fri, 25 Oct 2013 11:11:05 +0200 [thread overview]
Message-ID: <20131025091104.GG19622@ulmo.nvidia.com> (raw)
In-Reply-To: <20131025.112549.2040849946958069337.hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
[-- Attachment #1: Type: text/plain, Size: 4996 bytes --]
On Fri, Oct 25, 2013 at 10:25:49AM +0200, Hiroshi Doyu wrote:
> Thierry Reding <thierry.reding-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote @ Fri, 25 Oct 2013 09:56:55 +0200:
>
> > > > This patch is a part of HACK to control device instanciation order. We
> > > > have an IOMMU device(platform) which needs to be instanciated earlier
> > > > than other (platform)devices so that IOMMU driver would configure them
> > > > as IOMMU'able device.
> > >
> > > Ideally the drivers depending on the IOMMU would return -EPROBE_DEFER if
> > > the IOMMU driver isn't set up so that you don't need to play games with
> > > probe order. Creating certain platform devices early is a really ugly
> > > and fragile solution.
> > >
> > > Besides, probe order of device drivers is far more about link order of
> > > the kernel than it is about when of_platform_device_create() is called.
> > > Fiddling with the initcall level on the IOMMU driver (while not
> > > recommended) may very well have the effect you desire.
> >
> > This is actually "the other problem that I'm aware of that could benefit
> > from [interrupt resolution at probe time]". My idea was that once we had
> > a way within the driver core to resolve interrupt references at probe
> > time it could be used for potentially many other resources as well. Some
> > of the resources like GPIOs and regulators are obviously not something
> > that the core can or should be requesting, but mostly resources that you
> > don't actually need to control after probing (such as interrupts) would
> > be a good fit because otherwise people would write the same boilerplate
> > over and over again.
> >
> > IOMMUs seem to me to be in that same category. As far as I can tell, an
> > IOMMU driver registers the IOMMU for a given bus, upon which every
> > device can simply be used (mostly transparently) with that IOMMU. While
> > I haven't figured out how exactly, I'm pretty sure we can take advantage
> > of the resolution of resources at probe time within the core to both
> > keep drivers from having to do anything in particular and at the same
> > time have code to determine if the IOMMU driver hasn't been probed yet
> > and return -EPROBE_DEFER appropriately.
>
> Can you explain the above a bit more?
>
> Originally I thought that what Grant suggested would work ok with this
> patch.
I think the objection to these patches is that they special case the
instantiation of some devices. It's not a proper solution because it
implies various things. For example merely instantiating the IOMMU
device earlier than others is only going to work *if* the driver is
actually probed before the drivers of other devices. If you want to
build the driver as a module for example, probe order becomes entirely
non-deterministic.
So what Grant was saying is that you could possibly make it work by
forcing the driver to be loaded earlier using explicit initcall
ordering. But he also said that's not recommended because it's not a
proper solution and therefore not guaranteed to always work.
Explicit initcall ordering used to be heavily used in the past, but
there have been many efforts to move away from it. One of the solutions
introduced to help with that is deferred probing, which essentially adds
a new error code (EPROBE_DEFER) which a driver's .probe() can return to
cause it to be probed at a later point again, after other drivers have
been probed.
How this works is basically that a driver's .probe() requests whatever
resources it needs (GPIOs, clocks, regulators, ...). If any of those
resources isn't there yet (presumably because the driver providing it
hasn't been probed yet), it can return -EPROBE_DEFER to signal that not
all of its dependencies are available yet.
Instead of handling such dependencies implicitly by making sure all
resource providers are probed earlier than any of their consumers, the
dependencies are handled more explicitly, which turns out to simplify
things a lot. There's some additional work required in the core, but if
done consistently no driver needs to care about the dependencies and it
no longer matters where the resources come from. The problem is reduced
to essentially this:
while (!resource_available())
load_more_drivers();
So my proposed solution for the IOMMU case is to treat it the same as
any other resources. Perhaps resource isn't the right word, but at the
core the issue is the same. A device requires the services of an IOMMU
so that it can be put into the correct address space. If the IOMMU is
not available yet it cannot do that, so we simply return -EPROBE_DEFER
and cause the probe to be retried later.
Eventually the IOMMU driver will be probed and register the IOMMU. When
the earlier driver is probed again, it will be able to successfully
request to be put into the proper address space and continue with the
initialization.
Does that answer your question?
Thierry
[-- Attachment #2: Type: application/pgp-signature, Size: 836 bytes --]
next prev parent reply other threads:[~2013-10-25 9:11 UTC|newest]
Thread overview: 99+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-18 10:26 [PATCHv3 00/19] Unifying SMMU driver among Tegra SoCs Hiroshi Doyu
[not found] ` <1382092020-13170-1-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-10-18 10:26 ` [PATCHv3 01/19] [HACK] of: dev_node has struct device pointer Hiroshi Doyu
[not found] ` <1382092020-13170-2-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-10-24 8:55 ` Grant Likely
[not found] ` <20131024085531.680A4C4039D-WNowdnHR2B42iJbIjFUEsiwD8/FfD2ys@public.gmane.org>
2013-10-24 9:21 ` Hiroshi Doyu
[not found] ` < 20131025001038.77299C403B6@trevor.secretlab.ca>
[not found] ` <20131024.122115.1035609747068925560.hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-10-24 9:36 ` Kumar Gala
[not found] ` <3E007970-C2E3-4A2E-B2E3-8388DB7A98F9-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2013-10-25 0:12 ` Grant Likely
2013-10-25 0:10 ` Grant Likely
[not found] ` <20131025001038.77299C403B6-WNowdnHR2B42iJbIjFUEsiwD8/FfD2ys@public.gmane.org>
2013-10-25 7:56 ` Thierry Reding
[not found] ` <20131025075652.GB19622-AwZRO8vwLAwmlAP/+Wk3EA@public.gmane.org>
2013-10-25 8:22 ` Hiroshi Doyu
[not found] ` <20131025.112202.47792301040951621.hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-10-25 13:20 ` Will Deacon
[not found] ` <20131025132051.GD9999-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2013-10-25 13:46 ` Thierry Reding
2013-10-30 21:47 ` Stephen Warren
2013-10-25 8:25 ` Hiroshi Doyu
[not found] ` <20131025.112549.2040849946958069337.hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-10-25 9:11 ` Thierry Reding [this message]
[not found] ` <20131025091104.GG19622-AwZRO8vwLAwmlAP/+Wk3EA@public.gmane.org>
2013-10-25 9:49 ` Hiroshi Doyu
[not found] ` <20131025.124905.1154427805530939055.hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-10-25 10:49 ` Thierry Reding
[not found] ` <20131025104937.GA25080-AwZRO8vwLAwmlAP/+Wk3EA@public.gmane.org>
2013-10-25 11:08 ` Hiroshi Doyu
2013-10-25 19:01 ` Grant Likely
[not found] ` <20131025190136.D55F5C403A7-WNowdnHR2B42iJbIjFUEsiwD8/FfD2ys@public.gmane.org>
2013-10-28 7:31 ` Thierry Reding
[not found] ` <20131028073133.GA6629-AwZRO8vwLAwmlAP/+Wk3EA@public.gmane.org>
2013-11-12 7:17 ` Grant Likely
2013-10-30 21:58 ` Stephen Warren
[not found] ` <52718122.9000206-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2013-10-30 22:41 ` Thierry Reding
2013-10-31 8:14 ` Hiroshi Doyu
[not found] ` <20131031.101405.2229107340254709582.hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-10-31 16:37 ` Stephen Warren
[not found] ` <52728754.60307-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2013-10-31 16:49 ` Hiroshi Doyu
2013-11-01 9:53 ` Thierry Reding
[not found] ` <20131101095349.GI27864-AwZRO8vwLAwmlAP/+Wk3EA@public.gmane.org>
2013-11-01 10:09 ` Hiroshi Doyu
2013-10-31 8:12 ` Hiroshi Doyu
[not found] ` <20131031.101232.80781047726461143.hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-10-31 16:35 ` Stephen Warren
[not found] ` <527286CC.9080404-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2013-10-31 16:46 ` Hiroshi Doyu
[not found] ` <20131031.184603.979300613649357798.hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-10-31 17:53 ` Stephen Warren
[not found] ` <52729912.9050800-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2013-11-01 6:49 ` Hiroshi Doyu
[not found] ` <20131101084909.5ed79987aa3aeb13b14e3f08-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-11-01 9:52 ` Thierry Reding
[not found] ` <20131101095223.GH27864-AwZRO8vwLAwmlAP/+Wk3EA@public.gmane.org>
2013-11-01 10:05 ` Hiroshi Doyu
2013-11-01 21:44 ` Stephen Warren
2013-11-06 14:06 ` [RFC][PATCHv3+ 1/2] driver/core: Add of_iommu_attach() Hiroshi Doyu
[not found] ` <20131106160623.2cb72f91cd071e555d0d4b9a-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-11-08 13:14 ` Hiroshi Doyu
2013-11-01 9:46 ` [PATCHv3 01/19] [HACK] of: dev_node has struct device pointer Thierry Reding
[not found] ` <20131101094644.GG27864-AwZRO8vwLAwmlAP/+Wk3EA@public.gmane.org>
2013-11-01 9:59 ` Hiroshi Doyu
[not found] ` <20131101.115919.351108054879013006.hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-11-01 21:45 ` Stephen Warren
[not found] ` <527420EF.1070102-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2013-11-04 6:42 ` Hiroshi Doyu
2013-11-15 7:31 ` Grant Likely
2013-10-18 10:26 ` [PATCHv3 02/19] [HACK] ARM: tegra: Populate AHB/IOMMU earlier than others Hiroshi Doyu
[not found] ` <1382092020-13170-3-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-10-30 22:01 ` Stephen Warren
2013-10-18 10:26 ` [PATCHv3 05/19] ARM: dt: tegra114: iommu: Fix IOMMU register address Hiroshi Doyu
[not found] ` <1382092020-13170-6-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-10-30 22:07 ` Stephen Warren
[not found] ` <52718315.1040307-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2013-10-31 8:14 ` Hiroshi Doyu
2013-10-31 16:51 ` Mark Rutland
2013-10-31 17:05 ` Hiroshi Doyu
[not found] ` <20131031.190524.343708041257755667.hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-10-31 17:11 ` Hiroshi Doyu
[not found] ` <20131031.191126.1326472797634956722.hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-10-31 17:34 ` Mark Rutland
2013-10-18 10:26 ` [PATCHv3 10/19] iommu/tegra: smmu: Get "nvidia,swgroups" from DT Hiroshi Doyu
[not found] ` <1382092020-13170-11-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-10-24 8:58 ` Grant Likely
[not found] ` <20131024085811.A3F2CC4039D-WNowdnHR2B42iJbIjFUEsiwD8/FfD2ys@public.gmane.org>
2013-10-30 22:22 ` Stephen Warren
2013-10-30 22:33 ` Stephen Warren
[not found] ` <5271893C.6000507-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2013-10-31 8:17 ` Hiroshi Doyu
[not found] ` <20131031.101717.1419377840657413108.hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-11-01 16:54 ` Stephen Warren
[not found] ` <5273DCCD.2050901-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2013-11-04 6:59 ` Hiroshi Doyu
2013-10-31 17:31 ` Mark Rutland
2013-10-31 18:00 ` Will Deacon
[not found] ` <20131031180029.GB31082-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2013-11-01 7:41 ` Hiroshi Doyu
2013-11-01 7:27 ` Hiroshi Doyu
2013-10-31 17:15 ` Mark Rutland
2013-10-18 10:26 ` [PATCHv3 11/19] ARM: dt: tegra30: iommu: Add "nvidia,swgroups" Hiroshi Doyu
[not found] ` <1382092020-13170-12-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-10-30 22:35 ` Stephen Warren
2013-10-18 10:26 ` [PATCHv3 12/19] ARM: dt: tegra114: " Hiroshi Doyu
[not found] ` <1382092020-13170-13-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-10-31 16:46 ` Mark Rutland
2013-10-18 10:26 ` [PATCHv3 14/19] iommu/tegra: smmu: Get "nvidia,memory-clients" from DT Hiroshi Doyu
[not found] ` <1382092020-13170-15-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-10-24 9:01 ` Grant Likely
2013-10-30 22:44 ` Stephen Warren
[not found] ` <52718BB4.4090007-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2013-10-31 8:18 ` Hiroshi Doyu
[not found] ` <20131031.101808.1830527808656695540.hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-10-31 17:40 ` Mark Rutland
2013-10-31 18:02 ` Will Deacon
[not found] ` <20131031180212.GC31082-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2013-10-31 19:13 ` Stephen Warren
[not found] ` <5272ABBD.4050505-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2013-10-31 19:21 ` Will Deacon
2013-10-31 19:16 ` Stephen Warren
[not found] ` <5272AC82.6080205-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2013-10-31 19:25 ` Stephen Warren
[not found] ` <5272AEA5.7020200-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2013-10-31 19:39 ` Will Deacon
[not found] ` <20131031193941.GB31516-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2013-11-01 8:03 ` Hiroshi Doyu
2013-11-01 16:08 ` Stephen Warren
[not found] ` <5273D214.90106-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2013-11-01 16:34 ` Will Deacon
[not found] ` <20131101163404.GC2442-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org>
2013-11-01 17:05 ` Stephen Warren
[not found] ` <5273DF45.8050505-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2013-11-04 6:48 ` Hiroshi Doyu
2013-11-01 17:08 ` Stephen Warren
2013-11-01 7:54 ` Hiroshi Doyu
2013-11-01 7:46 ` Hiroshi Doyu
2013-10-31 19:17 ` Stephen Warren
2013-10-18 10:26 ` [PATCHv3 15/19] ARM: tegra: Create a DT header defining SWGROUP ID Hiroshi Doyu
[not found] ` <1382092020-13170-16-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-10-30 22:48 ` Stephen Warren
[not found] ` <52718CC6.5-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2013-10-31 8:19 ` Hiroshi Doyu
[not found] ` <20131031.101942.530833331841957251.hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-10-31 17:46 ` Mark Rutland
2013-10-31 19:18 ` Stephen Warren
2013-11-01 8:06 ` Hiroshi Doyu
[not found] ` <20131101100605.2a29eac5b5ba8719a0beb276-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-11-01 16:05 ` Stephen Warren
2013-10-18 10:26 ` [PATCHv3 17/19] ARM: dt: tegra30: iommu: Add "nvidia,memory-clients" Hiroshi Doyu
2013-10-18 10:26 ` [PATCHv3 18/19] ARM: dt: tegra114: iommu: Add "nvidia, memory-clients" Hiroshi Doyu
2013-10-30 16:34 ` [PATCHv3 00/19] Unifying SMMU driver among Tegra SoCs Hiroshi Doyu
[not found] ` <20131030.183454.2089418674186724494.hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-10-30 16:44 ` Stephen Warren
2013-10-30 22:19 ` Stephen Warren
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=20131025091104.GG19622@ulmo.nvidia.com \
--to=thierry.reding-re5jqeeqqe8avxtiumwx3w@public.gmane.org \
--cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=grant.likely-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
--cc=hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org \
--cc=iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
--cc=joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org \
--cc=linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=rob.herring-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org \
--cc=swarren-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;
as well as URLs for NNTP newsgroup(s).