On Tue, Jun 3, 2014 at 10:59 AM, Arnd Bergmann <arnd@xxxxxxxx> wrote: > On Tuesday 03 June 2014 10:40:34 Rob Herring wrote: >> > diff --git a/include/linux/of.h b/include/linux/of.h >> > index 196b34c..7c29e6c 100644 >> > --- a/include/linux/of.h >> > +++ b/include/linux/of.h >> > @@ -511,6 +511,9 @@ static inline struct device_node *of_get_cpu_node(int cpu, >> > return NULL; >> > } >> > >> > +static inline int of_n_addr_cells(struct device_node *np) { return 0; } >> > +static inline int of_n_size_cells(struct device_node *np) { return 0; } >> >> I'm fine with the rest, but I think these should always be used within >> some higher level function. > > Can you apply the rest already? Yes, sure. > >> I can't seem to find where this is used by rcar. BTW, why does rcar >> pci DT support fail to have any ranges property? >> >> Looking at one use in mvebu pci only confirms my position. An >> of_for_each_ranges helper would be useful in that case. > > It's currently in the pci-next, the code using this looks like > > +static int pci_dma_range_parser_init(struct of_pci_range_parser *parser, > + struct device_node *node) > +{ > + const int na = 3, ns = 2; > + int rlen; > + > + parser->node = node; > + parser->pna = of_n_addr_cells(node); > + parser->np = parser->pna + na + ns; > + > + parser->range = of_get_property(node, "dma-ranges", &rlen); > + if (!parser->range) > + return -ENOENT; > + > + parser->end = parser->range + rlen / sizeof(__be32); > + return 0; > +} > + > +static int rcar_pcie_parse_map_dma_ranges(struct rcar_pcie *pcie, > + struct device_node *np) > +{ > + struct of_pci_range range; > + struct of_pci_range_parser parser; > + int index = 0; > + int err; > + > + if (pci_dma_range_parser_init(&parser, np)) > + return -EINVAL; > + > + /* Get the dma-ranges from DT */ > + for_each_of_pci_range(&parser, &range) { > + u64 end = range.cpu_addr + range.size - 1; > + dev_dbg(pcie->dev, "0x%08x 0x%016llx..0x%016llx -> 0x%016llx\n", > + range.flags, range.cpu_addr, end, range.pci_addr); > + > + err = rcar_pcie_inbound_ranges(pcie, &range, &index); > + if (err) > + return err; > + } > + > + return 0; > +} > > Should the first function just be moved into of-pci.c? Yes, and probably some refactoring with the "ranges" version of it too. Rob -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html