summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README12
-rw-r--r--common/cmd_elf.c119
-rw-r--r--include/vxworks.h22
3 files changed, 68 insertions, 85 deletions
diff --git a/README b/README
index 0dc657d..d18df54 100644
--- a/README
+++ b/README
@@ -796,18 +796,10 @@ The following options need to be configured:
- vxWorks boot parameters:
bootvx constructs a valid bootline using the following
- environments variables: bootfile, ipaddr, serverip, hostname.
+ environments variables: bootdev, bootfile, ipaddr, netmask,
+ serverip, gatewayip, hostname, othbootargs.
It loads the vxWorks image pointed bootfile.
- CONFIG_SYS_VXWORKS_BOOT_DEVICE - The vxworks device name
- CONFIG_SYS_VXWORKS_MAC_PTR - Ethernet 6 byte MA -address
- CONFIG_SYS_VXWORKS_SERVERNAME - Name of the server
- CONFIG_SYS_VXWORKS_BOOT_ADDR - Address of boot parameters
-
- CONFIG_SYS_VXWORKS_ADD_PARAMS
-
- Add it at the end of the bootline. E.g "u=username pw=secret"
-
Note: If a "bootargs" environment is defined, it will overwride
the defaults discussed just above.
diff --git a/common/cmd_elf.c b/common/cmd_elf.c
index 6a09378..da70ef3 100644
--- a/common/cmd_elf.c
+++ b/common/cmd_elf.c
@@ -257,68 +257,83 @@ int do_bootvx(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
/*
* Use bootaddr to find the location in memory that VxWorks
- * will look for the bootline string. The default value for
- * PowerPC is LOCAL_MEM_LOCAL_ADRS + BOOT_LINE_OFFSET which
- * defaults to 0x4200.
+ * will look for the bootline string. The default value is
+ * (LOCAL_MEM_LOCAL_ADRS + BOOT_LINE_OFFSET) as defined by
+ * VxWorks BSP. For example, on PowerPC it defaults to 0x4200.
*/
tmp = getenv("bootaddr");
- if (!tmp)
- bootaddr = CONFIG_SYS_VXWORKS_BOOT_ADDR;
- else
- bootaddr = simple_strtoul(tmp, NULL, 16);
-
- /*
- * Check to see if the bootline is defined in the 'bootargs'
- * parameter. If it is not defined, we may be able to
- * construct the info.
- */
- bootline = getenv("bootargs");
- if (bootline) {
- memcpy((void *)bootaddr, bootline,
- max(strlen(bootline), (size_t)255));
- flush_cache(bootaddr, max(strlen(bootline), (size_t)255));
+ if (!tmp) {
+ printf("## VxWorks bootline address not specified\n");
} else {
- ptr = sprintf(build_buf, CONFIG_SYS_VXWORKS_BOOT_DEVICE);
- tmp = getenv("bootfile");
- if (tmp)
- ptr += sprintf(build_buf + ptr, "%s:%s ",
- CONFIG_SYS_VXWORKS_SERVERNAME, tmp);
- else
- ptr += sprintf(build_buf + ptr, "%s:file ",
- CONFIG_SYS_VXWORKS_SERVERNAME);
+ bootaddr = simple_strtoul(tmp, NULL, 16);
- tmp = getenv("ipaddr");
- if (tmp) {
- ptr += sprintf(build_buf + ptr, "e=%s", tmp);
- tmp = getenv("netmask");
+ /*
+ * Check to see if the bootline is defined in the 'bootargs'
+ * parameter. If it is not defined, we may be able to
+ * construct the info.
+ */
+ bootline = getenv("bootargs");
+ if (bootline) {
+ memcpy((void *)bootaddr, bootline,
+ max(strlen(bootline), (size_t)255));
+ flush_cache(bootaddr, max(strlen(bootline),
+ (size_t)255));
+ } else {
+ tmp = getenv("bootdev");
+ if (tmp)
+ ptr = sprintf(build_buf, tmp);
+ else
+ printf("## VxWorks boot device not specified\n");
+
+ tmp = getenv("bootfile");
+ if (tmp)
+ ptr += sprintf(build_buf + ptr,
+ "host:%s ", tmp);
+ else
+ ptr += sprintf(build_buf + ptr,
+ "host:vxWorks ");
+
+ /*
+ * The following parameters are only needed if 'bootdev'
+ * is an ethernet device, otherwise they are optional.
+ */
+ tmp = getenv("ipaddr");
if (tmp) {
- __be32 addr = getenv_ip("netmask").s_addr;
- ptr += sprintf(build_buf + ptr, ":%08x ",
- ntohl(addr));
- } else {
- ptr += sprintf(build_buf + ptr, " ");
+ ptr += sprintf(build_buf + ptr, "e=%s", tmp);
+ tmp = getenv("netmask");
+ if (tmp) {
+ u32 mask = getenv_ip("netmask").s_addr;
+ ptr += sprintf(build_buf + ptr,
+ ":%08x ", ntohl(mask));
+ } else {
+ ptr += sprintf(build_buf + ptr, " ");
+ }
}
- }
- tmp = getenv("serverip");
- if (tmp)
- ptr += sprintf(build_buf + ptr, "h=%s ", tmp);
+ tmp = getenv("serverip");
+ if (tmp)
+ ptr += sprintf(build_buf + ptr, "h=%s ", tmp);
- tmp = getenv("gatewayip");
- if (tmp)
- ptr += sprintf(build_buf + ptr, "g=%s ", tmp);
+ tmp = getenv("gatewayip");
+ if (tmp)
+ ptr += sprintf(build_buf + ptr, "g=%s ", tmp);
- tmp = getenv("hostname");
- if (tmp)
- ptr += sprintf(build_buf + ptr, "tn=%s ", tmp);
+ tmp = getenv("hostname");
+ if (tmp)
+ ptr += sprintf(build_buf + ptr, "tn=%s ", tmp);
-#ifdef CONFIG_SYS_VXWORKS_ADD_PARAMS
- ptr += sprintf(build_buf + ptr, CONFIG_SYS_VXWORKS_ADD_PARAMS);
-#endif
+ tmp = getenv("othbootargs");
+ if (tmp)
+ ptr += sprintf(build_buf + ptr, tmp);
+
+ memcpy((void *)bootaddr, build_buf,
+ max(strlen(build_buf), (size_t)255));
+ flush_cache(bootaddr, max(strlen(build_buf),
+ (size_t)255));
+ }
- memcpy((void *)bootaddr, build_buf,
- max(strlen(build_buf), (size_t)255));
- flush_cache(bootaddr, max(strlen(build_buf), (size_t)255));
+ printf("## Using bootline (@ 0x%lx): %s\n", bootaddr,
+ (char *)bootaddr);
}
/*
@@ -331,8 +346,6 @@ int do_bootvx(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
else
puts("## Not an ELF image, assuming binary\n");
- printf("## Using bootline (@ 0x%lx): %s\n", bootaddr,
- (char *)bootaddr);
printf("## Starting vxWorks at 0x%08lx ...\n", addr);
dcache_disable();
diff --git a/include/vxworks.h b/include/vxworks.h
index 122043c..297a70f 100644
--- a/include/vxworks.h
+++ b/include/vxworks.h
@@ -13,26 +13,4 @@ void boot_prep_vxworks(bootm_headers_t *images);
void boot_jump_vxworks(bootm_headers_t *images);
void do_bootvx_fdt(bootm_headers_t *images);
-/*
- * Use bootaddr to find the location in memory that VxWorks
- * will look for the bootline string. The default value for
- * PowerPC is LOCAL_MEM_LOCAL_ADRS + BOOT_LINE_OFFSET which
- * defaults to 0x4200
- */
-#ifndef CONFIG_SYS_VXWORKS_BOOT_ADDR
-#define CONFIG_SYS_VXWORKS_BOOT_ADDR 0x4200
-#endif
-
-#ifndef CONFIG_SYS_VXWORKS_BOOT_DEVICE
-#if defined(CONFIG_4xx)
-#define CONFIG_SYS_VXWORKS_BOOT_DEVICE "emac(0,0)"
-#else
-#define CONFIG_SYS_VXWORKS_BOOT_DEVICE "eth(0,0)"
-#endif
-#endif
-
-#ifndef CONFIG_SYS_VXWORKS_SERVERNAME
-#define CONFIG_SYS_VXWORKS_SERVERNAME "srv"
-#endif
-
#endif