From: Zhaofeng Li <hello@zhaofeng.li>
Date: Wed, 20 Oct 2021 07:18:15 +0000 (-0700)
Subject: pxe_utils: Clean up {bootm,zboot}_argv generation
X-Git-Tag: v2025.01-rc5-pxa1908~1656^2~7
X-Git-Url: http://git.dujemihanovic.xyz/img/html/static/%7B%7B?a=commitdiff_plain;h=c97bd17b2cfea02c9ef34f889bfb336b7c645cf2;p=u-boot.git

pxe_utils: Clean up {bootm,zboot}_argv generation

Signed-off-by: Zhaofeng Li <hello@zhaofeng.li>
Cc: Simon Glass <sjg@chromium.org>
Cc: Bin Meng <bmeng.cn@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
---

diff --git a/cmd/pxe_utils.c b/cmd/pxe_utils.c
index 78ebfdcc79..b79fcb6418 100644
--- a/cmd/pxe_utils.c
+++ b/cmd/pxe_utils.c
@@ -442,15 +442,17 @@ static int label_boot(struct cmd_tbl *cmdtp, struct pxe_label *label)
 {
 	char *bootm_argv[] = { "bootm", NULL, NULL, NULL, NULL };
 	char *zboot_argv[] = { "zboot", NULL, "0", NULL, NULL };
-	char initrd_str[28];
+	char *kernel_addr = NULL;
+	char *initrd_addr_str = NULL;
 	char initrd_filesize[10];
+	char initrd_str[28];
 	char mac_str[29] = "";
 	char ip_str[68] = "";
 	char *fit_addr = NULL;
 	int bootm_argc = 2;
 	int zboot_argc = 3;
 	int len = 0;
-	ulong kernel_addr;
+	ulong kernel_addr_r;
 	void *buf;
 
 	label_print(label);
@@ -476,16 +478,12 @@ static int label_boot(struct cmd_tbl *cmdtp, struct pxe_label *label)
 			return 1;
 		}
 
-		bootm_argv[2] = initrd_str;
-		strncpy(bootm_argv[2], env_get("ramdisk_addr_r"), 18);
-		strcat(bootm_argv[2], ":");
-		strncat(bootm_argv[2], env_get("filesize"), 9);
-		bootm_argc = 3;
-
+		initrd_addr_str = env_get("ramdisk_addr_r");
 		strncpy(initrd_filesize, env_get("filesize"), 9);
-		zboot_argv[3] = env_get("ramdisk_addr_r");
-		zboot_argv[4] = initrd_filesize;
-		zboot_argc = 5;
+
+		strncpy(initrd_str, initrd_addr_str, 18);
+		strcat(initrd_str, ":");
+		strncat(initrd_str, initrd_filesize, 9);
 	}
 
 	if (get_relfile_envaddr(cmdtp, label->kernel, "kernel_addr_r") < 0) {
@@ -536,20 +534,19 @@ static int label_boot(struct cmd_tbl *cmdtp, struct pxe_label *label)
 		printf("append: %s\n", finalbootargs);
 	}
 
-	bootm_argv[1] = env_get("kernel_addr_r");
-	zboot_argv[1] = env_get("kernel_addr_r");
+	kernel_addr = env_get("kernel_addr_r");
 
 	/* for FIT, append the configuration identifier */
 	if (label->config) {
-		int len = strlen(bootm_argv[1]) + strlen(label->config) + 1;
+		int len = strlen(kernel_addr) + strlen(label->config) + 1;
 
 		fit_addr = malloc(len);
 		if (!fit_addr) {
 			printf("malloc fail (FIT address)\n");
 			return 1;
 		}
-		snprintf(fit_addr, len, "%s%s", bootm_argv[1], label->config);
-		bootm_argv[1] = fit_addr;
+		snprintf(fit_addr, len, "%s%s", kernel_addr, label->config);
+		kernel_addr = fit_addr;
 	}
 
 	/*
@@ -653,6 +650,18 @@ static int label_boot(struct cmd_tbl *cmdtp, struct pxe_label *label)
 		}
 	}
 
+	bootm_argv[1] = kernel_addr;
+	zboot_argv[1] = kernel_addr;
+
+	if (initrd_addr_str) {
+		bootm_argv[2] = initrd_str;
+		bootm_argc = 3;
+
+		zboot_argv[3] = initrd_addr_str;
+		zboot_argv[4] = initrd_filesize;
+		zboot_argc = 5;
+	}
+
 	if (!bootm_argv[3])
 		bootm_argv[3] = env_get("fdt_addr");
 
@@ -662,8 +671,8 @@ static int label_boot(struct cmd_tbl *cmdtp, struct pxe_label *label)
 		bootm_argc = 4;
 	}
 
-	kernel_addr = genimg_get_kernel_addr(bootm_argv[1]);
-	buf = map_sysmem(kernel_addr, 0);
+	kernel_addr_r = genimg_get_kernel_addr(kernel_addr);
+	buf = map_sysmem(kernel_addr_r, 0);
 	/* Try bootm for legacy and FIT format image */
 	if (genimg_get_format(buf) != IMAGE_FORMAT_INVALID)
 		do_bootm(cmdtp, 0, bootm_argc, bootm_argv);