U-Boot Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [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

* [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 &lt;wd at denx.de&gt; wrote on 09/02/2012 02:10:42 PM:<br>
> <br>
> &gt; From: Wolfgang Denk &lt;wd at denx.de&gt;</font></tt><br>
> <tt><font size="2">&gt; To: Joe Hershberger &lt;joe.hershberger at ni.com&gt;</font></tt><br>
> <tt><font size="2">&gt; Cc: u-boot at lists.denx.de</font></tt><br>
> <tt><font size="2">&gt; Date: 09/02/2012 02:10 PM</font></tt><br>
> <tt><font size="2">&gt; Subject: Re: [PATCH] Add a memory get command</font></tt><br>
> <tt><font size="2">&gt; <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

* [U-Boot] [U-Boot,v2] Add a simple load option to setexpr
  2012-11-02  2:21   ` [U-Boot] [PATCH v2] Add a simple load option to setexpr Joe Hershberger
@ 2012-12-19 23:00     ` Tom Rini
  0 siblings, 0 replies; 6+ messages in thread
From: Tom Rini @ 2012-12-19 23:00 UTC (permalink / raw)
  To: u-boot

On Thu, Nov 01, 2012 at 04:21:14PM -0000, Joe Hershberger wrote:

> 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>

Applied to u-boot/master, thanks!

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20121219/da88d448/attachment.pgp>

^ permalink raw reply	[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