]> git.ipfire.org Git - people/ms/u-boot.git/commitdiff
cmd: bootvx: Always get VxWorks bootline from env
authorBin Meng <bmeng.cn@gmail.com>
Thu, 8 Oct 2015 03:19:17 +0000 (20:19 -0700)
committerSimon Glass <sjg@chromium.org>
Wed, 21 Oct 2015 13:46:26 +0000 (07:46 -0600)
So far VxWorks bootline can be contructed from various environment
variables, but when these variables do not exist we get these from
corresponding config macros. This is not helpful as it requires
rebuilding U-Boot, and to make sure these config macros take effect
we should not have these environment variables. This is a little
bit complex and confusing.

Now we change the logic to always contruct the bootline from
environments (the only single source), by adding two new variables
"bootdev" and "othbootargs", and adding some comments about network
related settings mentioning they are optional. The doc about the
bootline handling is also updated.

Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
Reviewed-by: Tom Rini <trini@konsulko.com>
Tested-by: Hannes Schmelzer <oe5hpm@oevsv.at>
README
common/cmd_elf.c
include/vxworks.h

diff --git a/README b/README
index 0dc657d0a583739a817f07f52e0f9572b30c8861..d18df54ec9a14d662f4a6495b45aa92c61aa9962 100644 (file)
--- 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.
 
index 6a0937823fba2f5c50e07729f5cb98a47ee2edda..da70ef3e816a95295bec3987ff960092dc365e3b 100644 (file)
@@ -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();
index 122043c941e9b17b41c6d10df4b8449aa18b458b..297a70f5199e853ffe0d420eec7b97ac84d0ffcf 100644 (file)
@@ -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