The configuration node a sub node under "/configurations", which describes the components to load from "/images". We only need to locate this node once.
However, for each component, spl_fit_get_image_name() would parse the FIT image, looking for the correct node. Such work duplication is not necessary. Instead, once the node is found, cache it, and re-use it. Signed-off-by: Alexandru Gagniuc <mr.nuke...@gmail.com> --- common/spl/spl_fit.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/common/spl/spl_fit.c b/common/spl/spl_fit.c index 4e27eb0b3d..4b49f369ac 100644 --- a/common/spl/spl_fit.c +++ b/common/spl/spl_fit.c @@ -30,6 +30,7 @@ struct spl_fit_info { const void *fit; size_t ext_data_offset; int images_node; + int conf_node; }; __weak void board_spl_fit_post_load(const void *fit) @@ -83,15 +84,10 @@ static int spl_fit_get_image_name(const struct spl_fit_info *ctx, struct udevice *sysinfo; const char *name, *str; __maybe_unused int node; - int conf_node; int len, i; bool found = true; - conf_node = fit_find_config_node(ctx->fit); - if (conf_node < 0) - return conf_node; - - name = fdt_getprop(ctx->fit, conf_node, type, &len); + name = fdt_getprop(ctx->fit, ctx->conf_node, type, &len); if (!name) { debug("cannot find property '%s': %d\n", type, len); return -EINVAL; @@ -553,12 +549,15 @@ static int spl_simple_fit_read(struct spl_fit_info *ctx, static int spl_simple_fit_parse(struct spl_fit_info *ctx) { - if (IS_ENABLED(CONFIG_SPL_FIT_SIGNATURE)) { - int conf_offset = fit_find_config_node(ctx->fit); + /* Find the correct subnode under "/configurations" */ + ctx->conf_node = fit_find_config_node(ctx->fit); + if (ctx->conf_node < 0) + return -EINVAL; + if (IS_ENABLED(CONFIG_SPL_FIT_SIGNATURE)) { printf("## Checking hash(es) for config %s ... ", - fit_get_name(ctx->fit, conf_offset, NULL)); - if (fit_config_verify(ctx->fit, conf_offset)) + fit_get_name(ctx->fit, ctx->conf_node, NULL)); + if (fit_config_verify(ctx->fit, ctx->conf_node)) return -EPERM; puts("OK\n"); } -- 2.26.2