
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(-)
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;