binman: Refactor binman_entry_find() to allow other nodes
authorSimon Glass <sjg@chromium.org>
Wed, 8 Jul 2020 03:32:03 +0000 (21:32 -0600)
committerBin Meng <bmeng.cn@gmail.com>
Fri, 17 Jul 2020 06:32:24 +0000 (14:32 +0800)
At present we can only read from a top-level binman node entry. Refactor
this function to produce a second local function which supports reading
from any node.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
lib/binman.c

index dc3a880..9098a1d 100644 (file)
@@ -29,25 +29,32 @@ struct binman_info {
 
 static struct binman_info *binman;
 
-int binman_entry_find(const char *name, struct binman_entry *entry)
+static int binman_entry_find_internal(ofnode node, const char *name,
+                                     struct binman_entry *entry)
 {
-       ofnode node;
        int ret;
 
-       node = ofnode_find_subnode(binman->image, name);
        if (!ofnode_valid(node))
-               return log_msg_ret("no binman node", -ENOENT);
+               node = binman->image;
+       node = ofnode_find_subnode(node, name);
+       if (!ofnode_valid(node))
+               return log_msg_ret("node", -ENOENT);
 
        ret = ofnode_read_u32(node, "image-pos", &entry->image_pos);
        if (ret)
-               return log_msg_ret("bad binman node1", ret);
+               return log_msg_ret("import-pos", ret);
        ret = ofnode_read_u32(node, "size", &entry->size);
        if (ret)
-               return log_msg_ret("bad binman node2", ret);
+               return log_msg_ret("size", ret);
 
        return 0;
 }
 
+int binman_entry_find(const char *name, struct binman_entry *entry)
+{
+       return binman_entry_find_internal(binman->image, name, entry);
+}
+
 void binman_set_rom_offset(int rom_offset)
 {
        binman->rom_offset = rom_offset;