devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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 12:49:38 +0200	[thread overview]
Message-ID: <20131025104937.GA25080@ulmo.nvidia.com> (raw)
In-Reply-To: <20131025.124905.1154427805530939055.hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>

[-- Attachment #1: Type: text/plain, Size: 4560 bytes --]

On Fri, Oct 25, 2013 at 11:49:05AM +0200, Hiroshi Doyu wrote:
> Thierry Reding <thierry.reding-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote @ Fri, 25 Oct 2013 11:11:05 +0200:
> 
> > > > 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.
> 
> I understand the above limitation. What I thought for the solution is
> that I can make use of iommu_bus even before IOMMU is
> instanciated. iommu_bus has its notifier which calls
> iommu_ops()->add_device(). This could return -EPROBE_DEFER when IOMMU
> isn't ready. Only the problem is the current "bus_notifier" doesn't
> have the ability to return error. I'll see if it can be modified. Even
> with this, at least IOMMU *driver* needs to be init'ed enough earlier
> to prevent devices from being registered without IOMMU.

The way notifiers work is that they run completely hidden from whatever
triggers them. For instance you register the IOMMU bus notifier from the
IOMMU driver (by calling bus_set_iommu()). That registers a function to
be called when some event happens on that bus. When a device's driver is
probed successfully, the driver core will notify the bus, which causes
the IOMMU callback to be run.

Some of this code runs before the driver has successfully been probed,
so I imagine it would be possible to use it to abort probing. But that's
not possible at least with the current code.

> > 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.
> 
> This looks somewhat similar to the above iommu_bus notifier.
> 
> Is there any way to implement the same mechanism rather than using
> bus?

Yes, I think it should be possible to get this to work without using the
bus notifier at all. I can try to code something up but wanted to wait
for feedback from Grant first.

Thierry

[-- Attachment #2: Type: application/pgp-signature, Size: 836 bytes --]

  parent reply	other threads:[~2013-10-25 10:49 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
     [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 [this message]
     [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=20131025104937.GA25080@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).