diff --git a/board/ruby/ruby.c b/board/ruby/ruby.c
index c1e0c5c..3d6947b 100644
--- a/board/ruby/ruby.c
+++ b/board/ruby/ruby.c
@@ -199,7 +199,7 @@
 		}
 	}
 #ifdef CONFIG_CMD_HNVRAM
-        RUN("hnvram");
+        RUN("hnvram load");
 #endif
 	return 0;
 }
diff --git a/common/cmd_hnvram.c b/common/cmd_hnvram.c
index 52f0ae1..2f4d308 100644
--- a/common/cmd_hnvram.c
+++ b/common/cmd_hnvram.c
@@ -25,6 +25,7 @@
 #include <common.h>
 #include <malloc.h>
 #include <spi_flash.h>
+#include <asm/byteorder.h>
 
 /* local debug macro */
 #undef HNVRAM_DEBUG
@@ -221,7 +222,7 @@
 }
 
 #if defined(CONFIG_CMD_HNVRAM)
-int do_hnvram(void) {
+int do_hnvram_load(void) {
         char command[60];
         sprintf(command, "spi_flash read 0x%x 0x%x 0x%x", HNVRAM_MTD_OFFSET, HNVRAM_DRAM_OFFSET, MAX_HNVRAM_SIZE);
         int ret = run_command(command, 0);
@@ -248,19 +249,97 @@
                 return -1;
         }
 
-        free(buf);
+        return CMD_RET_SUCCESS;
+}
+
+int do_hnvram_init(char *val) {
+        // Erase entire partition
+        char command[60];
+        sprintf(command, "spi_flash erase 0x%x 0x%x", HNVRAM_MTD_OFFSET, MAX_HNVRAM_SIZE);
+        int ret = run_command(command, 0);
+
+        if (ret) {
+          printf("failed to erase hnvram partition\n");
+          return ret;
+        }
+
+        char key[] = "PLATFORM_NAME";
+        int val_len = strlen(val);
+        // size variable should fit in one byte
+        if (val_len < 1 || 255 < val_len) {
+          printf("Intial value for %s has bad size: %d", key, val_len);
+          return CMD_RET_FAILURE;
+        }
+        // +5 to count key length (1) and record length (4) bytes
+        int rec_len = sizeof(key) + val_len + 5;
+
+        // Use 2MB of (hopefully) free DRAM
+        char *buf = HNVRAM_DRAM_OFFSET;
+        memset(buf, 0x00, MAX_HNVRAM_SIZE);
+
+        // Write platform_name to RW section
+        int i = HNVRAM_B1_OFFSET;
+
+        // Record start
+        buf[i++] = 0x01;
+
+        // Record length
+        int nbyte_order = htonl(rec_len); // hnvram expects big endian
+        memcpy(buf + i, &nbyte_order, sizeof(nbyte_order));
+        i += sizeof(nbyte_order);
+
+        // Key length
+        buf[i++] = sizeof(key);
+
+        // Key
+        memcpy(buf + i, &key, sizeof(key));
+        i += sizeof(key);
+
+        // Val length
+        nbyte_order = htonl(val_len);
+        memcpy(buf + i, &nbyte_order, sizeof(nbyte_order));
+        i += sizeof(nbyte_order);
+
+        // Val
+        memcpy(buf + i, val, val_len);
+
+        sprintf(command, "spi_flash write 0x%x 0x%p 0x%x", HNVRAM_MTD_OFFSET, buf, MAX_HNVRAM_SIZE);
+        ret = run_command(command, 0);
+
+        if (ret) {
+          printf("failed to write init to hnvram partition\n");
+          return ret;
+        }
+
+        // Load platform_name into environment variables
+        do_hnvram_load();
+
         return CMD_RET_SUCCESS;
 }
 
 static int do_hnvram_cmd(cmd_tbl_t *cmdtp, int flag, int argc,
                 char * const argv[]) {
-        return do_hnvram();
+        if (argc == 2 && strcmp(argv[1], "load") == 0) {
+          return do_hnvram_load();
+        } else if (argc == 2 && strcmp(argv[1], "init") == 0) {
+          return do_hnvram_init("GFRG240");
+        } else if (argc == 3 && strcmp(argv[1], "init") == 0) {
+          return do_hnvram_init(argv[2]);
+        } else {
+          printf("hnvram - incorrect usage. Please use one of:\n");
+          printf("hnvram load\n");
+          printf("hnvram init <model>\n");
+          return CMD_RET_USAGE;
+        }
 }
 
 U_BOOT_CMD(
-        hnvram, 1, 0, do_hnvram_cmd,
-        "load hnvram from flash",
+        hnvram, 3, 0, do_hnvram_cmd,
+        "HNVRAM key-val storage on flash",
         "\n"
-        "load hnvram from flash into environment vars named HNV_<name>\n"
+        "hnvram load            - reads all variables from flash partition and"
+        "                         places into environment vars as HNV_<name>"
+        "hnvram init [model]    - zeros hnvram and writes PLATFORM_NAME=<model>"
+        "                         Uses GFRG240 by default if no arg given"
         );
 #endif  /* CONFIG_CMD_HNVRAM */
