X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=cmd%2Fsource.c;h=5b0b79aadba568adbf49bf9f6a4eb5115cb49bb5;hb=09140113108541b95d340f3c7b6ee597d31ccc73;hp=a9831b6608581661c8f274abec93a283f679bc01;hpb=1fdafb2e3dfecdc4129a8062ad25b1adb32b0efb;p=oweals%2Fu-boot.git diff --git a/cmd/source.c b/cmd/source.c index a9831b6608..5b0b79aadb 100644 --- a/cmd/source.c +++ b/cmd/source.c @@ -1,8 +1,7 @@ +// SPDX-License-Identifier: GPL-2.0+ /* * (C) Copyright 2001 * Kyle Harris, kharris@nexus-tech.net - * - * SPDX-License-Identifier: GPL-2.0+ */ /* @@ -17,17 +16,35 @@ #include #include +#include #include #include #include #include #include -int -source (ulong addr, const char *fit_uname) +#if defined(CONFIG_FIT) +/** + * get_default_image() - Return default property from /images + * + * Return: Pointer to value of default property (or NULL) + */ +static const char *get_default_image(const void *fit) +{ + int images_noffset; + + images_noffset = fdt_path_offset(fit, FIT_IMAGES_PATH); + if (images_noffset < 0) + return NULL; + + return fdt_getprop(fit, images_noffset, FIT_DEFAULT_PROP, NULL); +} +#endif + +int image_source_script(ulong addr, const char *fit_uname) { ulong len; -#if defined(CONFIG_IMAGE_FORMAT_LEGACY) +#if defined(CONFIG_LEGACY_IMAGE_FORMAT) const image_header_t *hdr; #endif u32 *data; @@ -44,7 +61,7 @@ source (ulong addr, const char *fit_uname) buf = map_sysmem(addr, 0); switch (genimg_get_format(buf)) { -#if defined(CONFIG_IMAGE_FORMAT_LEGACY) +#if defined(CONFIG_LEGACY_IMAGE_FORMAT) case IMAGE_FORMAT_LEGACY: hdr = buf; @@ -88,17 +105,20 @@ source (ulong addr, const char *fit_uname) #endif #if defined(CONFIG_FIT) case IMAGE_FORMAT_FIT: - if (fit_uname == NULL) { - puts ("No FIT subimage unit name\n"); - return 1; - } - fit_hdr = buf; if (!fit_check_format (fit_hdr)) { puts ("Bad FIT image format\n"); return 1; } + if (!fit_uname) + fit_uname = get_default_image(fit_hdr); + + if (!fit_uname) { + puts("No FIT subimage unit name\n"); + return 1; + } + /* get script component image node offset */ noffset = fit_image_get_node (fit_hdr, fit_uname); if (noffset < 0) { @@ -140,7 +160,8 @@ source (ulong addr, const char *fit_uname) /**************************************************/ #if defined(CONFIG_CMD_SOURCE) -static int do_source(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +static int do_source(struct cmd_tbl *cmdtp, int flag, int argc, + char *const argv[]) { ulong addr; int rcode; @@ -151,7 +172,8 @@ static int do_source(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) addr = CONFIG_SYS_LOAD_ADDR; debug ("* source: default load address = 0x%08lx\n", addr); #if defined(CONFIG_FIT) - } else if (fit_parse_subimage (argv[1], load_addr, &addr, &fit_uname)) { + } else if (fit_parse_subimage(argv[1], image_load_addr, &addr, + &fit_uname)) { debug ("* source: subimage '%s' from FIT image at 0x%08lx\n", fit_uname, addr); #endif @@ -161,7 +183,7 @@ static int do_source(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) } printf ("## Executing script at %08lx\n", addr); - rcode = source (addr, fit_uname); + rcode = image_source_script(addr, fit_uname); return rcode; }