diff mbox

[U-Boot,v3,21/22] sandbox: Allow hash functions to work correctly

Message ID 1361763213-31183-22-git-send-email-sjg@chromium.org
State Accepted, archived
Delegated to: Tom Rini
Headers show

Commit Message

Simon Glass Feb. 25, 2013, 3:33 a.m. UTC
Use map_sysmem() so that hashing is possible on sandbox.

Signed-off-by: Simon Glass <sjg@chromium.org>
---
Changes in v3: None
Changes in v2:
- Rebase on top of earlier patches

 common/hash.c | 24 ++++++++++++++++--------
 1 file changed, 16 insertions(+), 8 deletions(-)
diff mbox

Patch

diff --git a/common/hash.c b/common/hash.c
index 2617316..d6f4aa1 100644
--- a/common/hash.c
+++ b/common/hash.c
@@ -28,6 +28,7 @@ 
 #include <hash.h>
 #include <sha1.h>
 #include <sha256.h>
+#include <asm/io.h>
 
 /*
  * These are the hash algorithms we support. Chips which support accelerated
@@ -117,10 +118,13 @@  static void store_result(struct hash_algo *algo, const u8 *sum,
 		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);
 	}
 }
 
@@ -154,10 +158,12 @@  static int parse_verify_sum(struct hash_algo *algo, char *verify_str, u8 *vsum,
 	}
 
 	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;
@@ -228,6 +234,7 @@  int hash_command(const char *algo_name, int flags, cmd_tbl_t *cmdtp, int flag,
 		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) {
@@ -241,8 +248,9 @@  int hash_command(const char *algo_name, int flags, cmd_tbl_t *cmdtp, int flag,
 			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