[PATCH 49/49] image: Remove #ifdefs from select_fdt()

Simon Glass
2021-05-03T23:11:36Z

Use boolean variables to deal with the strange #ifdef logic of this
function, so we can remove the #ifdefs. Also drop one from its caller,
boot_get_fdt()

Signed-off-by: Simon Glass <sjg@chromium.org>
---

(no changes since v1)

common/image-fdt.c | 201 ++++++++++++++++++++++-----------------------
1 file changed, 100 insertions(+), 101 deletions(-)

diff --git a/common/image-fdt.c b/common/image-fdt.c
index c17c23e1295..8afd6ed94a6 100644
--- a/common/image-fdt.c
+++ b/common/image-fdt.c
@@ -39,7 +39,6 @@ static void fdt_error(const char *msg)
puts(" - must RESET the board to recover.\n");
}

-#if CONFIG_IS_ENABLED(LEGACY_IMAGE_FORMAT)
static const image_header_t *image_get_fdt(ulong fdt_addr)
{
const image_header_t *fdt_hdr = map_sysmem(fdt_addr, 0);
@@ -72,7 +71,6 @@ static const image_header_t *image_get_fdt(ulong fdt_addr)
}
return fdt_hdr;
}
-#endif

static void boot_fdt_reserve_region(struct lmb *lmb, uint64_t addr,
uint64_t size)
@@ -258,46 +256,49 @@ error:
static int select_fdt(bootm_headers_t *images, const char *select, u8 arch,
ulong *fdt_addrp)
{
- const char *buf;
- ulong fdt_addr;
-
-#if CONFIG_IS_ENABLED(FIT)
const char *fit_uname_config = images->fit_uname_cfg;
const char *fit_uname_fdt = NULL;
- ulong default_addr;
int fdt_noffset;
+ const char *buf;
+ bool processed;
+ ulong fdt_addr = 0;

if (select) {
- /*
- * If the FDT blob comes from the FIT image and the
- * FIT image address is omitted in the command line
- * argument, try to use ramdisk or os FIT image
- * address or default load address.
- */
- if (images->fit_uname_rd)
- default_addr = (ulong)images->fit_hdr_rd;
- else if (images->fit_uname_os)
- default_addr = (ulong)images->fit_hdr_os;
- else
- default_addr = image_load_addr;
-
- if (fit_parse_conf(select, default_addr, &fdt_addr,
- &fit_uname_config)) {
- debug("* fdt: config '%s' from image at 0x%08lx\n",
- fit_uname_config, fdt_addr);
- } else if (fit_parse_subimage(select, default_addr, &fdt_addr,
- &fit_uname_fdt)) {
- debug("* fdt: subimage '%s' from image at 0x%08lx\n",
- fit_uname_fdt, fdt_addr);
- } else
-#endif
- {
+ ulong default_addr;
+ bool done = true;
+
+ if (CONFIG_IS_ENABLED(FIT)) {
+ /*
+ * If the FDT blob comes from the FIT image and the
+ * FIT image address is omitted in the command line
+ * argument, try to use ramdisk or os FIT image
+ * address or default load address.
+ */
+ if (images->fit_uname_rd)
+ default_addr = (ulong)images->fit_hdr_rd;
+ else if (images->fit_uname_os)
+ default_addr = (ulong)images->fit_hdr_os;
+ else
+ default_addr = image_load_addr;
+
+ if (fit_parse_conf(select, default_addr, &fdt_addr,
+ &fit_uname_config)) {
+ debug("* fdt: config '%s' from image at 0x%08lx\n",
+ fit_uname_config, fdt_addr);
+ } else if (fit_parse_subimage(select, default_addr, &fdt_addr,
+ &fit_uname_fdt)) {
+ debug("* fdt: subimage '%s' from image at 0x%08lx\n",
+ fit_uname_fdt, fdt_addr);
+ } else {
+ done = false;
+ }
+ }
+ if (!done) {
fdt_addr = simple_strtoul(select, NULL, 16);
debug("* fdt: cmdline image address = 0x%08lx\n",
fdt_addr);
}
-#if CONFIG_IS_ENABLED(FIT)
- } else {
+ } else if (CONFIG_IS_ENABLED(FIT)) {
/* use FIT configuration provided in first bootm
* command argument
*/
@@ -309,7 +310,6 @@ static int select_fdt(bootm_headers_t *images, const char *select, u8 arch,
else if (fdt_noffset < 0)
return fdt_noffset;
}
-#endif
debug("## Checking for 'FDT'/'FDT Image' at %08lx\n",
fdt_addr);

@@ -319,90 +319,90 @@ static int select_fdt(bootm_headers_t *images, const char *select, u8 arch,
* check image type, for FIT images get a FIT node.
*/
buf = map_sysmem(fdt_addr, 0);
+ processed = false;
switch (genimg_get_format(buf)) {
-#if CONFIG_IS_ENABLED(LEGACY_IMAGE_FORMAT)
- case IMAGE_FORMAT_LEGACY: {
- const image_header_t *fdt_hdr;
- ulong load, load_end;
- ulong image_start, image_data, image_end;
-
- /* verify fdt_addr points to a valid image header */
- printf("## Flattened Device Tree from Legacy Image at %08lx\n",
- fdt_addr);
- fdt_hdr = image_get_fdt(fdt_addr);
- if (!fdt_hdr)
- return -ENOPKG;
+ case IMAGE_FORMAT_LEGACY:
+ if (CONFIG_IS_ENABLED(LEGACY_IMAGE_FORMAT)) {
+ const image_header_t *fdt_hdr;
+ ulong load, load_end;
+ ulong image_start, image_data, image_end;
+
+ processed = true;
+ /* verify fdt_addr points to a valid image header */
+ printf("## Flattened Device Tree from Legacy Image@%08lx\n",
+ fdt_addr);
+ fdt_hdr = image_get_fdt(fdt_addr);
+ if (!fdt_hdr)
+ return -ENOPKG;

- /*
- * move image data to the load address,
- * make sure we don't overwrite initial image
- */
- image_start = (ulong)fdt_hdr;
- image_data = (ulong)image_get_data(fdt_hdr);
- image_end = image_get_image_end(fdt_hdr);
+ /*
+ * move image data to the load address,
+ * make sure we don't overwrite initial image
+ */
+ image_start = (ulong)fdt_hdr;
+ image_data = (ulong)image_get_data(fdt_hdr);
+ image_end = image_get_image_end(fdt_hdr);

- load = image_get_load(fdt_hdr);
- load_end = load + image_get_data_size(fdt_hdr);
+ load = image_get_load(fdt_hdr);
+ load_end = load + image_get_data_size(fdt_hdr);

- if (load == image_start ||
- load == image_data) {
- fdt_addr = load;
- break;
- }
+ if (load == image_start ||
+ load == image_data) {
+ fdt_addr = load;
+ break;
+ }

- if ((load < image_end) && (load_end > image_start)) {
- fdt_error("fdt overwritten");
- return -EFAULT;
- }
+ if (load < image_end && load_end > image_start) {
+ fdt_error("fdt overwritten");
+ return -EFAULT;
+ }

- debug(" Loading FDT from 0x%08lx to 0x%08lx\n",
- image_data, load);
+ debug(" Loading FDT from 0x%08lx to 0x%08lx\n",
+ image_data, load);

- memmove((void *)load,
- (void *)image_data,
- image_get_data_size(fdt_hdr));
+ memmove((void *)load,
+ (void *)image_data,
+ image_get_data_size(fdt_hdr));

- fdt_addr = load;
+ fdt_addr = load;
+ }
break;
- }
-#endif
case IMAGE_FORMAT_FIT:
/*
* This case will catch both: new uImage format
* (libfdt based) and raw FDT blob (also libfdt
* based).
*/
-#if CONFIG_IS_ENABLED(FIT)
- /* check FDT blob vs FIT blob */
- if (!fit_check_format(buf, IMAGE_SIZE_INVAL)) {
- ulong load, len;
-
- fdt_noffset = boot_get_fdt_fit(images, fdt_addr,
- &fit_uname_fdt,
- &fit_uname_config,
- arch, &load, &len);
-
- if (fdt_noffset < 0)
- return -ENOENT;
-
- images->fit_hdr_fdt = map_sysmem(fdt_addr, 0);
- images->fit_uname_fdt = fit_uname_fdt;
- images->fit_noffset_fdt = fdt_noffset;
- fdt_addr = load;
-
- break;
- } else
-#endif
- {
- /*
- * FDT blob
- */
+ if (CONFIG_IS_ENABLED(FIT)) {
+ /* check FDT blob vs FIT blob */
+ if (!fit_check_format(buf, IMAGE_SIZE_INVAL)) {
+ ulong load, len;
+
+ fdt_noffset = boot_get_fdt_fit(images, fdt_addr,
+ &fit_uname_fdt,
+ &fit_uname_config,
+ arch, &load, &len);
+
+ if (fdt_noffset < 0)
+ return -ENOENT;
+
+ images->fit_hdr_fdt = map_sysmem(fdt_addr, 0);
+ images->fit_uname_fdt = fit_uname_fdt;
+ images->fit_noffset_fdt = fdt_noffset;
+ fdt_addr = load;
+ processed = true;
+ }
+ }
+ if (!processed) {
+ /* FDT blob */
debug("* fdt: raw FDT blob\n");
printf("## Flattened Device Tree blob at %08lx\n",
(long)fdt_addr);
}
break;
- default:
+ }
+
+ if (!processed) {
puts("ERROR: Did not find a cmdline Flattened Device Tree\n");
return -ENOENT;
}
@@ -492,8 +492,8 @@ int boot_get_fdt(int flag, int argc, char *const argv[], uint8_t arch,
debug("## No Flattened Device Tree\n");
goto no_fdt;
}
-#ifdef CONFIG_ANDROID_BOOT_IMAGE
- } else if (genimg_get_format(buf) == IMAGE_FORMAT_ANDROID) {
+ } else if (IS_ENABLED(CONFIG_ANDROID_BOOT_IMAGE) &&
+ genimg_get_format(buf) == IMAGE_FORMAT_ANDROID) {
struct andr_img_hdr *hdr = buf;
ulong fdt_data, fdt_len;
u32 fdt_size, dtb_idx;
@@ -525,7 +525,6 @@ int boot_get_fdt(int flag, int argc, char *const argv[], uint8_t arch,

debug("## Using FDT at ${fdtaddr}=Ox%lx\n", fdt_addr);
}
-#endif
} else {
debug("## No Flattened Device Tree\n");
goto no_fdt;
--
2.31.1.527.g47e6f16901-goog