diff options
| author | Rob Herring <rob.herring@calxeda.com> | 2012-12-02 21:00:28 -0600 | 
|---|---|---|
| committer | Joe Hershberger <joe.hershberger@ni.com> | 2013-06-24 19:07:34 -0500 | 
| commit | 39f985536d3f0df5dba32c15b64ba2b5d32dd296 (patch) | |
| tree | 0a29ef67c44b1e77fcdfa1e0b64baa994e739d79 /common | |
| parent | 8577fec976c58a0bd1c2c767f9dba058043624f4 (diff) | |
| download | olio-uboot-2014.01-39f985536d3f0df5dba32c15b64ba2b5d32dd296.tar.xz olio-uboot-2014.01-39f985536d3f0df5dba32c15b64ba2b5d32dd296.zip | |
pxe: add support for per arch and SoC default paths
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>
Diffstat (limited to 'common')
| -rw-r--r-- | common/cmd_pxe.c | 26 | 
1 files changed, 20 insertions, 6 deletions
| diff --git a/common/cmd_pxe.c b/common/cmd_pxe.c index 5a239edeb..59483a75c 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; @@ -360,16 +367,23 @@ do_pxe_get(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])  	 * Keep trying paths until we successfully get a file we're looking  	 * for.  	 */ -	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) { - +	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) {  		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; |