Patchwork [U-Boot,09/10] pxe: add support for per arch and SoC default paths

login
register
mail settings
Submitter Rob Herring
Date Dec. 3, 2012, 3 a.m.
Message ID <1354503629-25621-10-git-send-email-robherring2@gmail.com>
Download mbox | patch
Permalink /patch/203278/
State Accepted
Delegated to: Joe Hershberger
Headers show

Comments

Rob Herring - Dec. 3, 2012, 3 a.m.
From: Rob Herring <rob.herring@calxeda.com>

A pxelinux server setup for "default" menu is typically an x86 binary.
This does not work well with a mixed architecture setup. Extend the default
search to look for default-<arch>-<soc> and then default-<arch> before
falling back to just "default".

Signed-off-by: Rob Herring <rob.herring@calxeda.com>
---
 common/cmd_pxe.c |   20 +++++++++++++++++---
 1 file changed, 17 insertions(+), 3 deletions(-)

Patch

diff --git a/common/cmd_pxe.c b/common/cmd_pxe.c
index 93c8df5..f834d31 100644
--- a/common/cmd_pxe.c
+++ b/common/cmd_pxe.c
@@ -26,6 +26,13 @@ 
 
 #define MAX_TFTP_PATH_LEN 127
 
+const char *pxe_default_paths[] = {
+	"default-" CONFIG_SYS_ARCH "-" CONFIG_SYS_SOC,
+	"default-" CONFIG_SYS_ARCH,
+	"default",
+	NULL
+};
+
 /*
  * Like getenv, but prints an error if envvar isn't defined in the
  * environment.  It always returns what getenv does, so it can be used in
@@ -339,7 +346,7 @@  do_pxe_get(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
 	char *pxefile_addr_str;
 	unsigned long pxefile_addr_r;
-	int err;
+	int err, i = 0;
 
 	do_getfile = do_get_tftp;
 
@@ -362,14 +369,21 @@  do_pxe_get(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 	 */
 	if (pxe_uuid_path((void *)pxefile_addr_r) > 0
 		|| pxe_mac_path((void *)pxefile_addr_r) > 0
-		|| pxe_ipaddr_paths((void *)pxefile_addr_r) > 0
-		|| get_pxelinux_path("default", (void *)pxefile_addr_r) > 0) {
+		|| pxe_ipaddr_paths((void *)pxefile_addr_r) > 0) {
 
 		printf("Config file found\n");
 
 		return 0;
 	}
 
+	while (pxe_default_paths[i]) {
+		if (get_pxelinux_path(pxe_default_paths[i], (void *)pxefile_addr_r) > 0) {
+			printf("Config file found\n");
+			return 0;
+		}
+		i++;
+	}
+
 	printf("Config file not found\n");
 
 	return 1;