diff --git a/README b/README
index 0dc657d..d18df54 100644
--- a/README
+++ b/README
@@ -796,18 +796,10 @@
 - 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 @@
 
 	/*
 	 * 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
+	if (!tmp) {
+		printf("## VxWorks bootline address not specified\n");
+	} 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));
-	} 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);
+		/*
+		 * 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("ipaddr");
-		if (tmp) {
-			ptr += sprintf(build_buf + ptr, "e=%s", tmp);
-			tmp = getenv("netmask");
+			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 @@
 	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_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
