diff options
| author | Simon Glass <[email protected]> | 2022-09-06 20:27:18 -0600 |
|---|---|---|
| committer | Tom Rini <[email protected]> | 2022-09-29 22:43:42 -0400 |
| commit | 66d0d0c188db9e816c5b18e8823a8d8bf5e9cd63 (patch) | |
| tree | 382d7c8364b9c1cdbe4a6665410bd2312e1b462f /drivers | |
| parent | 8909066199281b86bf4ee7673ec6d7983dd12a26 (diff) | |
dm: core: Expand integer-reading tests
The current tests do not cover all the behaviour. Add some more.
Tidy up a few inconsistencies between livetree and flattree which come to
light with these tests. Also drop the -ENODATA error since it is never
actually returned.
Signed-off-by: Simon Glass <[email protected]>
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/core/of_access.c | 5 | ||||
| -rw-r--r-- | drivers/core/ofnode.c | 17 |
2 files changed, 15 insertions, 7 deletions
diff --git a/drivers/core/of_access.c b/drivers/core/of_access.c index 8631e1c286b..85f7da5a499 100644 --- a/drivers/core/of_access.c +++ b/drivers/core/of_access.c @@ -471,8 +471,7 @@ struct device_node *of_find_node_by_phandle(struct device_node *root, * @len: requested length of property value * * Return: the property value 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. + * exist and -EOVERFLOW if the property data isn't large enough. */ static void *of_find_property_value_of_size(const struct device_node *np, const char *propname, u32 len) @@ -481,8 +480,6 @@ static void *of_find_property_value_of_size(const struct device_node *np, if (!prop) return ERR_PTR(-EINVAL); - if (!prop->value) - return ERR_PTR(-ENODATA); if (len > prop->length) return ERR_PTR(-EOVERFLOW); diff --git a/drivers/core/ofnode.c b/drivers/core/ofnode.c index 4dd2aee11ce..e4b4b352e46 100644 --- a/drivers/core/ofnode.c +++ b/drivers/core/ofnode.c @@ -296,9 +296,20 @@ int ofnode_read_u32_array(ofnode node, const char *propname, return of_read_u32_array(ofnode_to_np(node), propname, out_values, sz); } else { - return fdtdec_get_int_array(gd->fdt_blob, - ofnode_to_offset(node), propname, - out_values, sz); + int ret; + + ret = fdtdec_get_int_array(gd->fdt_blob, + ofnode_to_offset(node), propname, + out_values, sz); + + /* get the error right, but space is more important in SPL */ + if (!IS_ENABLED(CONFIG_SPL_BUILD)) { + if (ret == -FDT_ERR_NOTFOUND) + return -EINVAL; + else if (ret == -FDT_ERR_BADLAYOUT) + return -EOVERFLOW; + } + return ret; } } |
