OSDN Git Service

of/platform: fix device naming for non-translatable addresses
authorRob Herring <robh@kernel.org>
Wed, 7 May 2014 20:17:26 +0000 (15:17 -0500)
committerRob Herring <robh@kernel.org>
Tue, 13 May 2014 19:11:09 +0000 (14:11 -0500)
Using non-translatable addresses in platform device names is wrong
because they may not be globally unique. Just use the default naming with
a global index if the address cannot be translated instead.

of_can_translate_address has the same checks as of_translate_address, so
we can remove it here as well.

Reported-by: "Ivan T. Ivanov" <iivanov@mm-sol.com>
Cc: Josh Cartwright <joshc@codeaurora.org>
Cc: Courtney Cavin <courtney.cavin@sonymobile.com>
Cc: Bjorn Andersson <bjorn@kryo.se>
Cc: Grant Likely <grant.likely@linaro.org>
Signed-off-by: Rob Herring <robh@kernel.org>
Tested-by: Ivan T. Ivanov <iivanov@mm-sol.com>
Tested-by: Frank Rowand <frank.rowand@sonymobile.com>
Reviewed-by: Frank Rowand <frank.rowand@sonymobile.com>
drivers/of/platform.c

index bd47fbc..0602eb5 100644 (file)
@@ -78,7 +78,6 @@ void of_device_make_bus_id(struct device *dev)
        struct device_node *node = dev->of_node;
        const __be32 *reg;
        u64 addr;
-       const __be32 *addrp;
        int magic;
 
 #ifdef CONFIG_PPC_DCR
@@ -106,15 +105,7 @@ void of_device_make_bus_id(struct device *dev)
         */
        reg = of_get_property(node, "reg", NULL);
        if (reg) {
-               if (of_can_translate_address(node)) {
-                       addr = of_translate_address(node, reg);
-               } else {
-                       addrp = of_get_address(node, 0, NULL, NULL);
-                       if (addrp)
-                               addr = of_read_number(addrp, 1);
-                       else
-                               addr = OF_BAD_ADDR;
-               }
+               addr = of_translate_address(node, reg);
                if (addr != OF_BAD_ADDR) {
                        dev_set_name(dev, "%llx.%s",
                                     (unsigned long long)addr, node->name);