diff mbox series

[2/5] fdtdec: introduce fdtdec_get_config_property

Message ID 20201110202603.20944-3-rasmus.villemoes@prevas.dk
State Superseded
Delegated to: Tom Rini
Headers show
Series allow default environment to be amended from dtb | expand

Commit Message

Rasmus Villemoes Nov. 10, 2020, 8:26 p.m. UTC
Add a wrapper for retrieving a given property from the /config node as
a (blob, length) pair. A later patch will need the length of the
property and thus cannot just use fdtdec_get_config_string(). Rewrite
that to use the new wrapper.

Signed-off-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk>
---
 include/fdtdec.h | 14 ++++++++++++++
 lib/fdtdec.c     | 27 +++++++++++++--------------
 2 files changed, 27 insertions(+), 14 deletions(-)

Comments

Simon Glass Nov. 16, 2020, 11:52 p.m. UTC | #1
Hi Rasmus,

On Tue, 10 Nov 2020 at 13:26, Rasmus Villemoes
<rasmus.villemoes@prevas.dk> wrote:
>
> Add a wrapper for retrieving a given property from the /config node as
> a (blob, length) pair. A later patch will need the length of the
> property and thus cannot just use fdtdec_get_config_string(). Rewrite
> that to use the new wrapper.
>
> Signed-off-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk>
> ---
>  include/fdtdec.h | 14 ++++++++++++++
>  lib/fdtdec.c     | 27 +++++++++++++--------------
>  2 files changed, 27 insertions(+), 14 deletions(-)
>

Reviewed-by: Simon Glass <sjg@chromium.org>

But please adjust the fdtdec_get_config_bool() to use your new function too.

Also fdtdec_get_config_prop() is a better name IMO because it is shorter.

> diff --git a/include/fdtdec.h b/include/fdtdec.h
> index a037f6ed9c..ff1453a100 100644
> --- a/include/fdtdec.h
> +++ b/include/fdtdec.h
> @@ -747,6 +747,20 @@ int fdtdec_get_bool(const void *blob, int node, const char *prop_name);
>   */
>  int fdtdec_get_child_count(const void *blob, int node);
>
> +/**
> + * Look in the FDT for a config item with the given name and a pointer
> + * to its value.
> + *
> + * @param blob          FDT blob
> + * @param prop_name     property name to look up
> + * @param lenp          if non-NULL and the property is found, *lenp is
> + *                      set to the length of the property value
> + *
> + * @returns property value, NULL on error.
> + */
> +const void *fdtdec_get_config_property(const void *blob, const char *prop_name,
> +               int *lenp);
> +
>  /**
>   * Look in the FDT for a config item with the given name and return its value
>   * as a 32-bit integer. The property must have at least 4 bytes of data. The
> diff --git a/lib/fdtdec.c b/lib/fdtdec.c
> index 25a71bc8f9..2442470af8 100644
> --- a/lib/fdtdec.c
> +++ b/lib/fdtdec.c
> @@ -853,6 +853,18 @@ const u8 *fdtdec_locate_byte_array(const void *blob, int node,
>         return cell;
>  }
>
> +const void *fdtdec_get_config_property(const void *blob, const char *prop_name,
> +                                      int *len)
> +{
> +       int config_node;
> +
> +       debug("%s: %s\n", __func__, prop_name);
> +       config_node = fdt_path_offset(blob, "/config");
> +       if (config_node < 0)
> +               return NULL;
> +       return fdt_getprop(blob, config_node, prop_name, len);
> +}
> +
>  int fdtdec_get_config_int(const void *blob, const char *prop_name,
>                           int default_val)
>  {
> @@ -881,20 +893,7 @@ int fdtdec_get_config_bool(const void *blob, const char *prop_name)
>
>  const char *fdtdec_get_config_string(const void *blob, const char *prop_name)
>  {
> -       const char *nodep;
> -       int nodeoffset;
> -       int len;
> -
> -       debug("%s: %s\n", __func__, prop_name);
> -       nodeoffset = fdt_path_offset(blob, "/config");
> -       if (nodeoffset < 0)
> -               return NULL;
> -
> -       nodep = fdt_getprop(blob, nodeoffset, prop_name, &len);
> -       if (!nodep)
> -               return NULL;
> -
> -       return nodep;
> +       return fdtdec_get_config_property(blob, prop_name, NULL);
>  }
>
>  u64 fdtdec_get_number(const fdt32_t *ptr, unsigned int cells)
> --
> 2.23.0
>

Regards,
Simon
diff mbox series

Patch

diff --git a/include/fdtdec.h b/include/fdtdec.h
index a037f6ed9c..ff1453a100 100644
--- a/include/fdtdec.h
+++ b/include/fdtdec.h
@@ -747,6 +747,20 @@  int fdtdec_get_bool(const void *blob, int node, const char *prop_name);
  */
 int fdtdec_get_child_count(const void *blob, int node);
 
+/**
+ * Look in the FDT for a config item with the given name and a pointer
+ * to its value.
+ *
+ * @param blob          FDT blob
+ * @param prop_name     property name to look up
+ * @param lenp          if non-NULL and the property is found, *lenp is
+ *                      set to the length of the property value
+ *
+ * @returns property value, NULL on error.
+ */
+const void *fdtdec_get_config_property(const void *blob, const char *prop_name,
+		int *lenp);
+
 /**
  * Look in the FDT for a config item with the given name and return its value
  * as a 32-bit integer. The property must have at least 4 bytes of data. The
diff --git a/lib/fdtdec.c b/lib/fdtdec.c
index 25a71bc8f9..2442470af8 100644
--- a/lib/fdtdec.c
+++ b/lib/fdtdec.c
@@ -853,6 +853,18 @@  const u8 *fdtdec_locate_byte_array(const void *blob, int node,
 	return cell;
 }
 
+const void *fdtdec_get_config_property(const void *blob, const char *prop_name,
+				       int *len)
+{
+	int config_node;
+
+	debug("%s: %s\n", __func__, prop_name);
+	config_node = fdt_path_offset(blob, "/config");
+	if (config_node < 0)
+		return NULL;
+	return fdt_getprop(blob, config_node, prop_name, len);
+}
+
 int fdtdec_get_config_int(const void *blob, const char *prop_name,
 			  int default_val)
 {
@@ -881,20 +893,7 @@  int fdtdec_get_config_bool(const void *blob, const char *prop_name)
 
 const char *fdtdec_get_config_string(const void *blob, const char *prop_name)
 {
-	const char *nodep;
-	int nodeoffset;
-	int len;
-
-	debug("%s: %s\n", __func__, prop_name);
-	nodeoffset = fdt_path_offset(blob, "/config");
-	if (nodeoffset < 0)
-		return NULL;
-
-	nodep = fdt_getprop(blob, nodeoffset, prop_name, &len);
-	if (!nodep)
-		return NULL;
-
-	return nodep;
+	return fdtdec_get_config_property(blob, prop_name, NULL);
 }
 
 u64 fdtdec_get_number(const fdt32_t *ptr, unsigned int cells)