From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stephen Warren Date: Fri, 29 Apr 2016 10:23:35 -0600 Subject: [U-Boot] [RFC PATCH] dm: ensure device names are unique In-Reply-To: References: <1461706228-3092-1-git-send-email-swarren@wwwdotorg.org> <57223274.6010104@wwwdotorg.org> Message-ID: <57238A87.5070603@wwwdotorg.org> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On 04/29/2016 07:23 AM, Simon Glass wrote: > Hi Stephen, > > On 28 April 2016 at 09:55, Stephen Warren wrote: >> On 04/27/2016 10:50 PM, Simon Glass wrote: >>> >>> Hi Stephen, >>> >>> On 26 April 2016 at 15:30, Stephen Warren wrote: >>> > 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 > >>> >>> I would rather that the caller handles this. But failing this perhaps a >>> new function that does it? Is this for the Ethernet use case? >> >> >> Wouldn't all callers of this function simply call the new function? I'm not >> aware of any case where the code to avoid duplicate names would not be >> desired. >> >> I hit this for the Ethernet case, but I believe it applies to any type of >> device at all; see another possible trigger case in the commit description. > > This does not happen with devices from the device tree. It only > happens with auto-probed devices. Your I2C GPIO example is odd but I'd > rather solve that by using the device tree node name. DT itself imposes no such rule; node names must be unique only within their parent node but there's no restriction on identical node names appearing in different parts of the tree. If U-Boot imposes that rule on DT, then there's no way in general that we can guarantee U-Boot will be able to use standard DTs (i.e. identical to those used by Linux or any other OS) for any platform; it'd be another change someone would need to make to transform a DT to be "U-Boot compatible", which rather reduces a potential benefit of DT for U-Boot; being able to just drop a DT in and have it work. It would be possible for U-Boot to decouple its internal device name from the DT node name. In which case, your statement would work. However, I don't think that's the case at the moment, and in fact it's effectively what this patch is doing, although admittedly there are other ways of doing this.