Thread (1 message) 1 message, 1 author, 2014-05-22

Re: [RFC/PATCH] of: platform: Remove unique device name enforcement

From: Rob Herring <hidden>
Date: 2014-05-22 18:31:37

On Wed, May 21, 2014 at 2:43 AM, Grant Likely [off-list ref] wrote:
On Wed, 21 May 2014 09:53:57 +0900, Grant Likely [off-list ref] wrote:
quoted
On Tue, 20 May 2014 13:30:02 -0500, Rob Herring [off-list ref] wrote:
quoted
On Tue, May 20, 2014 at 1:50 AM, Grant Likely [off-list ref] wrote:
[...]
quoted
quoted
quoted
Another way to handle it is to only add the suffix when a conflict
actually occurs. That requires checking first whether or not a name will
conflict and ammending it only when that happens. I don't know if that
can be done nicely. I'll take a look.
That was my idea as well and to move to a local number so you have
something like deviceA, deviceA.1, deviceB, deviceB.1 (maybe the
number is always appended). Perhaps a random number instead so no one
expects the names to be an ABI. ;)
Another idea: how about fix the name to alwasy be the final component of
the path name, followed by phandle. Anything that doesn't have a phandle
can be assigned one at boot. That would guarantee uniqueness without the
cost of trying to find duplicates.

for example:
      uart@10043000:0012
Yet another approach. How about this patch? If the unit address cannot
be translated, then append the translated name of the parent.
I Ilke this, but...
quoted hunk
diff --git a/drivers/of/platform.c b/drivers/of/platform.c
index 9c121819e813..e74fccbeb177 100644
--- a/drivers/of/platform.c
+++ b/drivers/of/platform.c
@@ -74,12 +74,9 @@ EXPORT_SYMBOL(of_find_device_by_node);
  */
 void of_device_make_bus_id(struct device *dev)
 {
-       static atomic_t bus_no_reg_magic;
        struct device_node *node = dev->of_node;
        const __be32 *reg;
        u64 addr;
-       const __be32 *addrp;
-       int magic;

 #ifdef CONFIG_PPC_DCR
        /*
@@ -101,33 +98,26 @@ void of_device_make_bus_id(struct device *dev)
        }
 #endif /* CONFIG_PPC_DCR */

-       /*
-        * For MMIO, get the physical address
-        */
-       reg = of_get_property(node, "reg", NULL);
-       if (reg) {
-               if (of_can_translate_address(node)) {
+       /* Construct the name, using parent nodes if necessary to ensure uniqueness */
+       while (node->parent) {
+               /*
+                * If the address can be translated, then that is as much
+                * uniqueness as we need. Make it the first component and return
+                */
+               reg = of_get_property(node, "reg", NULL);
+               if (reg && of_can_translate_address(node)) {
                        addr = of_translate_address(node, reg);
This needs to be rebased on my fix and killing off of of_can_translate_address.

Rob
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help