#include <hash.h>
 #include <sha1.h>
 #include <sha256.h>
+#include <asm/io.h>
 
 /*
  * These are the hash algorithms we support. Chips which support accelerated
                str_ptr = '\0';
                setenv(dest, str_output);
        } else {
-               u8 *ptr;
+               ulong addr;
+               void *buf;
 
-               ptr = (u8 *)simple_strtoul(dest, NULL, 16);
-               memcpy(ptr, sum, algo->digest_size);
+               addr = simple_strtoul(dest, NULL, 16);
+               buf = map_sysmem(addr, algo->digest_size);
+               memcpy(buf, sum, algo->digest_size);
+               unmap_sysmem(buf);
        }
 }
 
        }
 
        if (env_var) {
-               u8 *ptr;
+               ulong addr;
+               void *buf;
 
-               ptr = (u8 *)simple_strtoul(verify_str, NULL, 16);
-               memcpy(vsum, ptr, algo->digest_size);
+               addr = simple_strtoul(verify_str, NULL, 16);
+               buf = map_sysmem(addr, algo->digest_size);
+               memcpy(vsum, buf, algo->digest_size);
        } else {
                unsigned int i;
                char *vsum_str;
                struct hash_algo *algo;
                u8 output[HASH_MAX_DIGEST_SIZE];
                u8 vsum[HASH_MAX_DIGEST_SIZE];
+               void *buf;
 
                algo = find_hash_algo(algo_name);
                if (!algo) {
                        return 1;
                }
 
-               algo->hash_func_ws((const unsigned char *)addr, len, output,
-                                  algo->chunk_size);
+               buf = map_sysmem(addr, len);
+               algo->hash_func_ws(buf, len, output, algo->chunk_size);
+               unmap_sysmem(buf);
 
                /* Try to avoid code bloat when verify is not needed */
 #ifdef CONFIG_HASH_VERIFY