
Adjust the code for these commands so that they work on sandbox.
Signed-off-by: Simon Glass sjg@chromium.org --- Changes in v2: - Add new patch to get 'env import/export' working on sandbox
common/cmd_nvedit.c | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-)
diff --git a/common/cmd_nvedit.c b/common/cmd_nvedit.c index 2478c95..e8493c2 100644 --- a/common/cmd_nvedit.c +++ b/common/cmd_nvedit.c @@ -49,6 +49,7 @@ #include <watchdog.h> #include <linux/stddef.h> #include <asm/byteorder.h> +#include <asm/io.h>
DECLARE_GLOBAL_DATA_PTR;
@@ -864,7 +865,8 @@ static int do_env_export(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { char buf[32]; - char *addr, *cmd, *res; + ulong addr; + char *ptr, *cmd, *res; size_t size = 0; ssize_t len; env_t *envp; @@ -909,10 +911,11 @@ NXTARG: ; if (argc < 1) return CMD_RET_USAGE;
- addr = (char *)simple_strtoul(argv[0], NULL, 16); + addr = simple_strtoul(argv[0], NULL, 16); + ptr = map_sysmem(addr, size);
if (size) - memset(addr, '\0', size); + memset(ptr, '\0', size);
argc--; argv++; @@ -920,7 +923,7 @@ NXTARG: ; if (sep) { /* export as text file */ len = hexport_r(&env_htab, sep, H_MATCH_KEY | H_MATCH_IDENT, - &addr, size, argc, argv); + &ptr, size, argc, argv); if (len < 0) { error("Cannot export environment: errno = %d\n", errno); return 1; @@ -931,12 +934,12 @@ NXTARG: ; return 0; }
- envp = (env_t *)addr; + envp = (env_t *)ptr;
if (chk) /* export as checksum protected block */ res = (char *)envp->data; else /* export as raw binary data */ - res = addr; + res = ptr;
len = hexport_r(&env_htab, '\0', H_MATCH_KEY | H_MATCH_IDENT, @@ -978,7 +981,8 @@ sep_err: static int do_env_import(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { - char *cmd, *addr; + ulong addr; + char *cmd, *ptr; char sep = '\n'; int chk = 0; int fmt = 0; @@ -1022,12 +1026,13 @@ static int do_env_import(cmd_tbl_t *cmdtp, int flag, if (!fmt) printf("## Warning: defaulting to text format\n");
- addr = (char *)simple_strtoul(argv[0], NULL, 16); + addr = simple_strtoul(argv[0], NULL, 16); + ptr = map_sysmem(addr, 0);
if (argc == 2) { size = simple_strtoul(argv[1], NULL, 16); } else { - char *s = addr; + char *s = ptr;
size = 0;
@@ -1047,7 +1052,7 @@ static int do_env_import(cmd_tbl_t *cmdtp, int flag,
if (chk) { uint32_t crc; - env_t *ep = (env_t *)addr; + env_t *ep = (env_t *)ptr;
size -= offsetof(env_t, data); memcpy(&crc, &ep->crc, sizeof(crc)); @@ -1056,11 +1061,11 @@ static int do_env_import(cmd_tbl_t *cmdtp, int flag, puts("## Error: bad CRC, import failed\n"); return 1; } - addr = (char *)ep->data; + ptr = (char *)ep->data; }
- if (himport_r(&env_htab, addr, size, sep, del ? 0 : H_NOCLEAR, - 0, NULL) == 0) { + if (himport_r(&env_htab, ptr, size, sep, del ? 0 : H_NOCLEAR, 0, + NULL) == 0) { error("Environment import failed: errno = %d\n", errno); return 1; }