diff --git a/drivers/of/address.c b/drivers/of/address.c index 3e5387a67..4cacdb1cf 100644 --- a/drivers/of/address.c +++ b/drivers/of/address.c @@ -278,6 +278,12 @@ static u64 __of_translate_address(struct device_node *dev, return result; } +u64 of_translate_address(struct device_node *dev, const __be32 *in_addr) +{ + return __of_translate_address(dev, in_addr, "ranges"); +} +EXPORT_SYMBOL(of_translate_address); + u64 of_translate_dma_address(struct device_node *dev, const __be32 *in_addr) { return __of_translate_address(dev, in_addr, "dma-ranges"); diff --git a/drivers/of/base.c b/drivers/of/base.c index 63ff6478f..277823039 100644 --- a/drivers/of/base.c +++ b/drivers/of/base.c @@ -19,6 +19,7 @@ */ #include #include +#include #include #include #include @@ -242,31 +243,6 @@ const char *of_alias_get(struct device_node *np) } EXPORT_SYMBOL_GPL(of_alias_get); -u64 of_translate_address(struct device_node *node, const __be32 *in_addr) -{ - struct property *p; - u64 addr = be32_to_cpu(*in_addr); - - while (1) { - int na, nc; - - if (!node->parent) - return addr; - - node = node->parent; - p = of_find_property(node, "ranges", NULL); - if (!p && node->parent) - return OF_BAD_ADDR; - of_bus_count_cells(node, &na, &nc); - if (na != 1 || nc != 1) { - printk("%s: #size-cells != 1 or #address-cells != 1 " - "currently not supported\n", node->name); - return OF_BAD_ADDR; - } - } -} -EXPORT_SYMBOL(of_translate_address); - /* * of_find_node_by_phandle - Find a node given a phandle * @handle: phandle of the node to find diff --git a/include/of.h b/include/of.h index b392ca9da..e0913265b 100644 --- a/include/of.h +++ b/include/of.h @@ -101,8 +101,6 @@ int of_get_named_gpio(struct device_node *np, void of_print_property(const void *data, int len); void of_print_cmdline(struct device_node *root); -u64 of_translate_address(struct device_node *node, const __be32 *in_addr); - #define OF_ROOT_NODE_SIZE_CELLS_DEFAULT 1 #define OF_ROOT_NODE_ADDR_CELLS_DEFAULT 1 diff --git a/include/of_address.h b/include/of_address.h index a82e2e57b..9022ab7ca 100644 --- a/include/of_address.h +++ b/include/of_address.h @@ -10,6 +10,8 @@ static inline unsigned long pci_address_to_pio(phys_addr_t addr) { return -1; } #ifdef CONFIG_OFTREE +extern u64 of_translate_address(struct device_node *dev, + const __be32 *in_addr); extern u64 of_translate_dma_address(struct device_node *dev, const __be32 *in_addr); extern bool of_can_translate_address(struct device_node *dev); @@ -24,6 +26,12 @@ extern void __iomem *of_iomap(struct device_node *np, int index); #else /* CONFIG_OFTREE */ +static inline u64 of_translate_address(struct device_node *dev, + const __be32 *in_addr) +{ + return OF_BAD_ADDR; +} + static inline u64 of_translate_dma_address(struct device_node *dev, const __be32 *in_addr) {