Commit fd37dac9eb37b543fb1b82a733729514a67bd801

Authored by Simon Glass
1 parent 146b468eb0

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

... ... @@ -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 }