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.villem...@prevas.dk> --- include/fdtdec.h | 14 ++++++++++++++ lib/fdtdec.c | 27 +++++++++++++-------------- 2 files changed, 27 insertions(+), 14 deletions(-) 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