
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.hershberger@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,