On Fri, Sep 30, 2022 at 05:08:44PM +0800, Yang Yingliang wrote: > Introduce of_address_count() helper to count the IO resources > instead of open-coding it. > > Signed-off-by: Yang Yingliang <yangyingliang@xxxxxxxxxx> > --- > drivers/of/address.c | 11 +++++++++++ > include/linux/of_address.h | 7 +++++++ > 2 files changed, 18 insertions(+) > > diff --git a/drivers/of/address.c b/drivers/of/address.c > index 96f0a12e507c..e32846a9a8d5 100644 > --- a/drivers/of/address.c > +++ b/drivers/of/address.c > @@ -848,6 +848,17 @@ int of_address_to_resource(struct device_node *dev, int index, > } > EXPORT_SYMBOL_GPL(of_address_to_resource); > > +int of_address_count(struct device_node *np) > +{ > + struct resource res; > + int count = 0; > + > + while (of_address_to_resource(np, count, &res) == 0) > + count++; > + > + return count; > +} EXPORT? However, I'd just make this always inline instead. > + > /** > * of_iomap - Maps the memory mapped IO for a given device_node > * @np: the device whose io range will be mapped > diff --git a/include/linux/of_address.h b/include/linux/of_address.h > index 45598dbec269..63027e8f3397 100644 > --- a/include/linux/of_address.h > +++ b/include/linux/of_address.h > @@ -43,6 +43,7 @@ extern u64 of_translate_dma_address(struct device_node *dev, > extern u64 of_translate_address(struct device_node *np, const __be32 *addr); > extern int of_address_to_resource(struct device_node *dev, int index, > struct resource *r); > +extern int of_address_count(struct device_node *np); > extern void __iomem *of_iomap(struct device_node *device, int index); > void __iomem *of_io_request_and_map(struct device_node *device, > int index, const char *name); > @@ -127,6 +128,7 @@ static inline bool of_dma_is_coherent(struct device_node *np) > #ifdef CONFIG_OF > extern int of_address_to_resource(struct device_node *dev, int index, > struct resource *r); > +extern int of_address_count(struct device_node *np); I'm pretty sure Sparc build is going to break. Sparc has its own implementation of of_address_to_resource(). > void __iomem *of_iomap(struct device_node *node, int index); > #else > static inline int of_address_to_resource(struct device_node *dev, int index, > @@ -139,6 +141,11 @@ static inline void __iomem *of_iomap(struct device_node *device, int index) > { > return NULL; > } > + > +static inline int of_address_count(struct device_node *np) > +{ > + return 0; > +} > #endif > #define of_range_parser_init of_pci_range_parser_init > > -- > 2.25.1 > >