This command allows you to read the value of a memory address and store
it in an environment variable.

Signed-off-by: Joe Hershberger <joe.hershber...@ni.com>
---
 common/cmd_mem.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 47 insertions(+)

diff --git a/common/cmd_mem.c b/common/cmd_mem.c
index 18f0a3f..08c7d69 100644
--- a/common/cmd_mem.c
+++ b/common/cmd_mem.c
@@ -32,6 +32,7 @@
 #ifdef CONFIG_HAS_DATAFLASH
 #include <dataflash.h>
 #endif
+#include <asm/io.h>
 #include <watchdog.h>
 
 static int mod_mem(cmd_tbl_t *, int, int, int, char * const []);
@@ -147,6 +148,45 @@ int do_mem_md ( cmd_tbl_t *cmdtp, int flag, int argc, char 
* const argv[])
        return (rc);
 }
 
+#ifdef CONFIG_CMD_MEM_GET
+int do_mem_mg(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+       ulong addr;
+       int size;
+       char *var;
+       char buf[11];
+
+       if (argc < 3)
+               return CMD_RET_USAGE;
+
+       /* Check for a size specification.
+        * Defaults to long if no or incorrect specification.
+        */
+       size = cmd_get_data_size(argv[0], 4);
+       if (size < 0)
+               return 1;
+
+       var = argv[1];
+
+       addr = simple_strtoul(argv[2], NULL, 16);
+       addr += base_address;
+
+       if (size == 4) {
+               uint32_t value = readl(addr);
+               sprintf(buf, "0x%08x", value);
+       } else if (size == 2) {
+               uint16_t value = readw(addr);
+               sprintf(buf, "0x%04x", value);
+       } else {
+               uint8_t value = readb(addr);
+               sprintf(buf, "0x%02x", value);
+       }
+       setenv(var, buf);
+
+       return 0;
+}
+#endif
+
 int do_mem_mm ( cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
        return mod_mem (cmdtp, 1, flag, argc, argv);
@@ -1145,6 +1185,13 @@ U_BOOT_CMD(
        "[.b, .w, .l] address [# of objects]"
 );
 
+#ifdef CONFIG_CMD_MEM_GET
+U_BOOT_CMD(
+       mg,     3,      1,      do_mem_mg,
+       "memory get",
+       "[.b, .w, .l] variable address"
+);
+#endif
 
 U_BOOT_CMD(
        mm,     2,      1,      do_mem_mm,
-- 
1.7.11.5

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to