public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Stephen Warren <swarren@wwwdotorg.org>
To: u-boot@lists.denx.de
Subject: [U-Boot] [RFC PATCH] dm: ensure device names are unique
Date: Thu, 28 Apr 2016 10:00:13 -0600	[thread overview]
Message-ID: <5722338D.7080805@wwwdotorg.org> (raw)
In-Reply-To: <CANr=Z=Zi-Bpjd6+A=WPMOeRxrtwXSf0y50xMgy1z3Jyk=vFJig@mail.gmail.com>

On 04/27/2016 10:42 PM, Joe Hershberger wrote:
> On Tue, Apr 26, 2016 at 4:30 PM, Stephen Warren <swarren@wwwdotorg.org> wrote:
>> From: Stephen Warren <swarren@nvidia.com>
>>
>> It is possible for HW to contain multiple instances of the same device. In
>> this case, the name passed to device_bind() may not be unique across all
>> devices within its uclass. One example is a system with multiple identical
>> PCI Ethernet devices. Another might be a system with multiple identical
>> I2C GPIO expanders, each connected to a separate I2C bus, yet using the
>> same I2C address on that bus and hence having the same DT node name.
>>
>> Enhance the code to detect this situation, and append a sequence number so
>> the device name to ensure uniqueness.
>>
>> Signed-off-by: Stephen Warren <swarren@nvidia.com>
>> ---
>> Some possible issues with this patch:
>>
>> 1) Doing this in bind() rather than probe() means dev->seq isn't
>> available, so can't be used to generate the unique name. This process
>> should be done during bind() rather than probe() though, since devices can
>> be seen (e.g. by running "dm tree") before they're probed. Perhaps the
>> uclass_resolve_seq() should be called by bind() not probe().
>
> We (Simon and I) had discussion about this when I first added support
> for eth devices. He convinced me the correct time for seq to be
> evaluated is at probe time. I can dig through the mail history for
> reasons if you're interested.

That might be interesting. Right now, about the only thing I see moving 
the evaluation from probe to bind would do is very marginally increase 
the amount of work done in bind, which potentially might be skipped if a 
particular Ethernet device was never probed. I would not expect this to 
make a noticeable difference, especially since IIRC when the network is 
first used, all the Ethernet devices are probed anyway, so this just 
moves work around?

>> 2) uclass_find_device_by_name() needs to look up the uclass pointer again
>> even though device_bind() already knows it.
>
> Maybe we could add a parameter to provide the pointer and if it's
> NULL, then it gets looked up. Might be a bit noisy change, though. Is
> that optimization very valuable?

I don't imagine there are too many uclasses, so it's probably not going 
to save too much time. Still, Simon has in the past objected to code 
that parses DT scanning the DT to find parent offsets, and this feels 
like exactly the same kind of thing. I'm not personally concerned about 
it; simply pointing it out in case anyone wanted that to be addressed.

>> 3) Iterating over the list to find the count of devices in the uclass is a
>> bit annoying. Should the uclass maintain this count so it doesn't need to
>> be re-calculated each time?
>
> These lists aren't long, right? It seems like the optimization to
> store the value is only helpful if the lists could be expected to be
> long, or the size is looked up many times.

Yes, I don't imagine this would be a particular issue in practice.

  reply	other threads:[~2016-04-28 16:00 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-04-26 21:30 [U-Boot] [RFC PATCH] dm: ensure device names are unique Stephen Warren
2016-04-26 21:36 ` Stephen Warren
2016-04-27 18:40   ` Stephen Warren
2016-04-28  4:44     ` Joe Hershberger
2016-04-28  4:42 ` Joe Hershberger
2016-04-28 16:00   ` Stephen Warren [this message]
2016-04-29 13:24     ` Simon Glass
2016-04-28  4:50 ` Simon Glass
2016-04-28 15:55   ` Stephen Warren
2016-04-29 13:23     ` Simon Glass
2016-04-29 16:23       ` Stephen Warren
2016-04-29 16:28         ` Simon Glass
2016-04-29 16:30           ` Stephen Warren
2016-04-29 17:22             ` Simon Glass

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=5722338D.7080805@wwwdotorg.org \
    --to=swarren@wwwdotorg.org \
    --cc=u-boot@lists.denx.de \
    /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