Message ID | 1558460254-7127-2-git-send-email-olekstysh@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Add ability to handle nodes with interrupts-extended property | expand |
Hi Oleksandr, On 21/05/2019 18:37, Oleksandr Tyshchenko wrote: > From: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com> > > Port Linux helper of_count_phandle_with_args for counting > number of phandles in a property. > > Please note, this helper is ported from Linux v4.6. > > Signed-off-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com> Acked-by: Julien Grall <julien.grall@arm.com> Cheers, > > --- > Changes RFC -> V1: > - Add Linux version which is used as the base. > --- > xen/common/device_tree.c | 7 +++++++ > xen/include/xen/device_tree.h | 19 +++++++++++++++++++ > 2 files changed, 26 insertions(+) > > diff --git a/xen/common/device_tree.c b/xen/common/device_tree.c > index 8fc401d..65862b5 100644 > --- a/xen/common/device_tree.c > +++ b/xen/common/device_tree.c > @@ -1663,6 +1663,13 @@ int dt_parse_phandle_with_args(const struct dt_device_node *np, > index, out_args); > } > > +int dt_count_phandle_with_args(const struct dt_device_node *np, > + const char *list_name, > + const char *cells_name) > +{ > + return __dt_parse_phandle_with_args(np, list_name, cells_name, 0, -1, NULL); > +} > + > /** > * unflatten_dt_node - Alloc and populate a device_node from the flat tree > * @fdt: The parent device tree blob > diff --git a/xen/include/xen/device_tree.h b/xen/include/xen/device_tree.h > index 7408a6c..8315629 100644 > --- a/xen/include/xen/device_tree.h > +++ b/xen/include/xen/device_tree.h > @@ -738,6 +738,25 @@ int dt_parse_phandle_with_args(const struct dt_device_node *np, > const char *cells_name, int index, > struct dt_phandle_args *out_args); > > +/** > + * dt_count_phandle_with_args() - Find the number of phandles references in a property > + * @np: pointer to a device tree node containing a list > + * @list_name: property name that contains a list > + * @cells_name: property name that specifies phandles' arguments count > + * > + * Returns the number of phandle + argument tuples within a property. It > + * is a typical pattern to encode a list of phandle and variable > + * arguments into a single property. The number of arguments is encoded > + * by a property in the phandle-target node. For example, a gpios > + * property would contain a list of GPIO specifies consisting of a > + * phandle and 1 or more arguments. The number of arguments are > + * determined by the #gpio-cells property in the node pointed to by the > + * phandle. > + */ > +int dt_count_phandle_with_args(const struct dt_device_node *np, > + const char *list_name, > + const char *cells_name); > + > #ifdef CONFIG_DEVICE_TREE_DEBUG > #define dt_dprintk(fmt, args...) \ > printk(XENLOG_DEBUG fmt, ## args) >
diff --git a/xen/common/device_tree.c b/xen/common/device_tree.c index 8fc401d..65862b5 100644 --- a/xen/common/device_tree.c +++ b/xen/common/device_tree.c @@ -1663,6 +1663,13 @@ int dt_parse_phandle_with_args(const struct dt_device_node *np, index, out_args); } +int dt_count_phandle_with_args(const struct dt_device_node *np, + const char *list_name, + const char *cells_name) +{ + return __dt_parse_phandle_with_args(np, list_name, cells_name, 0, -1, NULL); +} + /** * unflatten_dt_node - Alloc and populate a device_node from the flat tree * @fdt: The parent device tree blob diff --git a/xen/include/xen/device_tree.h b/xen/include/xen/device_tree.h index 7408a6c..8315629 100644 --- a/xen/include/xen/device_tree.h +++ b/xen/include/xen/device_tree.h @@ -738,6 +738,25 @@ int dt_parse_phandle_with_args(const struct dt_device_node *np, const char *cells_name, int index, struct dt_phandle_args *out_args); +/** + * dt_count_phandle_with_args() - Find the number of phandles references in a property + * @np: pointer to a device tree node containing a list + * @list_name: property name that contains a list + * @cells_name: property name that specifies phandles' arguments count + * + * Returns the number of phandle + argument tuples within a property. It + * is a typical pattern to encode a list of phandle and variable + * arguments into a single property. The number of arguments is encoded + * by a property in the phandle-target node. For example, a gpios + * property would contain a list of GPIO specifies consisting of a + * phandle and 1 or more arguments. The number of arguments are + * determined by the #gpio-cells property in the node pointed to by the + * phandle. + */ +int dt_count_phandle_with_args(const struct dt_device_node *np, + const char *list_name, + const char *cells_name); + #ifdef CONFIG_DEVICE_TREE_DEBUG #define dt_dprintk(fmt, args...) \ printk(XENLOG_DEBUG fmt, ## args)