Commit fd37dac9eb37b543fb1b82a733729514a67bd801
1 parent
146b468eb0
Exists in
v2017.01-smarct4x
and in
40 other branches
sandbox: Support 'env import' and 'env export'
Adjust the code for these commands so that they work on sandbox. Signed-off-by: Simon Glass <sjg@chromium.org> (Adjusted to fix minor merge comflict, when applied) Change-Id: I987dee6194cd5c83f82604caf894fc85e4eb71a8
Showing 1 changed file with 18 additions and 13 deletions Side-by-side Diff
common/cmd_nvedit.c
... | ... | @@ -33,6 +33,7 @@ |
33 | 33 | #include <watchdog.h> |
34 | 34 | #include <linux/stddef.h> |
35 | 35 | #include <asm/byteorder.h> |
36 | +#include <asm/io.h> | |
36 | 37 | |
37 | 38 | DECLARE_GLOBAL_DATA_PTR; |
38 | 39 | |
... | ... | @@ -846,7 +847,8 @@ |
846 | 847 | int argc, char * const argv[]) |
847 | 848 | { |
848 | 849 | char buf[32]; |
849 | - char *addr, *cmd, *res; | |
850 | + ulong addr; | |
851 | + char *ptr, *cmd, *res; | |
850 | 852 | size_t size = 0; |
851 | 853 | ssize_t len; |
852 | 854 | env_t *envp; |
853 | 855 | |
... | ... | @@ -891,10 +893,11 @@ |
891 | 893 | if (argc < 1) |
892 | 894 | return CMD_RET_USAGE; |
893 | 895 | |
894 | - addr = (char *)simple_strtoul(argv[0], NULL, 16); | |
896 | + addr = simple_strtoul(argv[0], NULL, 16); | |
897 | + ptr = map_sysmem(addr, size); | |
895 | 898 | |
896 | 899 | if (size) |
897 | - memset(addr, 'r, '\0', size);', size); | |
900 | + memset(ptr, 'r, '\0', size);', size); | |
898 | 901 | |
899 | 902 | argc--; |
900 | 903 | argv++; |
... | ... | @@ -902,7 +905,7 @@ |
902 | 905 | if (sep) { /* export as text file */ |
903 | 906 | len = hexport_r(&env_htab, sep, |
904 | 907 | H_MATCH_KEY | H_MATCH_IDENT, |
905 | - &addr, size, argc, argv); | |
908 | + &ptr, size, argc, argv); | |
906 | 909 | if (len < 0) { |
907 | 910 | error("Cannot export environment: errno = %d\n", errno); |
908 | 911 | return 1; |
909 | 912 | |
... | ... | @@ -913,12 +916,12 @@ |
913 | 916 | return 0; |
914 | 917 | } |
915 | 918 | |
916 | - envp = (env_t *)addr; | |
919 | + envp = (env_t *)ptr; | |
917 | 920 | |
918 | 921 | if (chk) /* export as checksum protected block */ |
919 | 922 | res = (char *)envp->data; |
920 | 923 | else /* export as raw binary data */ |
921 | - res = addr; | |
924 | + res = ptr; | |
922 | 925 | |
923 | 926 | len = hexport_r(&env_htab, '\0', |
924 | 927 | H_MATCH_KEY | H_MATCH_IDENT, |
... | ... | @@ -960,7 +963,8 @@ |
960 | 963 | static int do_env_import(cmd_tbl_t *cmdtp, int flag, |
961 | 964 | int argc, char * const argv[]) |
962 | 965 | { |
963 | - char *cmd, *addr; | |
966 | + ulong addr; | |
967 | + char *cmd, *ptr; | |
964 | 968 | char sep = '\n'; |
965 | 969 | int chk = 0; |
966 | 970 | int fmt = 0; |
... | ... | @@ -1004,7 +1008,8 @@ |
1004 | 1008 | if (!fmt) |
1005 | 1009 | printf("## Warning: defaulting to text format\n"); |
1006 | 1010 | |
1007 | - addr = (char *)simple_strtoul(argv[0], NULL, 16); | |
1011 | + addr = simple_strtoul(argv[0], NULL, 16); | |
1012 | + ptr = map_sysmem(addr, 0); | |
1008 | 1013 | |
1009 | 1014 | if (argc == 2) { |
1010 | 1015 | size = simple_strtoul(argv[1], NULL, 16); |
... | ... | @@ -1012,7 +1017,7 @@ |
1012 | 1017 | puts("## Error: external checksum format must pass size\n"); |
1013 | 1018 | return CMD_RET_FAILURE; |
1014 | 1019 | } else { |
1015 | - char *s = addr; | |
1020 | + char *s = ptr; | |
1016 | 1021 | |
1017 | 1022 | size = 0; |
1018 | 1023 | |
... | ... | @@ -1032,7 +1037,7 @@ |
1032 | 1037 | |
1033 | 1038 | if (chk) { |
1034 | 1039 | uint32_t crc; |
1035 | - env_t *ep = (env_t *)addr; | |
1040 | + env_t *ep = (env_t *)ptr; | |
1036 | 1041 | |
1037 | 1042 | size -= offsetof(env_t, data); |
1038 | 1043 | memcpy(&crc, &ep->crc, sizeof(crc)); |
1039 | 1044 | |
... | ... | @@ -1041,11 +1046,11 @@ |
1041 | 1046 | puts("## Error: bad CRC, import failed\n"); |
1042 | 1047 | return 1; |
1043 | 1048 | } |
1044 | - addr = (char *)ep->data; | |
1049 | + ptr = (char *)ep->data; | |
1045 | 1050 | } |
1046 | 1051 | |
1047 | - if (himport_r(&env_htab, addr, size, sep, del ? 0 : H_NOCLEAR, | |
1048 | - 0, NULL) == 0) { | |
1052 | + if (himport_r(&env_htab, ptr, size, sep, del ? 0 : H_NOCLEAR, 0, | |
1053 | + NULL) == 0) { | |
1049 | 1054 | error("Environment import failed: errno = %d\n", errno); |
1050 | 1055 | return 1; |
1051 | 1056 | } |