On Mon, Feb 11, 2013 at 01:43:03PM -0600, Rob Herring wrote: > On 02/11/2013 02:22 AM, Thierry Reding wrote: > > From: Andrew Murray <andrew.mur...@arm.com> > > > > DT bindings for PCI host bridges often use the ranges property to describe > > memory and IO ranges - this binding tends to be the same across > > architectures > > yet several parsing implementations exist, e.g. arch/mips/pci/pci.c, > > arch/powerpc/kernel/pci-common.c, arch/sparc/kernel/pci.c and > > arch/microblaze/pci/pci-common.c (clone of PPC). Some of these duplicate > > functionality provided by drivers/of/address.c. > > > > This patch provides a common iterator-based parser for the ranges property, > > it > > is hoped this will reduce DT representation differences between > > architectures > > and that architectures will migrate in part to this new parser. > > > > It is also hoped (and the motativation for the patch) that this patch will > > reduce duplication of code when writing host bridge drivers that are > > supported > > by multiple architectures. > > > > This patch provides struct resources from a device tree node, e.g.: > > > > u32 *last = NULL; > > struct resource res; > > while ((last = of_pci_process_ranges(np, res, last))) { > > //do something with res > > } > > > > Platforms with quirks can then do what they like with the resource or > > migrate > > common quirk handling to the parser. In an ideal world drivers can just > > request > > the obtained resources and pass them on (e.g. pci_add_resource_offset). > > > > Signed-off-by: Andrew Murray <andrew.mur...@arm.com> > > Signed-off-by: Liviu Dudau <liviu.du...@arm.com> > > Signed-off-by: Thierry Reding <thierry.red...@avionic-design.de> > > --- > > drivers/of/address.c | 63 > > ++++++++++++++++++++++++++++++++++++++++++++++ > > include/linux/of_address.h | 9 +++++++ > > 2 files changed, 72 insertions(+) > > > > diff --git a/drivers/of/address.c b/drivers/of/address.c > > index 04da786..f607008 100644 > > --- a/drivers/of/address.c > > +++ b/drivers/of/address.c > > @@ -13,6 +13,7 @@ > > #define OF_CHECK_COUNTS(na, ns) (OF_CHECK_ADDR_COUNT(na) && (ns) > 0) > > > > static struct of_bus *of_match_bus(struct device_node *np); > > +static struct of_bus *of_find_bus(const char *name); > > Can you move this function up to avoid the forward declaration.
It needs to be defined after the of_busses structure, which is defined below the CONFIG_PCI block where of_pci_process_ranges() is defined. I'd have to move that one as well and add another #ifdef CONFIG_PCI section. If you prefer that I can do that. > > +static struct of_bus *of_find_bus(const char *name) > > +{ > > + unsigned int i; > > + > > + for (i = 0; i < ARRAY_SIZE(of_busses); i++) > > + if (strcmp(name, of_busses[i].name) == 0) > ^ > space needed. I don't understand. Do you want the space to go between '.' and "name"? Thierry
pgpP8z304cYNS.pgp
Description: PGP signature