diff mbox

[v3,4/6] xen/device-tree: Make dt_match_node match props

Message ID 1473231377-7800-5-git-send-email-edgar.iglesias@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Edgar E. Iglesias Sept. 7, 2016, 6:56 a.m. UTC
From: "Edgar E. Iglesias" <edgar.iglesias@xilinx.com>

Make dt_match_node match for existing properties.
We only search for the existence of the properties, not
for specific values.

Signed-off-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
---
 xen/common/device_tree.c      | 5 ++++-
 xen/include/xen/device_tree.h | 7 +++++++
 2 files changed, 11 insertions(+), 1 deletion(-)

Comments

Julien Grall Sept. 16, 2016, 2:28 p.m. UTC | #1
Hi Edgar,

On 07/09/2016 08:56, Edgar E. Iglesias wrote:
> From: "Edgar E. Iglesias" <edgar.iglesias@xilinx.com>
>
> Make dt_match_node match for existing properties.
> We only search for the existence of the properties, not
> for specific values.
>
> Signed-off-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
> ---
>  xen/common/device_tree.c      | 5 ++++-
>  xen/include/xen/device_tree.h | 7 +++++++
>  2 files changed, 11 insertions(+), 1 deletion(-)
>
> diff --git a/xen/common/device_tree.c b/xen/common/device_tree.c
> index b39c8ca..1be074b 100644
> --- a/xen/common/device_tree.c
> +++ b/xen/common/device_tree.c
> @@ -319,7 +319,7 @@ dt_match_node(const struct dt_device_match *matches,
>          return NULL;
>
>      while ( matches->path || matches->type ||
> -            matches->compatible || matches->not_available )
> +            matches->compatible || matches->not_available || matches->prop)
>      {
>          bool_t match = 1;
>
> @@ -335,6 +335,9 @@ dt_match_node(const struct dt_device_match *matches,
>          if ( matches->not_available )
>              match &= !dt_device_is_available(node);
>
> +        if ( matches->prop )
> +            match &= dt_find_property(node, matches->prop, NULL) != NULL;
> +
>          if ( match )
>              return matches;
>          matches++;
> diff --git a/xen/include/xen/device_tree.h b/xen/include/xen/device_tree.h
> index da153a5..c71ddb9 100644
> --- a/xen/include/xen/device_tree.h
> +++ b/xen/include/xen/device_tree.h
> @@ -29,6 +29,11 @@ struct dt_device_match {
>      const char *type;
>      const char *compatible;
>      const bool_t not_available;
> +    /*
> +     * Property name to search for. We only search for the properties

NIT: s/the properties/the property/ I think same.
I think this also apply for the commit message?

The rest of the patch looks good to me:

Acked-by: Julien Grall <julien.grall@arm.com>

Regards,

> +     * existence.
> +     */
> +    const char *prop;
>      const void *data;
>  };
>
> @@ -36,11 +41,13 @@ struct dt_device_match {
>  #define __DT_MATCH_TYPE(typ)            .type = typ
>  #define __DT_MATCH_COMPATIBLE(compat)   .compatible = compat
>  #define __DT_MATCH_NOT_AVAILABLE()      .not_available = 1
> +#define __DT_MATCH_PROP(p)              .prop = p
>
>  #define DT_MATCH_PATH(p)                { __DT_MATCH_PATH(p) }
>  #define DT_MATCH_TYPE(typ)              { __DT_MATCH_TYPE(typ) }
>  #define DT_MATCH_COMPATIBLE(compat)     { __DT_MATCH_COMPATIBLE(compat) }
>  #define DT_MATCH_NOT_AVAILABLE()        { __DT_MATCH_NOT_AVAILABLE() }
> +#define DT_MATCH_PROP(p)                { __DT_MATCH_PROP(p) }
>
>  typedef u32 dt_phandle;
>
>
Edgar E. Iglesias Sept. 16, 2016, 3:47 p.m. UTC | #2
On Fri, Sep 16, 2016 at 04:28:20PM +0200, Julien Grall wrote:
> Hi Edgar,
> 
> On 07/09/2016 08:56, Edgar E. Iglesias wrote:
> >From: "Edgar E. Iglesias" <edgar.iglesias@xilinx.com>
> >
> >Make dt_match_node match for existing properties.
> >We only search for the existence of the properties, not
> >for specific values.
> >
> >Signed-off-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
> >---
> > xen/common/device_tree.c      | 5 ++++-
> > xen/include/xen/device_tree.h | 7 +++++++
> > 2 files changed, 11 insertions(+), 1 deletion(-)
> >
> >diff --git a/xen/common/device_tree.c b/xen/common/device_tree.c
> >index b39c8ca..1be074b 100644
> >--- a/xen/common/device_tree.c
> >+++ b/xen/common/device_tree.c
> >@@ -319,7 +319,7 @@ dt_match_node(const struct dt_device_match *matches,
> >         return NULL;
> >
> >     while ( matches->path || matches->type ||
> >-            matches->compatible || matches->not_available )
> >+            matches->compatible || matches->not_available || matches->prop)
> >     {
> >         bool_t match = 1;
> >
> >@@ -335,6 +335,9 @@ dt_match_node(const struct dt_device_match *matches,
> >         if ( matches->not_available )
> >             match &= !dt_device_is_available(node);
> >
> >+        if ( matches->prop )
> >+            match &= dt_find_property(node, matches->prop, NULL) != NULL;
> >+
> >         if ( match )
> >             return matches;
> >         matches++;
> >diff --git a/xen/include/xen/device_tree.h b/xen/include/xen/device_tree.h
> >index da153a5..c71ddb9 100644
> >--- a/xen/include/xen/device_tree.h
> >+++ b/xen/include/xen/device_tree.h
> >@@ -29,6 +29,11 @@ struct dt_device_match {
> >     const char *type;
> >     const char *compatible;
> >     const bool_t not_available;
> >+    /*
> >+     * Property name to search for. We only search for the properties
> 
> NIT: s/the properties/the property/ I think same.
> I think this also apply for the commit message?

OK, I've changed the commit message to:
xen/device-tree: Make dt_match_node match props

Make dt_match_node match for a single existing property.
We only search for the existence of the property, not
for specific values.

And I've changed the comment to say "the property's existence"
which I think is correct but I'm not a native English speaker..

Cheers,
Edgar

> 
> The rest of the patch looks good to me:
> 
> Acked-by: Julien Grall <julien.grall@arm.com>
> 
> Regards,
> 
> >+     * existence.
> >+     */
> >+    const char *prop;
> >     const void *data;
> > };
> >
> >@@ -36,11 +41,13 @@ struct dt_device_match {
> > #define __DT_MATCH_TYPE(typ)            .type = typ
> > #define __DT_MATCH_COMPATIBLE(compat)   .compatible = compat
> > #define __DT_MATCH_NOT_AVAILABLE()      .not_available = 1
> >+#define __DT_MATCH_PROP(p)              .prop = p
> >
> > #define DT_MATCH_PATH(p)                { __DT_MATCH_PATH(p) }
> > #define DT_MATCH_TYPE(typ)              { __DT_MATCH_TYPE(typ) }
> > #define DT_MATCH_COMPATIBLE(compat)     { __DT_MATCH_COMPATIBLE(compat) }
> > #define DT_MATCH_NOT_AVAILABLE()        { __DT_MATCH_NOT_AVAILABLE() }
> >+#define DT_MATCH_PROP(p)                { __DT_MATCH_PROP(p) }
> >
> > typedef u32 dt_phandle;
> >
> >
> 
> -- 
> Julien Grall
diff mbox

Patch

diff --git a/xen/common/device_tree.c b/xen/common/device_tree.c
index b39c8ca..1be074b 100644
--- a/xen/common/device_tree.c
+++ b/xen/common/device_tree.c
@@ -319,7 +319,7 @@  dt_match_node(const struct dt_device_match *matches,
         return NULL;
 
     while ( matches->path || matches->type ||
-            matches->compatible || matches->not_available )
+            matches->compatible || matches->not_available || matches->prop)
     {
         bool_t match = 1;
 
@@ -335,6 +335,9 @@  dt_match_node(const struct dt_device_match *matches,
         if ( matches->not_available )
             match &= !dt_device_is_available(node);
 
+        if ( matches->prop )
+            match &= dt_find_property(node, matches->prop, NULL) != NULL;
+
         if ( match )
             return matches;
         matches++;
diff --git a/xen/include/xen/device_tree.h b/xen/include/xen/device_tree.h
index da153a5..c71ddb9 100644
--- a/xen/include/xen/device_tree.h
+++ b/xen/include/xen/device_tree.h
@@ -29,6 +29,11 @@  struct dt_device_match {
     const char *type;
     const char *compatible;
     const bool_t not_available;
+    /*
+     * Property name to search for. We only search for the properties
+     * existence.
+     */
+    const char *prop;
     const void *data;
 };
 
@@ -36,11 +41,13 @@  struct dt_device_match {
 #define __DT_MATCH_TYPE(typ)            .type = typ
 #define __DT_MATCH_COMPATIBLE(compat)   .compatible = compat
 #define __DT_MATCH_NOT_AVAILABLE()      .not_available = 1
+#define __DT_MATCH_PROP(p)              .prop = p
 
 #define DT_MATCH_PATH(p)                { __DT_MATCH_PATH(p) }
 #define DT_MATCH_TYPE(typ)              { __DT_MATCH_TYPE(typ) }
 #define DT_MATCH_COMPATIBLE(compat)     { __DT_MATCH_COMPATIBLE(compat) }
 #define DT_MATCH_NOT_AVAILABLE()        { __DT_MATCH_NOT_AVAILABLE() }
+#define DT_MATCH_PROP(p)                { __DT_MATCH_PROP(p) }
 
 typedef u32 dt_phandle;