* [PATCH 0/3] Support reading an u32 from a multi-value property
@ 2020-03-29 16:04 Dario Binacchi
2020-03-29 16:04 ` [PATCH 1/3] dm: test: add test case for dev_read_u64 function Dario Binacchi
` (2 more replies)
0 siblings, 3 replies; 15+ messages in thread
From: Dario Binacchi @ 2020-03-29 16:04 UTC (permalink / raw)
To: u-boot
The main part of the series consists of adding the dev_read_u32_index
and dev_read_u32_index_default functions. During implementation and
testing I noticed the lack of testing for the 64-bit data access
functions.
I decided to add the 64-bit test patch to the series to avoid merge
conflicts that could have occurred with the submission of a single
separated patch. In fact, it also contains changes to the
test/dm/test-fdt.c file.
If this series is accepted, it will be possible to evaluate the
addition of functions for indexed access also for the dev_read_s32 and
dev_read_u32u functions. Maybe to add in a second version of this
series.
Dario Binacchi (3):
dm: test: add test case for dev_read_u64 function
dm: core: support reading a single indexed u32 value
dm: core: refactor functions reading an u32 from dt
arch/sandbox/dts/test.dts | 2 ++
drivers/core/of_access.c | 38 ++++++++++++++++++------------
drivers/core/ofnode.c | 49 ++++++++++++++++++++++++++++-----------
drivers/core/read.c | 13 +++++++++++
include/dm/of_access.h | 19 +++++++++++++++
include/dm/ofnode.h | 25 ++++++++++++++++++++
include/dm/read.h | 40 ++++++++++++++++++++++++++++++++
include/test/ut.h | 16 +++++++++++++
test/dm/test-fdt.c | 39 +++++++++++++++++++++++++++++++
9 files changed, 212 insertions(+), 29 deletions(-)
--
2.17.1
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH 1/3] dm: test: add test case for dev_read_u64 function
2020-03-29 16:04 [PATCH 0/3] Support reading an u32 from a multi-value property Dario Binacchi
@ 2020-03-29 16:04 ` Dario Binacchi
2020-03-30 23:57 ` Simon Glass
2020-04-10 19:31 ` sjg at google.com
2020-03-29 16:04 ` [PATCH 2/3] dm: core: support reading a single indexed u32 value Dario Binacchi
2020-03-29 16:04 ` [PATCH 3/3] dm: core: refactor functions reading an u32 from dt Dario Binacchi
2 siblings, 2 replies; 15+ messages in thread
From: Dario Binacchi @ 2020-03-29 16:04 UTC (permalink / raw)
To: u-boot
Add test case to cover dev_read_u64 and dev_read_u64_default functions.
Signed-off-by: Dario Binacchi <dariobin@libero.it>
---
arch/sandbox/dts/test.dts | 1 +
include/test/ut.h | 16 ++++++++++++++++
test/dm/test-fdt.c | 10 ++++++++++
3 files changed, 27 insertions(+)
diff --git a/arch/sandbox/dts/test.dts b/arch/sandbox/dts/test.dts
index 4a277934a7..6664adb385 100644
--- a/arch/sandbox/dts/test.dts
+++ b/arch/sandbox/dts/test.dts
@@ -93,6 +93,7 @@
<&gpio_b 9 0xc 3 2 1>;
int-value = <1234>;
uint-value = <(-1234)>;
+ int64-value = /bits/ 64 <0x1111222233334444>;
interrupts-extended = <&irq 3 0>;
};
diff --git a/include/test/ut.h b/include/test/ut.h
index 04df8ba3af..ab861588a8 100644
--- a/include/test/ut.h
+++ b/include/test/ut.h
@@ -104,6 +104,22 @@ int ut_check_console_dump(struct unit_test_state *uts, int total_bytes);
} \
}
+/* Assert that two 64 int expressions are equal */
+#define ut_asserteq_64(expr1, expr2) { \
+ u64 _val1 = (expr1), _val2 = (expr2); \
+ \
+ if (_val1 != _val2) { \
+ ut_failf(uts, __FILE__, __LINE__, __func__, \
+ #expr1 " == " #expr2, \
+ "Expected %#llx (%lld), got %#llx (%lld)", \
+ (unsigned long long)_val1, \
+ (unsigned long long)_val1, \
+ (unsigned long long)_val2, \
+ (unsigned long long)_val2); \
+ return CMD_RET_FAILURE; \
+ } \
+}
+
/* Assert that two string expressions are equal */
#define ut_asserteq_str(expr1, expr2) { \
const char *_val1 = (expr1), *_val2 = (expr2); \
diff --git a/test/dm/test-fdt.c b/test/dm/test-fdt.c
index 75ae08081c..50bff4fdfb 100644
--- a/test/dm/test-fdt.c
+++ b/test/dm/test-fdt.c
@@ -867,6 +867,7 @@ static int dm_test_read_int(struct unit_test_state *uts)
u32 val32;
s32 sval;
uint val;
+ u64 val64;
ut_assertok(uclass_first_device_err(UCLASS_TEST_FDT, &dev));
ut_asserteq_str("a-test", dev->name);
@@ -891,6 +892,15 @@ static int dm_test_read_int(struct unit_test_state *uts)
ut_assertok(dev_read_u32u(dev, "uint-value", &val));
ut_asserteq(-1234, val);
+ ut_assertok(dev_read_u64(dev, "int64-value", &val64));
+ ut_asserteq_64(0x1111222233334444, val64);
+
+ ut_asserteq_64(-EINVAL, dev_read_u64(dev, "missing", &val64));
+ ut_asserteq_64(6, dev_read_u64_default(dev, "missing", 6));
+
+ ut_asserteq_64(0x1111222233334444,
+ dev_read_u64_default(dev, "int64-value", 6));
+
return 0;
}
DM_TEST(dm_test_read_int, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT);
--
2.17.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 2/3] dm: core: support reading a single indexed u32 value
2020-03-29 16:04 [PATCH 0/3] Support reading an u32 from a multi-value property Dario Binacchi
2020-03-29 16:04 ` [PATCH 1/3] dm: test: add test case for dev_read_u64 function Dario Binacchi
@ 2020-03-29 16:04 ` Dario Binacchi
2020-03-30 23:57 ` Simon Glass
2020-03-29 16:04 ` [PATCH 3/3] dm: core: refactor functions reading an u32 from dt Dario Binacchi
2 siblings, 1 reply; 15+ messages in thread
From: Dario Binacchi @ 2020-03-29 16:04 UTC (permalink / raw)
To: u-boot
The patch adds helper functions to allow reading a single indexed u32
value from a device-tree property containing multiple u32 values, that
is an array of integers.
Signed-off-by: Dario Binacchi <dariobin@libero.it>
---
arch/sandbox/dts/test.dts | 1 +
drivers/core/of_access.c | 22 +++++++++++++++++++++
drivers/core/ofnode.c | 40 +++++++++++++++++++++++++++++++++++++++
drivers/core/read.c | 13 +++++++++++++
include/dm/of_access.h | 19 +++++++++++++++++++
include/dm/ofnode.h | 25 ++++++++++++++++++++++++
include/dm/read.h | 40 +++++++++++++++++++++++++++++++++++++++
test/dm/test-fdt.c | 29 ++++++++++++++++++++++++++++
8 files changed, 189 insertions(+)
diff --git a/arch/sandbox/dts/test.dts b/arch/sandbox/dts/test.dts
index 6664adb385..270eb3d87d 100644
--- a/arch/sandbox/dts/test.dts
+++ b/arch/sandbox/dts/test.dts
@@ -94,6 +94,7 @@
int-value = <1234>;
uint-value = <(-1234)>;
int64-value = /bits/ 64 <0x1111222233334444>;
+ int-array = <5678 9123 4567>;
interrupts-extended = <&irq 3 0>;
};
diff --git a/drivers/core/of_access.c b/drivers/core/of_access.c
index acd745c121..55e4a38fc5 100644
--- a/drivers/core/of_access.c
+++ b/drivers/core/of_access.c
@@ -485,6 +485,28 @@ int of_read_u32_array(const struct device_node *np, const char *propname,
return 0;
}
+int of_read_u32_index(const struct device_node *np, const char *propname,
+ int index, u32 *outp)
+{
+ const __be32 *val;
+
+ debug("%s: %s: ", __func__, propname);
+ if (!np)
+ return -EINVAL;
+
+ val = of_find_property_value_of_size(np, propname,
+ sizeof(*outp) * (index + 1));
+ if (IS_ERR(val)) {
+ debug("(not found)\n");
+ return PTR_ERR(val);
+ }
+
+ *outp = be32_to_cpup(val + index);
+ debug("%#x (%d)\n", *outp, *outp);
+
+ return 0;
+}
+
int of_read_u64(const struct device_node *np, const char *propname, u64 *outp)
{
const __be64 *val;
diff --git a/drivers/core/ofnode.c b/drivers/core/ofnode.c
index 96a5dd20bd..5bc3b02996 100644
--- a/drivers/core/ofnode.c
+++ b/drivers/core/ofnode.c
@@ -48,6 +48,46 @@ u32 ofnode_read_u32_default(ofnode node, const char *propname, u32 def)
return def;
}
+int ofnode_read_u32_index(ofnode node, const char *propname, int index,
+ u32 *outp)
+{
+ const fdt32_t *cell;
+ int len;
+
+ assert(ofnode_valid(node));
+ debug("%s: %s: ", __func__, propname);
+
+ if (ofnode_is_np(node))
+ return of_read_u32_index(ofnode_to_np(node), propname, index,
+ outp);
+
+ cell = fdt_getprop(gd->fdt_blob, ofnode_to_offset(node), propname,
+ &len);
+ if (!cell) {
+ debug("(not found)\n");
+ return -EINVAL;
+ }
+
+ if (len < (sizeof(int) * (index + 1))) {
+ debug("(not large enough)\n");
+ return -EOVERFLOW;
+ }
+
+ *outp = fdt32_to_cpu(cell[index]);
+ debug("%#x (%d)\n", *outp, *outp);
+
+ return 0;
+}
+
+u32 ofnode_read_u32_index_default(ofnode node, const char *propname, int index,
+ u32 def)
+{
+ assert(ofnode_valid(node));
+ ofnode_read_u32_index(node, propname, index, &def);
+
+ return def;
+}
+
int ofnode_read_s32_default(ofnode node, const char *propname, s32 def)
{
assert(ofnode_valid(node));
diff --git a/drivers/core/read.c b/drivers/core/read.c
index 1f999b1b31..ce78f09d28 100644
--- a/drivers/core/read.c
+++ b/drivers/core/read.c
@@ -22,6 +22,19 @@ int dev_read_u32_default(const struct udevice *dev, const char *propname,
return ofnode_read_u32_default(dev_ofnode(dev), propname, def);
}
+int dev_read_u32_index(struct udevice *dev, const char *propname, int index,
+ u32 *outp)
+{
+ return ofnode_read_u32_index(dev_ofnode(dev), propname, index, outp);
+}
+
+u32 dev_read_u32_index_default(struct udevice *dev, const char *propname,
+ int index, u32 def)
+{
+ return ofnode_read_u32_index_default(dev_ofnode(dev), propname, index,
+ def);
+}
+
int dev_read_s32(const struct udevice *dev, const char *propname, s32 *outp)
{
return ofnode_read_u32(dev_ofnode(dev), propname, (u32 *)outp);
diff --git a/include/dm/of_access.h b/include/dm/of_access.h
index 13fedb7cf5..92876b3ecb 100644
--- a/include/dm/of_access.h
+++ b/include/dm/of_access.h
@@ -234,6 +234,25 @@ struct device_node *of_find_node_by_phandle(phandle handle);
*/
int of_read_u32(const struct device_node *np, const char *propname, u32 *outp);
+/**
+ * of_read_u32_index() - Find and read a 32-bit value from a multi-value
+ * property
+ *
+ * Search for a property in a device node and read a 32-bit value from
+ * it.
+ *
+ * @np: device node from which the property value is to be read.
+ * @propname: name of the property to be searched.
+ * @index: index of the u32 in the list of values
+ * @outp: pointer to return value, modified only if return value is 0.
+ *
+ * @return 0 on success, -EINVAL if the property does not exist,
+ * -ENODATA if property does not have a value, and -EOVERFLOW if the
+ * property data isn't large enough.
+ */
+int of_read_u32_index(const struct device_node *np, const char *propname,
+ int index, u32 *outp);
+
/**
* of_read_u64() - Find and read a 64-bit integer from a property
*
diff --git a/include/dm/ofnode.h b/include/dm/ofnode.h
index b5a50e8849..ce5e366c06 100644
--- a/include/dm/ofnode.h
+++ b/include/dm/ofnode.h
@@ -202,6 +202,18 @@ static inline ofnode ofnode_null(void)
*/
int ofnode_read_u32(ofnode node, const char *propname, u32 *outp);
+/**
+ * ofnode_read_u32_index() - Read a 32-bit integer from a multi-value property
+ *
+ * @ref: valid node reference to read property from
+ * @propname: name of the property to read from
+ * @index: index of the integer to return
+ * @outp: place to put value (if found)
+ * @return 0 if OK, -ve on error
+ */
+int ofnode_read_u32_index(ofnode node, const char *propname, int index,
+ u32 *outp);
+
/**
* ofnode_read_s32() - Read a 32-bit integer from a property
*
@@ -226,6 +238,19 @@ static inline int ofnode_read_s32(ofnode node, const char *propname,
*/
u32 ofnode_read_u32_default(ofnode ref, const char *propname, u32 def);
+/**
+ * ofnode_read_u32_index_default() - Read a 32-bit integer from a multi-value
+ * property
+ *
+ * @ref: valid node reference to read property from
+ * @propname: name of the property to read from
+ * @index: index of the integer to return
+ * @def: default value to return if the property has no value
+ * @return property value, or @def if not found
+ */
+u32 ofnode_read_u32_index_default(ofnode ref, const char *propname, int index,
+ u32 def);
+
/**
* ofnode_read_s32_default() - Read a 32-bit integer from a property
*
diff --git a/include/dm/read.h b/include/dm/read.h
index da8c7f25e7..77d3bc8db5 100644
--- a/include/dm/read.h
+++ b/include/dm/read.h
@@ -66,6 +66,32 @@ int dev_read_u32(const struct udevice *dev, const char *propname, u32 *outp);
int dev_read_u32_default(const struct udevice *dev, const char *propname,
int def);
+/**
+ * dev_read_u32_index() - read an indexed 32-bit integer from a device's DT
+ * property
+ *
+ * @dev: device to read DT property from
+ * @propname: name of the property to read from
+ * @index: index of the integer to return
+ * @outp: place to put value (if found)
+ * @return 0 if OK, -ve on error
+ */
+int dev_read_u32_index(struct udevice *dev, const char *propname, int index,
+ u32 *outp);
+
+/**
+ * dev_read_u32_index_default() - read an indexed 32-bit integer from a device's
+ * DT property
+ *
+ * @dev: device to read DT property from
+ * @propname: name of the property to read from
+ * @index: index of the integer to return
+ * @def: default value to return if the property has no value
+ * @return property value, or @def if not found
+ */
+u32 dev_read_u32_index_default(struct udevice *dev, const char *propname,
+ int index, u32 def);
+
/**
* dev_read_s32() - read a signed 32-bit integer from a device's DT property
*
@@ -621,6 +647,20 @@ static inline int dev_read_u32_default(const struct udevice *dev,
return ofnode_read_u32_default(dev_ofnode(dev), propname, def);
}
+static inline int dev_read_u32_index(struct udevice *dev,
+ const char *propname, int index, u32 *outp)
+{
+ return ofnode_read_u32_index(dev_ofnode(dev), propname, index, outp);
+}
+
+static inline u32 dev_read_u32_index_default(struct udevice *dev,
+ const char *propname, int index,
+ u32 def)
+{
+ return ofnode_read_u32_index_default(dev_ofnode(dev), propname, index,
+ def);
+}
+
static inline int dev_read_s32(const struct udevice *dev,
const char *propname, s32 *outp)
{
diff --git a/test/dm/test-fdt.c b/test/dm/test-fdt.c
index 50bff4fdfb..5fa1238d94 100644
--- a/test/dm/test-fdt.c
+++ b/test/dm/test-fdt.c
@@ -905,6 +905,35 @@ static int dm_test_read_int(struct unit_test_state *uts)
}
DM_TEST(dm_test_read_int, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT);
+static int dm_test_read_int_index(struct unit_test_state *uts)
+{
+ struct udevice *dev;
+ u32 val32;
+
+ ut_assertok(uclass_first_device_err(UCLASS_TEST_FDT, &dev));
+ ut_asserteq_str("a-test", dev->name);
+
+ ut_asserteq(-EINVAL, dev_read_u32_index(dev, "missing", 0, &val32));
+ ut_asserteq(19, dev_read_u32_index_default(dev, "missing", 0, 19));
+
+ ut_assertok(dev_read_u32_index(dev, "int-array", 0, &val32));
+ ut_asserteq(5678, val32);
+ ut_assertok(dev_read_u32_index(dev, "int-array", 1, &val32));
+ ut_asserteq(9123, val32);
+ ut_assertok(dev_read_u32_index(dev, "int-array", 2, &val32));
+ ut_asserteq(4567, val32);
+ ut_asserteq(-EOVERFLOW, dev_read_u32_index(dev, "int-array", 3,
+ &val32));
+
+ ut_asserteq(5678, dev_read_u32_index_default(dev, "int-array", 0, 2));
+ ut_asserteq(9123, dev_read_u32_index_default(dev, "int-array", 1, 2));
+ ut_asserteq(4567, dev_read_u32_index_default(dev, "int-array", 2, 2));
+ ut_asserteq(2, dev_read_u32_index_default(dev, "int-array", 3, 2));
+
+ return 0;
+}
+DM_TEST(dm_test_read_int_index, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT);
+
/* Test iteration through devices by drvdata */
static int dm_test_uclass_drvdata(struct unit_test_state *uts)
{
--
2.17.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 3/3] dm: core: refactor functions reading an u32 from dt
2020-03-29 16:04 [PATCH 0/3] Support reading an u32 from a multi-value property Dario Binacchi
2020-03-29 16:04 ` [PATCH 1/3] dm: test: add test case for dev_read_u64 function Dario Binacchi
2020-03-29 16:04 ` [PATCH 2/3] dm: core: support reading a single indexed u32 value Dario Binacchi
@ 2020-03-29 16:04 ` Dario Binacchi
2020-03-30 23:57 ` Simon Glass
2 siblings, 1 reply; 15+ messages in thread
From: Dario Binacchi @ 2020-03-29 16:04 UTC (permalink / raw)
To: u-boot
Now reading a 32 bit value from a device-tree property can be expressed
as reading the first element of an array with a single value.
Signed-off-by: Dario Binacchi <dariobin@libero.it>
---
drivers/core/of_access.c | 16 +---------------
drivers/core/ofnode.c | 23 ++---------------------
2 files changed, 3 insertions(+), 36 deletions(-)
diff --git a/drivers/core/of_access.c b/drivers/core/of_access.c
index 55e4a38fc5..d116d106d9 100644
--- a/drivers/core/of_access.c
+++ b/drivers/core/of_access.c
@@ -449,21 +449,7 @@ static void *of_find_property_value_of_size(const struct device_node *np,
int of_read_u32(const struct device_node *np, const char *propname, u32 *outp)
{
- const __be32 *val;
-
- debug("%s: %s: ", __func__, propname);
- if (!np)
- return -EINVAL;
- val = of_find_property_value_of_size(np, propname, sizeof(*outp));
- if (IS_ERR(val)) {
- debug("(not found)\n");
- return PTR_ERR(val);
- }
-
- *outp = be32_to_cpup(val);
- debug("%#x (%d)\n", *outp, *outp);
-
- return 0;
+ return of_read_u32_index(np, propname, 0, outp);
}
int of_read_u32_array(const struct device_node *np, const char *propname,
diff --git a/drivers/core/ofnode.c b/drivers/core/ofnode.c
index 5bc3b02996..b0be7cbe19 100644
--- a/drivers/core/ofnode.c
+++ b/drivers/core/ofnode.c
@@ -18,32 +18,13 @@
int ofnode_read_u32(ofnode node, const char *propname, u32 *outp)
{
- assert(ofnode_valid(node));
- debug("%s: %s: ", __func__, propname);
-
- if (ofnode_is_np(node)) {
- return of_read_u32(ofnode_to_np(node), propname, outp);
- } else {
- const fdt32_t *cell;
- int len;
-
- cell = fdt_getprop(gd->fdt_blob, ofnode_to_offset(node),
- propname, &len);
- if (!cell || len < sizeof(int)) {
- debug("(not found)\n");
- return -EINVAL;
- }
- *outp = fdt32_to_cpu(cell[0]);
- }
- debug("%#x (%d)\n", *outp, *outp);
-
- return 0;
+ return ofnode_read_u32_index(node, propname, 0, outp);
}
u32 ofnode_read_u32_default(ofnode node, const char *propname, u32 def)
{
assert(ofnode_valid(node));
- ofnode_read_u32(node, propname, &def);
+ ofnode_read_u32_index(node, propname, 0, &def);
return def;
}
--
2.17.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 1/3] dm: test: add test case for dev_read_u64 function
2020-03-29 16:04 ` [PATCH 1/3] dm: test: add test case for dev_read_u64 function Dario Binacchi
@ 2020-03-30 23:57 ` Simon Glass
2020-04-10 19:31 ` sjg at google.com
1 sibling, 0 replies; 15+ messages in thread
From: Simon Glass @ 2020-03-30 23:57 UTC (permalink / raw)
To: u-boot
On Sun, 29 Mar 2020 at 10:05, Dario Binacchi <dariobin@libero.it> wrote:
>
> Add test case to cover dev_read_u64 and dev_read_u64_default functions.
>
> Signed-off-by: Dario Binacchi <dariobin@libero.it>
> ---
>
> arch/sandbox/dts/test.dts | 1 +
> include/test/ut.h | 16 ++++++++++++++++
> test/dm/test-fdt.c | 10 ++++++++++
> 3 files changed, 27 insertions(+)
Reviewed-by: Simon Glass <sjg@chromium.org>
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH 2/3] dm: core: support reading a single indexed u32 value
2020-03-29 16:04 ` [PATCH 2/3] dm: core: support reading a single indexed u32 value Dario Binacchi
@ 2020-03-30 23:57 ` Simon Glass
2020-04-01 19:43 ` dariobin at libero.it
0 siblings, 1 reply; 15+ messages in thread
From: Simon Glass @ 2020-03-30 23:57 UTC (permalink / raw)
To: u-boot
On Sun, 29 Mar 2020 at 10:05, Dario Binacchi <dariobin@libero.it> wrote:
>
> The patch adds helper functions to allow reading a single indexed u32
> value from a device-tree property containing multiple u32 values, that
> is an array of integers.
>
> Signed-off-by: Dario Binacchi <dariobin@libero.it>
> ---
>
> arch/sandbox/dts/test.dts | 1 +
> drivers/core/of_access.c | 22 +++++++++++++++++++++
> drivers/core/ofnode.c | 40 +++++++++++++++++++++++++++++++++++++++
> drivers/core/read.c | 13 +++++++++++++
> include/dm/of_access.h | 19 +++++++++++++++++++
> include/dm/ofnode.h | 25 ++++++++++++++++++++++++
> include/dm/read.h | 40 +++++++++++++++++++++++++++++++++++++++
> test/dm/test-fdt.c | 29 ++++++++++++++++++++++++++++
> 8 files changed, 189 insertions(+)
>
Reviewed-by: Simon Glass <sjg@chromium.org>
Very nice
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH 3/3] dm: core: refactor functions reading an u32 from dt
2020-03-29 16:04 ` [PATCH 3/3] dm: core: refactor functions reading an u32 from dt Dario Binacchi
@ 2020-03-30 23:57 ` Simon Glass
2020-04-01 19:34 ` dariobin at libero.it
0 siblings, 1 reply; 15+ messages in thread
From: Simon Glass @ 2020-03-30 23:57 UTC (permalink / raw)
To: u-boot
On Sun, 29 Mar 2020 at 10:05, Dario Binacchi <dariobin@libero.it> wrote:
>
> Now reading a 32 bit value from a device-tree property can be expressed
> as reading the first element of an array with a single value.
>
> Signed-off-by: Dario Binacchi <dariobin@libero.it>
>
> ---
>
> drivers/core/of_access.c | 16 +---------------
> drivers/core/ofnode.c | 23 ++---------------------
> 2 files changed, 3 insertions(+), 36 deletions(-)
Reviewed-by: Simon Glass <sjg@chromium.org>
Can you please check the code-size delta in SPL on a suitable board?
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH 3/3] dm: core: refactor functions reading an u32 from dt
2020-03-30 23:57 ` Simon Glass
@ 2020-04-01 19:34 ` dariobin at libero.it
2020-04-02 18:54 ` Simon Glass
0 siblings, 1 reply; 15+ messages in thread
From: dariobin at libero.it @ 2020-04-01 19:34 UTC (permalink / raw)
To: u-boot
> Il 31 marzo 2020 alle 1.57 Simon Glass <sjg@chromium.org> ha scritto:
>
>
> On Sun, 29 Mar 2020 at 10:05, Dario Binacchi <dariobin@libero.it> wrote:
> >
> > Now reading a 32 bit value from a device-tree property can be expressed
> > as reading the first element of an array with a single value.
> >
> > Signed-off-by: Dario Binacchi <dariobin@libero.it>
> >
> > ---
> >
> > drivers/core/of_access.c | 16 +---------------
> > drivers/core/ofnode.c | 23 ++---------------------
> > 2 files changed, 3 insertions(+), 36 deletions(-)
>
> Reviewed-by: Simon Glass <sjg@chromium.org>
>
> Can you please check the code-size delta in SPL on a suitable board?
I have a black beaglebone available (am335x_evm_defconfig).
u-boot-spl.map generated without applying the refactoring patch
....
.text.ofnode_read_u32
0x0000000000000000 0x2e drivers/built-in.o
.text.ofnode_read_u32_index
0x0000000000000000 0x38 drivers/built-in.o
.text.ofnode_read_u32_default
0x0000000000000000 0x12 drivers/built-in.o
u-boot-spl.map genarated with the refactoring patch applied
....
.text.ofnode_read_u32_index
0x0000000000000000 0x38 drivers/built-in.o
.text.ofnode_read_u32
0x0000000000000000 0x8 drivers/built-in.o
.text.ofnode_read_u32_default
0x0000000000000000 0x14 drivers/built-in.o
I hope I have correctly answered what you asked me. Otherwise I am available to perform the right checks on your indications.
Thanks and regards,
Dario Binacchi
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH 2/3] dm: core: support reading a single indexed u32 value
2020-03-30 23:57 ` Simon Glass
@ 2020-04-01 19:43 ` dariobin at libero.it
2020-04-02 18:55 ` Simon Glass
0 siblings, 1 reply; 15+ messages in thread
From: dariobin at libero.it @ 2020-04-01 19:43 UTC (permalink / raw)
To: u-boot
Do you think it would make sense to add indexed access also for the s32, u32u and u64 types or at least some of those ?
Thanks and regards
Dario Binacchi
> Il 31 marzo 2020 alle 1.57 Simon Glass <sjg@chromium.org> ha scritto:
>
>
> On Sun, 29 Mar 2020 at 10:05, Dario Binacchi <dariobin@libero.it> wrote:
> >
> > The patch adds helper functions to allow reading a single indexed u32
> > value from a device-tree property containing multiple u32 values, that
> > is an array of integers.
> >
> > Signed-off-by: Dario Binacchi <dariobin@libero.it>
> > ---
> >
> > arch/sandbox/dts/test.dts | 1 +
> > drivers/core/of_access.c | 22 +++++++++++++++++++++
> > drivers/core/ofnode.c | 40 +++++++++++++++++++++++++++++++++++++++
> > drivers/core/read.c | 13 +++++++++++++
> > include/dm/of_access.h | 19 +++++++++++++++++++
> > include/dm/ofnode.h | 25 ++++++++++++++++++++++++
> > include/dm/read.h | 40 +++++++++++++++++++++++++++++++++++++++
> > test/dm/test-fdt.c | 29 ++++++++++++++++++++++++++++
> > 8 files changed, 189 insertions(+)
> >
>
> Reviewed-by: Simon Glass <sjg@chromium.org>
>
> Very nice
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH 3/3] dm: core: refactor functions reading an u32 from dt
2020-04-01 19:34 ` dariobin at libero.it
@ 2020-04-02 18:54 ` Simon Glass
2020-04-04 12:48 ` dariobin at libero.it
0 siblings, 1 reply; 15+ messages in thread
From: Simon Glass @ 2020-04-02 18:54 UTC (permalink / raw)
To: u-boot
Hi Dario,
On Wed, 1 Apr 2020 at 13:34, <dariobin@libero.it> wrote:
>
>
> > Il 31 marzo 2020 alle 1.57 Simon Glass <sjg@chromium.org> ha scritto:
> >
> >
> > On Sun, 29 Mar 2020 at 10:05, Dario Binacchi <dariobin@libero.it> wrote:
> > >
> > > Now reading a 32 bit value from a device-tree property can be expressed
> > > as reading the first element of an array with a single value.
> > >
> > > Signed-off-by: Dario Binacchi <dariobin@libero.it>
> > >
> > > ---
> > >
> > > drivers/core/of_access.c | 16 +---------------
> > > drivers/core/ofnode.c | 23 ++---------------------
> > > 2 files changed, 3 insertions(+), 36 deletions(-)
> >
> > Reviewed-by: Simon Glass <sjg@chromium.org>
> >
> > Can you please check the code-size delta in SPL on a suitable board?
>
> I have a black beaglebone available (am335x_evm_defconfig).
>
> u-boot-spl.map generated without applying the refactoring patch
> ....
> .text.ofnode_read_u32
> 0x0000000000000000 0x2e drivers/built-in.o
> .text.ofnode_read_u32_index
> 0x0000000000000000 0x38 drivers/built-in.o
> .text.ofnode_read_u32_default
> 0x0000000000000000 0x12 drivers/built-in.o
>
> u-boot-spl.map genarated with the refactoring patch applied
> ....
> .text.ofnode_read_u32_index
> 0x0000000000000000 0x38 drivers/built-in.o
> .text.ofnode_read_u32
> 0x0000000000000000 0x8 drivers/built-in.o
> .text.ofnode_read_u32_default
> 0x0000000000000000 0x14 drivers/built-in.o
Possibly, but a better test is to build your branch with the patch in:
buildman -b <branch> <board>
Then check the size:
buildman -b <branch> -sS
or function detail:
buildman -b <branch> -sSB
That will give us a true picture for SPL. It will show incremental
size increase with your patch.
See buildman docs for more info.
Regards,
Simon
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH 2/3] dm: core: support reading a single indexed u32 value
2020-04-01 19:43 ` dariobin at libero.it
@ 2020-04-02 18:55 ` Simon Glass
0 siblings, 0 replies; 15+ messages in thread
From: Simon Glass @ 2020-04-02 18:55 UTC (permalink / raw)
To: u-boot
Hi Dario,
On Wed, 1 Apr 2020 at 13:43, <dariobin@libero.it> wrote:
>
> Do you think it would make sense to add indexed access also for the s32, u32u and u64 types or at least some of those ?
>
I really don't know. I suspect it would be used at some point.
Regards,
Simon
> Thanks and regards
> Dario Binacchi
>
> > Il 31 marzo 2020 alle 1.57 Simon Glass <sjg@chromium.org> ha scritto:
> >
> >
> > On Sun, 29 Mar 2020 at 10:05, Dario Binacchi <dariobin@libero.it> wrote:
> > >
> > > The patch adds helper functions to allow reading a single indexed u32
> > > value from a device-tree property containing multiple u32 values, that
> > > is an array of integers.
> > >
> > > Signed-off-by: Dario Binacchi <dariobin@libero.it>
> > > ---
> > >
> > > arch/sandbox/dts/test.dts | 1 +
> > > drivers/core/of_access.c | 22 +++++++++++++++++++++
> > > drivers/core/ofnode.c | 40 +++++++++++++++++++++++++++++++++++++++
> > > drivers/core/read.c | 13 +++++++++++++
> > > include/dm/of_access.h | 19 +++++++++++++++++++
> > > include/dm/ofnode.h | 25 ++++++++++++++++++++++++
> > > include/dm/read.h | 40 +++++++++++++++++++++++++++++++++++++++
> > > test/dm/test-fdt.c | 29 ++++++++++++++++++++++++++++
> > > 8 files changed, 189 insertions(+)
> > >
> >
> > Reviewed-by: Simon Glass <sjg@chromium.org>
> >
> > Very nice
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH 3/3] dm: core: refactor functions reading an u32 from dt
2020-04-02 18:54 ` Simon Glass
@ 2020-04-04 12:48 ` dariobin at libero.it
2020-04-06 3:42 ` Simon Glass
2020-04-10 19:31 ` sjg at google.com
0 siblings, 2 replies; 15+ messages in thread
From: dariobin at libero.it @ 2020-04-04 12:48 UTC (permalink / raw)
To: u-boot
> Il 2 aprile 2020 alle 20.54 Simon Glass <sjg@chromium.org> ha scritto:
>
>
> Hi Dario,
>
> On Wed, 1 Apr 2020 at 13:34, <dariobin@libero.it> wrote:
> >
> >
> > > Il 31 marzo 2020 alle 1.57 Simon Glass <sjg@chromium.org> ha scritto:
> > >
> > >
> > > On Sun, 29 Mar 2020 at 10:05, Dario Binacchi <dariobin@libero.it> wrote:
> > > >
> > > > Now reading a 32 bit value from a device-tree property can be expressed
> > > > as reading the first element of an array with a single value.
> > > >
> > > > Signed-off-by: Dario Binacchi <dariobin@libero.it>
> > > >
> > > > ---
> > > >
> > > > drivers/core/of_access.c | 16 +---------------
> > > > drivers/core/ofnode.c | 23 ++---------------------
> > > > 2 files changed, 3 insertions(+), 36 deletions(-)
> > >
> > > Reviewed-by: Simon Glass <sjg@chromium.org>
> > >
> > > Can you please check the code-size delta in SPL on a suitable board?
> >
> > I have a black beaglebone available (am335x_evm_defconfig).
> >
> > u-boot-spl.map generated without applying the refactoring patch
> > ....
> > .text.ofnode_read_u32
> > 0x0000000000000000 0x2e drivers/built-in.o
> > .text.ofnode_read_u32_index
> > 0x0000000000000000 0x38 drivers/built-in.o
> > .text.ofnode_read_u32_default
> > 0x0000000000000000 0x12 drivers/built-in.o
> >
> > u-boot-spl.map genarated with the refactoring patch applied
> > ....
> > .text.ofnode_read_u32_index
> > 0x0000000000000000 0x38 drivers/built-in.o
> > .text.ofnode_read_u32
> > 0x0000000000000000 0x8 drivers/built-in.o
> > .text.ofnode_read_u32_default
> > 0x0000000000000000 0x14 drivers/built-in.o
>
> Possibly, but a better test is to build your branch with the patch in:
>
> buildman -b <branch> <board>
>
> Then check the size:
>
> buildman -b <branch> -sS
>
> or function detail:
>
> buildman -b <branch> -sSB
>
> That will give us a true picture for SPL. It will show incremental
> size increase with your patch.
Hi Simon,
this is the buildman response:
...
03: dm: core: support reading a single indexed u32 value
04: dm: core: refactor functions reading an u32 from dt
arm: (for 4/708 boards) all +11.5 bss -10.0 text +21.5
am335x_hs_evm : all +24 text +24
u-boot: add: 1/0, grow: 1/-1 bytes: 64/-38 (26)
function old new delta
ofnode_read_u32_index - 62 +62
ofnode_read_u32_default 18 20 +2
ofnode_read_u32 46 8 -38
am335x_hs_evm_uart: all +24 text +24
u-boot: add: 1/0, grow: 1/-1 bytes: 64/-38 (26)
function old new delta
ofnode_read_u32_index - 62 +62
ofnode_read_u32_default 18 20 +2
ofnode_read_u32 46 8 -38
am335x_evm : bss -24 text +24
u-boot: add: 1/0, grow: 1/-1 bytes: 64/-38 (26)
function old new delta
ofnode_read_u32_index - 62 +62
ofnode_read_u32_default 18 20 +2
ofnode_read_u32 46 8 -38
am335x_boneblack_vboot: all -2 bss -16 text +14
u-boot: add: 1/0, grow: 1/-1 bytes: 64/-38 (26)
function old new delta
ofnode_read_u32_index - 62 +62
ofnode_read_u32_default 18 20 +2
ofnode_read_u32 46 8 -38
Regards,
Dario
>
> See buildman docs for more info.
>
> Regards,
> Simon
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH 3/3] dm: core: refactor functions reading an u32 from dt
2020-04-04 12:48 ` dariobin at libero.it
@ 2020-04-06 3:42 ` Simon Glass
2020-04-10 19:31 ` sjg at google.com
1 sibling, 0 replies; 15+ messages in thread
From: Simon Glass @ 2020-04-06 3:42 UTC (permalink / raw)
To: u-boot
Hi Dario,
On Sat, 4 Apr 2020 at 06:49, <dariobin@libero.it> wrote:
>
> > Il 2 aprile 2020 alle 20.54 Simon Glass <sjg@chromium.org> ha scritto:
> >
> >
> > Hi Dario,
> >
> > On Wed, 1 Apr 2020 at 13:34, <dariobin@libero.it> wrote:
> > >
> > >
> > > > Il 31 marzo 2020 alle 1.57 Simon Glass <sjg@chromium.org> ha scritto:
> > > >
> > > >
> > > > On Sun, 29 Mar 2020 at 10:05, Dario Binacchi <dariobin@libero.it> wrote:
> > > > >
> > > > > Now reading a 32 bit value from a device-tree property can be expressed
> > > > > as reading the first element of an array with a single value.
> > > > >
> > > > > Signed-off-by: Dario Binacchi <dariobin@libero.it>
> > > > >
> > > > > ---
> > > > >
> > > > > drivers/core/of_access.c | 16 +---------------
> > > > > drivers/core/ofnode.c | 23 ++---------------------
> > > > > 2 files changed, 3 insertions(+), 36 deletions(-)
> > > >
> > > > Reviewed-by: Simon Glass <sjg@chromium.org>
> > > >
> > > > Can you please check the code-size delta in SPL on a suitable board?
> > >
> > > I have a black beaglebone available (am335x_evm_defconfig).
> > >
> > > u-boot-spl.map generated without applying the refactoring patch
> > > ....
> > > .text.ofnode_read_u32
> > > 0x0000000000000000 0x2e drivers/built-in.o
> > > .text.ofnode_read_u32_index
> > > 0x0000000000000000 0x38 drivers/built-in.o
> > > .text.ofnode_read_u32_default
> > > 0x0000000000000000 0x12 drivers/built-in.o
> > >
> > > u-boot-spl.map genarated with the refactoring patch applied
> > > ....
> > > .text.ofnode_read_u32_index
> > > 0x0000000000000000 0x38 drivers/built-in.o
> > > .text.ofnode_read_u32
> > > 0x0000000000000000 0x8 drivers/built-in.o
> > > .text.ofnode_read_u32_default
> > > 0x0000000000000000 0x14 drivers/built-in.o
> >
> > Possibly, but a better test is to build your branch with the patch in:
> >
> > buildman -b <branch> <board>
> >
> > Then check the size:
> >
> > buildman -b <branch> -sS
> >
> > or function detail:
> >
> > buildman -b <branch> -sSB
> >
> > That will give us a true picture for SPL. It will show incremental
> > size increase with your patch.
>
> Hi Simon,
> this is the buildman response:
> ...
> 03: dm: core: support reading a single indexed u32 value
> 04: dm: core: refactor functions reading an u32 from dt
> arm: (for 4/708 boards) all +11.5 bss -10.0 text +21.5
> am335x_hs_evm : all +24 text +24
> u-boot: add: 1/0, grow: 1/-1 bytes: 64/-38 (26)
> function old new delta
> ofnode_read_u32_index - 62 +62
> ofnode_read_u32_default 18 20 +2
> ofnode_read_u32 46 8 -38
> am335x_hs_evm_uart: all +24 text +24
> u-boot: add: 1/0, grow: 1/-1 bytes: 64/-38 (26)
> function old new delta
> ofnode_read_u32_index - 62 +62
> ofnode_read_u32_default 18 20 +2
> ofnode_read_u32 46 8 -38
> am335x_evm : bss -24 text +24
> u-boot: add: 1/0, grow: 1/-1 bytes: 64/-38 (26)
> function old new delta
> ofnode_read_u32_index - 62 +62
> ofnode_read_u32_default 18 20 +2
> ofnode_read_u32 46 8 -38
> am335x_boneblack_vboot: all -2 bss -16 text +14
> u-boot: add: 1/0, grow: 1/-1 bytes: 64/-38 (26)
> function old new delta
> ofnode_read_u32_index - 62 +62
> ofnode_read_u32_default 18 20 +2
> ofnode_read_u32 46 8 -38
This does not actually look like SPL though, only U-Boot. I hope that
means that SPL doesn't increase in size.
Anyway for U-Boot proper it looks like it adds about 24 bytes of code.
I think it is worth it.
Regards,
Simon
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH 3/3] dm: core: refactor functions reading an u32 from dt
2020-04-04 12:48 ` dariobin at libero.it
2020-04-06 3:42 ` Simon Glass
@ 2020-04-10 19:31 ` sjg at google.com
1 sibling, 0 replies; 15+ messages in thread
From: sjg at google.com @ 2020-04-10 19:31 UTC (permalink / raw)
To: u-boot
Hi Dario,
On Sat, 4 Apr 2020 at 06:49, <dariobin@libero.it> wrote:
>
> > Il 2 aprile 2020 alle 20.54 Simon Glass <sjg@chromium.org> ha scritto:
> >
> >
> > Hi Dario,
> >
> > On Wed, 1 Apr 2020 at 13:34, <dariobin@libero.it> wrote:
> > >
> > >
> > > > Il 31 marzo 2020 alle 1.57 Simon Glass <sjg@chromium.org> ha scritto:
> > > >
> > > >
> > > > On Sun, 29 Mar 2020 at 10:05, Dario Binacchi <dariobin@libero.it> wrote:
> > > > >
> > > > > Now reading a 32 bit value from a device-tree property can be expressed
> > > > > as reading the first element of an array with a single value.
> > > > >
> > > > > Signed-off-by: Dario Binacchi <dariobin@libero.it>
> > > > >
> > > > > ---
> > > > >
> > > > > drivers/core/of_access.c | 16 +---------------
> > > > > drivers/core/ofnode.c | 23 ++---------------------
> > > > > 2 files changed, 3 insertions(+), 36 deletions(-)
> > > >
> > > > Reviewed-by: Simon Glass <sjg@chromium.org>
> > > >
> > > > Can you please check the code-size delta in SPL on a suitable board?
> > >
> > > I have a black beaglebone available (am335x_evm_defconfig).
> > >
> > > u-boot-spl.map generated without applying the refactoring patch
> > > ....
> > > .text.ofnode_read_u32
> > > 0x0000000000000000 0x2e drivers/built-in.o
> > > .text.ofnode_read_u32_index
> > > 0x0000000000000000 0x38 drivers/built-in.o
> > > .text.ofnode_read_u32_default
> > > 0x0000000000000000 0x12 drivers/built-in.o
> > >
> > > u-boot-spl.map genarated with the refactoring patch applied
> > > ....
> > > .text.ofnode_read_u32_index
> > > 0x0000000000000000 0x38 drivers/built-in.o
> > > .text.ofnode_read_u32
> > > 0x0000000000000000 0x8 drivers/built-in.o
> > > .text.ofnode_read_u32_default
> > > 0x0000000000000000 0x14 drivers/built-in.o
> >
> > Possibly, but a better test is to build your branch with the patch in:
> >
> > buildman -b <branch> <board>
> >
> > Then check the size:
> >
> > buildman -b <branch> -sS
> >
> > or function detail:
> >
> > buildman -b <branch> -sSB
> >
> > That will give us a true picture for SPL. It will show incremental
> > size increase with your patch.
>
> Hi Simon,
> this is the buildman response:
> ...
> 03: dm: core: support reading a single indexed u32 value
> 04: dm: core: refactor functions reading an u32 from dt
> arm: (for 4/708 boards) all +11.5 bss -10.0 text +21.5
> am335x_hs_evm : all +24 text +24
> u-boot: add: 1/0, grow: 1/-1 bytes: 64/-38 (26)
> function old new delta
> ofnode_read_u32_index - 62 +62
> ofnode_read_u32_default 18 20 +2
> ofnode_read_u32 46 8 -38
> am335x_hs_evm_uart: all +24 text +24
> u-boot: add: 1/0, grow: 1/-1 bytes: 64/-38 (26)
> function old new delta
> ofnode_read_u32_index - 62 +62
> ofnode_read_u32_default 18 20 +2
> ofnode_read_u32 46 8 -38
> am335x_evm : bss -24 text +24
> u-boot: add: 1/0, grow: 1/-1 bytes: 64/-38 (26)
> function old new delta
> ofnode_read_u32_index - 62 +62
> ofnode_read_u32_default 18 20 +2
> ofnode_read_u32 46 8 -38
> am335x_boneblack_vboot: all -2 bss -16 text +14
> u-boot: add: 1/0, grow: 1/-1 bytes: 64/-38 (26)
> function old new delta
> ofnode_read_u32_index - 62 +62
> ofnode_read_u32_default 18 20 +2
> ofnode_read_u32 46 8 -38
This does not actually look like SPL though, only U-Boot. I hope that
means that SPL doesn't increase in size.
Anyway for U-Boot proper it looks like it adds about 24 bytes of code.
I think it is worth it.
Regards,
Simon
Applied to u-boot-dm/next, thanks!
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH 1/3] dm: test: add test case for dev_read_u64 function
2020-03-29 16:04 ` [PATCH 1/3] dm: test: add test case for dev_read_u64 function Dario Binacchi
2020-03-30 23:57 ` Simon Glass
@ 2020-04-10 19:31 ` sjg at google.com
1 sibling, 0 replies; 15+ messages in thread
From: sjg at google.com @ 2020-04-10 19:31 UTC (permalink / raw)
To: u-boot
On Sun, 29 Mar 2020 at 10:05, Dario Binacchi <dariobin@libero.it> wrote:
>
> Add test case to cover dev_read_u64 and dev_read_u64_default functions.
>
> Signed-off-by: Dario Binacchi <dariobin@libero.it>
> ---
>
> arch/sandbox/dts/test.dts | 1 +
> include/test/ut.h | 16 ++++++++++++++++
> test/dm/test-fdt.c | 10 ++++++++++
> 3 files changed, 27 insertions(+)
Reviewed-by: Simon Glass <sjg@chromium.org>
Applied to u-boot-dm/next, thanks!
^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2020-04-10 19:31 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-29 16:04 [PATCH 0/3] Support reading an u32 from a multi-value property Dario Binacchi
2020-03-29 16:04 ` [PATCH 1/3] dm: test: add test case for dev_read_u64 function Dario Binacchi
2020-03-30 23:57 ` Simon Glass
2020-04-10 19:31 ` sjg at google.com
2020-03-29 16:04 ` [PATCH 2/3] dm: core: support reading a single indexed u32 value Dario Binacchi
2020-03-30 23:57 ` Simon Glass
2020-04-01 19:43 ` dariobin at libero.it
2020-04-02 18:55 ` Simon Glass
2020-03-29 16:04 ` [PATCH 3/3] dm: core: refactor functions reading an u32 from dt Dario Binacchi
2020-03-30 23:57 ` Simon Glass
2020-04-01 19:34 ` dariobin at libero.it
2020-04-02 18:54 ` Simon Glass
2020-04-04 12:48 ` dariobin at libero.it
2020-04-06 3:42 ` Simon Glass
2020-04-10 19:31 ` sjg at google.com
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.