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

Simon Glass sjg at chromium.org
Tue May 4 01:11:36 CEST 2021


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 at 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 at %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



More information about the U-Boot mailing list