Re: [U-Boot] [PATCH 1/3] dm: core: Add dev_read_bytes()

2019-04-16 Thread Thierry Reding
On Mon, Apr 15, 2019 at 09:21:45PM +, Joe Hershberger wrote:
> On Mon, Apr 15, 2019 at 4:11 AM Thierry Reding  
> wrote:
> >
> > From: Thierry Reding 
> >
> > This function can be used to read a binary property into a buffer. One
> > example where this is needed is to read a MAC address from device tree.
> >
> > Signed-off-by: Thierry Reding 
> 
> Is there a reason dev_read_u8_array_ptr is insuffient?

No, it's perfectly suitable, I just hadn't seen it.

Thierry


signature.asc
Description: PGP signature
___
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot


Re: [U-Boot] [PATCH 1/3] dm: core: Add dev_read_bytes()

2019-04-15 Thread Joe Hershberger
On Mon, Apr 15, 2019 at 4:11 AM Thierry Reding  wrote:
>
> From: Thierry Reding 
>
> This function can be used to read a binary property into a buffer. One
> example where this is needed is to read a MAC address from device tree.
>
> Signed-off-by: Thierry Reding 

Is there a reason dev_read_u8_array_ptr is insuffient?

Thanks,
-Joe
___
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot


[U-Boot] [PATCH 1/3] dm: core: Add dev_read_bytes()

2019-04-15 Thread Thierry Reding
From: Thierry Reding 

This function can be used to read a binary property into a buffer. One
example where this is needed is to read a MAC address from device tree.

Signed-off-by: Thierry Reding 
---
 drivers/core/of_access.c | 21 +
 drivers/core/ofnode.c| 13 +
 drivers/core/read.c  |  6 ++
 include/dm/of_access.h   | 15 +++
 include/dm/ofnode.h  | 11 +++
 include/dm/read.h| 17 +
 6 files changed, 83 insertions(+)

diff --git a/drivers/core/of_access.c b/drivers/core/of_access.c
index 945b81448cce..d110d171a3ea 100644
--- a/drivers/core/of_access.c
+++ b/drivers/core/of_access.c
@@ -446,6 +446,27 @@ static void *of_find_property_value_of_size(const struct 
device_node *np,
return prop->value;
 }
 
+int of_read_bytes(const struct device_node *np, const char *propname,
+ u8 *buffer, int size)
+{
+   const fdt32_t *value;
+
+   debug("%s: %s: ", __func__, propname);
+
+   if (!np)
+   return -EINVAL;
+
+   value = of_find_property_value_of_size(np, propname, size);
+   if (IS_ERR(value)) {
+   debug("(not found)\n");
+   return PTR_ERR(value);
+   }
+
+   memcpy(buffer, value, size);
+
+   return 0;
+}
+
 int of_read_u32(const struct device_node *np, const char *propname, u32 *outp)
 {
const __be32 *val;
diff --git a/drivers/core/ofnode.c b/drivers/core/ofnode.c
index 785f5c3acf7a..21b24e5aa00e 100644
--- a/drivers/core/ofnode.c
+++ b/drivers/core/ofnode.c
@@ -15,6 +15,19 @@
 #include 
 #include 
 
+int ofnode_read_bytes(ofnode node, const char *propname, u8 *buffer, int size)
+{
+   assert(ofnode_valid(node));
+   debug("%s: %s: ", __func__, propname);
+
+   if (ofnode_is_np(node))
+   return of_read_bytes(ofnode_to_np(node), propname, buffer,
+size);
+
+   return fdtdec_get_byte_array(gd->fdt_blob, ofnode_to_offset(node),
+propname, buffer, size);
+}
+
 int ofnode_read_u32(ofnode node, const char *propname, u32 *outp)
 {
assert(ofnode_valid(node));
diff --git a/drivers/core/read.c b/drivers/core/read.c
index 6bda077a34b9..9919ec19d4d8 100644
--- a/drivers/core/read.c
+++ b/drivers/core/read.c
@@ -11,6 +11,12 @@
 #include 
 #include 
 
+int dev_read_bytes(struct udevice *dev, const char *propname, u8 *buffer,
+  int size)
+{
+   return ofnode_read_bytes(dev_ofnode(dev), propname, buffer, size);
+}
+
 int dev_read_u32(struct udevice *dev, const char *propname, u32 *outp)
 {
return ofnode_read_u32(dev_ofnode(dev), propname, outp);
diff --git a/include/dm/of_access.h b/include/dm/of_access.h
index 13fedb7cf5e6..fc6a86959b23 100644
--- a/include/dm/of_access.h
+++ b/include/dm/of_access.h
@@ -218,6 +218,21 @@ struct device_node *of_find_node_by_prop_value(struct 
device_node *from,
  */
 struct device_node *of_find_node_by_phandle(phandle handle);
 
+/**
+ * of_read_bytes() - Find and read an array of bytes from a property
+ *
+ * Search for a property in a device node and read an array of bytes from it.
+ *
+ * @np: device node from which the property is to be read
+ * @propname: name of the property to be read
+ * @buffer: buffer to read the property value into
+ * @size: number of bytes to read
+ *
+ * @return 0 on success, or a negative error-code on failure.
+ */
+int of_read_bytes(const struct device_node *np, const char *propname,
+ u8 *buffer, int size);
+
 /**
  * of_read_u32() - Find and read a 32-bit integer from a property
  *
diff --git a/include/dm/ofnode.h b/include/dm/ofnode.h
index d206ee2caab7..5158296dfd96 100644
--- a/include/dm/ofnode.h
+++ b/include/dm/ofnode.h
@@ -192,6 +192,17 @@ static inline ofnode ofnode_null(void)
return node;
 }
 
+/**
+ * ofnode_read_bytes() - Read an array of bytes from a property
+ *
+ * @node: valid node reference to read property from
+ * @propname: name of the property to read from
+ * @buffer: buffer to read the value into
+ * @size: size of @buffer
+ * @return 0 on success, or a negative error code on failure
+ */
+int ofnode_read_bytes(ofnode node, const char *propname, u8 *buffer, int size);
+
 /**
  * ofnode_read_u32() - Read a 32-bit integer from a property
  *
diff --git a/include/dm/read.h b/include/dm/read.h
index 60b727cbd821..cb9776b39721 100644
--- a/include/dm/read.h
+++ b/include/dm/read.h
@@ -44,6 +44,18 @@ static inline bool dev_of_valid(struct udevice *dev)
 }
 
 #ifndef CONFIG_DM_DEV_READ_INLINE
+/**
+ * dev_read_bytes() - read an array of bytes from a device's DT property
+ *
+ * @dev: device to read DT property from
+ * @propname: name of the property to read from
+ * @buffer: buffer to read the value into
+ * @size: size of @buffer
+ * @return 0 on success, or a negative error code on failure
+ */
+int dev_read_bytes(struct udevice *dev, const char *propname, u8 *buffer,
+