rockchip: misc: protect serial# from getting overwritten
[oweals/u-boot.git] / cmd / net.c
index f83839c35ec5e065c30b7f159615862d524cd819..237403977e8006c651182d01534912aaeeca9676 100644 (file)
--- a/cmd/net.c
+++ b/cmd/net.c
@@ -9,6 +9,7 @@
  */
 #include <common.h>
 #include <command.h>
+#include <env.h>
 #include <net.h>
 
 static int netboot_common(enum proto_t, cmd_tbl_t *, int, char * const []);
@@ -183,6 +184,8 @@ static int netboot_common(enum proto_t proto, cmd_tbl_t *cmdtp, int argc,
        int   size;
        ulong addr;
 
+       net_boot_file_name_explicit = false;
+
        /* pre-set load_addr */
        s = env_get("loadaddr");
        if (s != NULL)
@@ -190,6 +193,9 @@ static int netboot_common(enum proto_t proto, cmd_tbl_t *cmdtp, int argc,
 
        switch (argc) {
        case 1:
+               /* refresh bootfile name from env */
+               copy_filename(net_boot_file_name, env_get("bootfile"),
+                             sizeof(net_boot_file_name));
                break;
 
        case 2: /*
@@ -199,15 +205,21 @@ static int netboot_common(enum proto_t proto, cmd_tbl_t *cmdtp, int argc,
                 * mis-interpreted as a valid number.
                 */
                addr = simple_strtoul(argv[1], &end, 16);
-               if (end == (argv[1] + strlen(argv[1])))
+               if (end == (argv[1] + strlen(argv[1]))) {
                        load_addr = addr;
-               else
+                       /* refresh bootfile name from env */
+                       copy_filename(net_boot_file_name, env_get("bootfile"),
+                                     sizeof(net_boot_file_name));
+               } else {
+                       net_boot_file_name_explicit = true;
                        copy_filename(net_boot_file_name, argv[1],
                                      sizeof(net_boot_file_name));
+               }
                break;
 
        case 3:
                load_addr = simple_strtoul(argv[1], NULL, 16);
+               net_boot_file_name_explicit = true;
                copy_filename(net_boot_file_name, argv[2],
                              sizeof(net_boot_file_name));
 
@@ -220,6 +232,7 @@ static int netboot_common(enum proto_t proto, cmd_tbl_t *cmdtp, int argc,
                        printf("Invalid address/size\n");
                        return CMD_RET_USAGE;
                }
+               net_boot_file_name_explicit = true;
                copy_filename(net_boot_file_name, argv[3],
                              sizeof(net_boot_file_name));
                break;