* [U-Boot] [PATCH] Add a memory get command
@ 2012-08-17 20:58 Joe Hershberger
2012-08-17 23:47 ` Mike Frysinger
2012-09-02 19:10 ` Wolfgang Denk
0 siblings, 2 replies; 6+ messages in thread
From: Joe Hershberger @ 2012-08-17 20:58 UTC (permalink / raw)
To: u-boot
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,
--
1.7.11.5
^ permalink raw reply related [flat|nested] 6+ messages in thread* [U-Boot] [PATCH] Add a memory get command
2012-08-17 20:58 [U-Boot] [PATCH] Add a memory get command Joe Hershberger
@ 2012-08-17 23:47 ` Mike Frysinger
2012-09-02 19:10 ` Wolfgang Denk
1 sibling, 0 replies; 6+ messages in thread
From: Mike Frysinger @ 2012-08-17 23:47 UTC (permalink / raw)
To: u-boot
On Friday 17 August 2012 16:58:41 Joe Hershberger wrote:
> --- a/common/cmd_mem.c
> +++ b/common/cmd_mem.c
>
> +#ifdef CONFIG_CMD_MEM_GET
not the greatest name ...
> +int do_mem_mg(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
static
> + 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);
why use io.h commands ? we don't use it with any of the other mem commands.
-mike
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20120817/3ed5d089/attachment.pgp>
^ permalink raw reply [flat|nested] 6+ messages in thread* [U-Boot] [PATCH] Add a memory get command
2012-08-17 20:58 [U-Boot] [PATCH] Add a memory get command Joe Hershberger
2012-08-17 23:47 ` Mike Frysinger
@ 2012-09-02 19:10 ` Wolfgang Denk
[not found] ` <OFBA608614.0C8902BC-ON86257A6F.0051AAED-86257A6F.005233E4@ni.com>
2012-11-02 2:21 ` [U-Boot] [PATCH v2] Add a simple load option to setexpr Joe Hershberger
1 sibling, 2 replies; 6+ messages in thread
From: Wolfgang Denk @ 2012-09-02 19:10 UTC (permalink / raw)
To: u-boot
Dear Joe Hershberger,
In message <1345237121-20594-1-git-send-email-joe.hershberger@ni.com> you wrote:
> 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(+)
This seems redundant to me.
We already have similar functionality in the "setexpr" command.
Instead of your "mg var $addr" you can do "setexpr var $addr \| 0"
today. I do agree that this looks a bit circuitous and suggest to
change the "setexpr" such that in addition to the regular
setexpr [.b, .w, .l] name value1 <op> value2
syntax it will also accept
setexpr [.b, .w, .l] name value1
in which case it would set the variable "name" to the value of
"value1".
What do you think?
Best regards,
Wolfgang Denk
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Felson's Law:
To steal ideas from one person is plagiarism; to steal from
many is research.
^ permalink raw reply [flat|nested] 6+ messages in thread[parent not found: <OFBA608614.0C8902BC-ON86257A6F.0051AAED-86257A6F.005233E4@ni.com>]
* [U-Boot] [PATCH] Add a memory get command
[not found] ` <OFBA608614.0C8902BC-ON86257A6F.0051AAED-86257A6F.005233E4@ni.com>
@ 2012-09-04 22:00 ` Wolfgang Denk
0 siblings, 0 replies; 6+ messages in thread
From: Wolfgang Denk @ 2012-09-04 22:00 UTC (permalink / raw)
To: u-boot
Dear Joseph Hershberger,
In message <OFBA608614.0C8902BC-ON86257A6F.0051AAED-86257A6F.005233E4@ni.com> you wrote:
> <html><body>
> <p><tt><font size="2">Wolfgang Denk <wd at denx.de> wrote on 09/02/2012 02:10:42 PM:<br>
> <br>
> > From: Wolfgang Denk <wd at denx.de></font></tt><br>
> <tt><font size="2">> To: Joe Hershberger <joe.hershberger at ni.com></font></tt><br>
> <tt><font size="2">> Cc: u-boot at lists.denx.de</font></tt><br>
> <tt><font size="2">> Date: 09/02/2012 02:10 PM</font></tt><br>
> <tt><font size="2">> Subject: Re: [PATCH] Add a memory get command</font></tt><br>
> <tt><font size="2">> <br>
Message ignored. Please STOP posting HTML.
Best regards,
Wolfgang Denk
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
"Once they go up, who cares where they come down? That's not my
department." - Werner von Braun
^ permalink raw reply [flat|nested] 6+ messages in thread
* [U-Boot] [PATCH v2] Add a simple load option to setexpr
2012-09-02 19:10 ` Wolfgang Denk
[not found] ` <OFBA608614.0C8902BC-ON86257A6F.0051AAED-86257A6F.005233E4@ni.com>
@ 2012-11-02 2:21 ` Joe Hershberger
2012-12-19 23:00 ` [U-Boot] [U-Boot,v2] " Tom Rini
1 sibling, 1 reply; 6+ messages in thread
From: Joe Hershberger @ 2012-11-02 2:21 UTC (permalink / raw)
To: u-boot
Make setexpr accept a 2 parameter variant that will simply load a value
into a variable. This is useful for loading a value from memory.
Signed-off-by: Joe Hershberger <joe.hershberger@ni.com>
---
Changes in v2:
- Replaced memory get command with option to setexpr
common/cmd_setexpr.c | 19 ++++++++++++++++---
1 file changed, 16 insertions(+), 3 deletions(-)
diff --git a/common/cmd_setexpr.c b/common/cmd_setexpr.c
index 1b3edb7..70133b0 100644
--- a/common/cmd_setexpr.c
+++ b/common/cmd_setexpr.c
@@ -57,12 +57,22 @@ int do_setexpr(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
int w;
/* Validate arguments */
- if ((argc != 5) || (strlen(argv[3]) != 1))
+ if (argc != 5 && argc != 3)
+ return CMD_RET_USAGE;
+ if (argc == 5 && strlen(argv[3]) != 1)
return CMD_RET_USAGE;
w = cmd_get_data_size(argv[0], 4);
a = get_arg(argv[2], w);
+
+ if (argc == 3) {
+ sprintf(buf, "%lx", a);
+ setenv(argv[1], buf);
+
+ return 0;
+ }
+
b = get_arg(argv[4], w);
switch (argv[3][0]) {
@@ -87,8 +97,11 @@ int do_setexpr(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
U_BOOT_CMD(
setexpr, 5, 0, do_setexpr,
"set environment variable as the result of eval expression",
- "[.b, .w, .l] name value1 <op> value2\n"
+ "[.b, .w, .l] name [*]value1 <op> [*]value2\n"
" - set environment variable 'name' to the result of the evaluated\n"
" express specified by <op>. <op> can be &, |, ^, +, -, *, /, %\n"
- " size argument is only meaningful if value1 and/or value2 are memory addresses"
+ " size argument is only meaningful if value1 and/or value2 are\n"
+ " memory addresses (*)\n"
+ "setexpr[.b, .w, .l] name *value\n"
+ " - load a memory address into a variable"
);
--
1.7.11.5
^ permalink raw reply related [flat|nested] 6+ messages in thread
end of thread, other threads:[~2012-12-19 23:00 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-08-17 20:58 [U-Boot] [PATCH] Add a memory get command Joe Hershberger
2012-08-17 23:47 ` Mike Frysinger
2012-09-02 19:10 ` Wolfgang Denk
[not found] ` <OFBA608614.0C8902BC-ON86257A6F.0051AAED-86257A6F.005233E4@ni.com>
2012-09-04 22:00 ` Wolfgang Denk
2012-11-02 2:21 ` [U-Boot] [PATCH v2] Add a simple load option to setexpr Joe Hershberger
2012-12-19 23:00 ` [U-Boot] [U-Boot,v2] " Tom Rini
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox