All of lore.kernel.org
 help / color / mirror / Atom feed
From: heiko@sntech.de (Heiko Stübner)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] of: add function to count number of u32 elements in a property
Date: Thu, 16 Jan 2014 19:04:42 +0100	[thread overview]
Message-ID: <3781679.27UF2dWtKL@phil> (raw)
In-Reply-To: <20140116124527.GD19578@e106331-lin.cambridge.arm.com>

The need to know the number of array elements in a property is
a common pattern. To prevent duplication of open-coded implementations
add a helper function that also centralises strict sanity checking
and DTB format details.

Suggested-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
---
Hi Mark,
did you mean it like this? I've tested it with the sram-reserve change and
it made the part of the determining the number elements a lot nicer :-)

 drivers/of/base.c  |   32 ++++++++++++++++++++++++++++++++
 include/linux/of.h |    8 ++++++++
 2 files changed, 40 insertions(+)

diff --git a/drivers/of/base.c b/drivers/of/base.c
index f807d0e..0f40ea5 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -920,6 +920,38 @@ int of_property_read_u32_index(const struct device_node *np,
 EXPORT_SYMBOL_GPL(of_property_read_u32_index);
 
 /**
+ * of_property_count_u32_elems - Count the number of u32 values in a property
+ *
+ * @np:		device node from which the property value is to be read.
+ * @propname:	name of the property to be searched.
+ *
+ * Search for a property in a device node and count the number of u32 elements
+ * in it. Returns number of elements on sucess, -EINVAL if the property does
+ * not exist or its length does not match a multiple of u32 and -ENODATA if the
+ * property does not have a value.
+ */
+int of_property_count_u32_elems(const struct device_node *np,
+				const char *propname)
+{
+	int elem_size = sizeof(u32);
+	int len;
+	struct property *prop = of_find_property(np, propname, &len);
+
+	if (!prop)
+		return -EINVAL;
+	if (!prop->value)
+		return -ENODATA;
+
+	if (prop->length % elem_size != 0) {
+		pr_err("size of %s is not a multiple of u32\n", propname);
+		return -EINVAL;
+	}
+
+	return len / elem_size;
+}
+EXPORT_SYMBOL_GPL(of_property_count_u32_elems);
+
+/**
  * of_property_read_u8_array - Find and read an array of u8 from a property.
  *
  * @np:		device node from which the property value is to be read.
diff --git a/include/linux/of.h b/include/linux/of.h
index 276c546..5794942 100644
--- a/include/linux/of.h
+++ b/include/linux/of.h
@@ -253,6 +253,8 @@ extern struct property *of_find_property(const struct device_node *np,
 extern int of_property_read_u32_index(const struct device_node *np,
 				       const char *propname,
 				       u32 index, u32 *out_value);
+extern int of_property_count_u32_elems(const struct device_node *np,
+				       const char *propname);
 extern int of_property_read_u8_array(const struct device_node *np,
 			const char *propname, u8 *out_values, size_t sz);
 extern int of_property_read_u16_array(const struct device_node *np,
@@ -432,6 +434,12 @@ static inline int of_property_read_u32_index(const struct device_node *np,
 	return -ENOSYS;
 }
 
+static inline int of_property_count_u32_elems(const struct device_node *np,
+			const char *propname)
+{
+	return -ENOSYS;
+}
+
 static inline int of_property_read_u8_array(const struct device_node *np,
 			const char *propname, u8 *out_values, size_t sz)
 {
-- 
1.7.10.4

WARNING: multiple messages have this Message-ID (diff)
From: "Heiko Stübner" <heiko@sntech.de>
To: Mark Rutland <mark.rutland@arm.com>
Cc: "linux-arm-kernel@lists.infradead.org"
	<linux-arm-kernel@lists.infradead.org>,
	"arm@kernel.org" <arm@kernel.org>,
	"grant.likely@linaro.org" <grant.likely@linaro.org>,
	Rob Herring <robherring2@gmail.com>,
	"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
	Philipp Zabel <p.zabel@pengutronix.de>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Pawel Moll <Pawel.Moll@arm.com>,
	Stephen Warren <swarren@wwwdotorg.org>,
	Ian Campbell <ijc+devicetree@hellion.org.uk>
Subject: [PATCH] of: add function to count number of u32 elements in a property
Date: Thu, 16 Jan 2014 19:04:42 +0100	[thread overview]
Message-ID: <3781679.27UF2dWtKL@phil> (raw)
In-Reply-To: <20140116124527.GD19578@e106331-lin.cambridge.arm.com>

The need to know the number of array elements in a property is
a common pattern. To prevent duplication of open-coded implementations
add a helper function that also centralises strict sanity checking
and DTB format details.

Suggested-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
---
Hi Mark,
did you mean it like this? I've tested it with the sram-reserve change and
it made the part of the determining the number elements a lot nicer :-)

 drivers/of/base.c  |   32 ++++++++++++++++++++++++++++++++
 include/linux/of.h |    8 ++++++++
 2 files changed, 40 insertions(+)

diff --git a/drivers/of/base.c b/drivers/of/base.c
index f807d0e..0f40ea5 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -920,6 +920,38 @@ int of_property_read_u32_index(const struct device_node *np,
 EXPORT_SYMBOL_GPL(of_property_read_u32_index);
 
 /**
+ * of_property_count_u32_elems - Count the number of u32 values in a property
+ *
+ * @np:		device node from which the property value is to be read.
+ * @propname:	name of the property to be searched.
+ *
+ * Search for a property in a device node and count the number of u32 elements
+ * in it. Returns number of elements on sucess, -EINVAL if the property does
+ * not exist or its length does not match a multiple of u32 and -ENODATA if the
+ * property does not have a value.
+ */
+int of_property_count_u32_elems(const struct device_node *np,
+				const char *propname)
+{
+	int elem_size = sizeof(u32);
+	int len;
+	struct property *prop = of_find_property(np, propname, &len);
+
+	if (!prop)
+		return -EINVAL;
+	if (!prop->value)
+		return -ENODATA;
+
+	if (prop->length % elem_size != 0) {
+		pr_err("size of %s is not a multiple of u32\n", propname);
+		return -EINVAL;
+	}
+
+	return len / elem_size;
+}
+EXPORT_SYMBOL_GPL(of_property_count_u32_elems);
+
+/**
  * of_property_read_u8_array - Find and read an array of u8 from a property.
  *
  * @np:		device node from which the property value is to be read.
diff --git a/include/linux/of.h b/include/linux/of.h
index 276c546..5794942 100644
--- a/include/linux/of.h
+++ b/include/linux/of.h
@@ -253,6 +253,8 @@ extern struct property *of_find_property(const struct device_node *np,
 extern int of_property_read_u32_index(const struct device_node *np,
 				       const char *propname,
 				       u32 index, u32 *out_value);
+extern int of_property_count_u32_elems(const struct device_node *np,
+				       const char *propname);
 extern int of_property_read_u8_array(const struct device_node *np,
 			const char *propname, u8 *out_values, size_t sz);
 extern int of_property_read_u16_array(const struct device_node *np,
@@ -432,6 +434,12 @@ static inline int of_property_read_u32_index(const struct device_node *np,
 	return -ENOSYS;
 }
 
+static inline int of_property_count_u32_elems(const struct device_node *np,
+			const char *propname)
+{
+	return -ENOSYS;
+}
+
 static inline int of_property_read_u8_array(const struct device_node *np,
 			const char *propname, u8 *out_values, size_t sz)
 {
-- 
1.7.10.4

  reply	other threads:[~2014-01-16 18:04 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-01-15 21:40 [PATCH v6 0/6] ARM: rockchip: add smp functionality Heiko Stübner
2014-01-15 21:40 ` Heiko Stübner
2014-01-15 21:40 ` Heiko Stübner
2014-01-15 21:40 ` [PATCH v6 1/6] dt-bindings: sram: describe option to reserve parts of the memory Heiko Stübner
2014-01-15 21:40   ` Heiko Stübner
2014-01-16 14:36   ` Rob Herring
2014-01-16 14:36     ` Rob Herring
2014-01-16 14:36     ` Rob Herring
2014-01-15 21:41 ` [PATCH v6 2/6] misc: sram: implement mmio-sram-reserved option Heiko Stübner
2014-01-15 21:41   ` Heiko Stübner
2014-01-16 12:45   ` Mark Rutland
2014-01-16 12:45     ` Mark Rutland
2014-01-16 18:04     ` Heiko Stübner [this message]
2014-01-16 18:04       ` [PATCH] of: add function to count number of u32 elements in a property Heiko Stübner
2014-01-17 14:29       ` Rob Herring
2014-01-17 14:29         ` Rob Herring
2014-01-17 14:29         ` Rob Herring
2014-01-17 14:44       ` Mark Rutland
2014-01-17 14:44         ` Mark Rutland
2014-01-17 14:44         ` Mark Rutland
2014-01-17 15:44         ` [PATCH v2] of: add functions to count number of " Heiko Stübner
2014-01-17 15:44           ` Heiko Stübner
2014-01-17 15:44           ` Heiko Stübner
     [not found]           ` < CAL_JsqJ_St=OegpexzrTGXwmOYCz4YeWk_1S+R_q6NajmmPqSA@mail.gmail.com>
     [not found]             ` < 5115255.DrcMbtXc1P@phil>
     [not found]               ` < CAL_JsqJord1OOjwcKk1jqF5o+XO3uw+Lc4ATtQacgwZWAoQq1g@mail.gmail.com>
2014-01-17 16:53           ` Mark Rutland
2014-01-17 16:53             ` Mark Rutland
2014-01-17 16:53             ` Mark Rutland
2014-01-17 17:27             ` [PATCH v3] " Heiko Stübner
2014-01-17 17:27               ` Heiko Stübner
2014-01-17 17:27               ` Heiko Stübner
2014-01-17 17:42           ` [PATCH v2] " Rob Herring
2014-01-17 17:42             ` Rob Herring
2014-01-17 17:42             ` Rob Herring
2014-01-18 12:02             ` [PATCH v4] " Heiko Stübner
2014-01-18 12:02               ` Heiko Stübner
2014-01-18 12:02               ` Heiko Stübner
2014-01-18 15:07               ` Rob Herring
2014-01-18 15:07                 ` Rob Herring
2014-01-18 15:07                 ` Rob Herring
2014-01-18 15:28                 ` Heiko Stübner
2014-01-18 15:28                   ` Heiko Stübner
2014-01-18 15:28                   ` Heiko Stübner
2014-02-04 17:30                 ` Grant Likely
2014-02-04 17:30                   ` Grant Likely
2014-02-04 18:48                   ` Heiko Stübner
2014-02-04 18:48                     ` Heiko Stübner
2014-02-04 18:48                     ` Heiko Stübner
2014-02-05 12:06                     ` Grant Likely
2014-02-05 12:06                       ` Grant Likely
2014-02-05 12:45                       ` Heiko Stübner
2014-02-05 12:45                         ` Heiko Stübner
2014-02-05 12:45                         ` Heiko Stübner
2014-02-05 13:47                         ` Grant Likely
2014-02-05 13:47                           ` Grant Likely
2014-01-15 21:42 ` [PATCH v6 3/6] ARM: rockchip: add snoop-control-unit Heiko Stübner
2014-01-15 21:42   ` Heiko Stübner
2014-01-15 21:42 ` [PATCH v6 4/6] ARM: rockchip: add sram dt nodes and documentation Heiko Stübner
2014-01-15 21:42   ` Heiko Stübner
2014-01-15 21:43 ` [PATCH v6 5/6] ARM: rockchip: add power-management-unit Heiko Stübner
2014-01-15 21:43   ` Heiko Stübner
2014-01-15 21:43 ` [PATCH v6 6/6] ARM: rockchip: add smp bringup code Heiko Stübner
2014-01-15 21:43   ` Heiko Stübner
2014-01-15 21:43   ` Heiko Stübner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=3781679.27UF2dWtKL@phil \
    --to=heiko@sntech.de \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.