From 8d02927e9290d17e3189afb74ae5eff36c1ba9c2 Mon Sep 17 00:00:00 2001
From: Evan Hunter <ehunter@broadcom.com>
Date: Wed, 25 May 2011 17:10:40 +1000
Subject: [PATCH] Add verify_image_checksum command

---
 src/target/target.c |   27 +++++++++++++++++++++++----
 1 files changed, 23 insertions(+), 4 deletions(-)

diff --git a/src/target/target.c b/src/target/target.c
index 0343156..e976e51 100644
--- a/src/target/target.c
+++ b/src/target/target.c
@@ -2705,7 +2705,7 @@ COMMAND_HANDLER(handle_dump_image_command)
 	return retval;
 }
 
-static COMMAND_HELPER(handle_verify_image_command_internal, int verify)
+static COMMAND_HELPER(handle_verify_image_command_internal, int verify, int verify_checksum_only)
 {
 	uint8_t *buffer;
 	size_t buf_cnt;
@@ -2789,7 +2789,15 @@ static COMMAND_HELPER(handle_verify_image_command_internal, int verify)
 				break;
 			}
 
-			if (checksum != mem_checksum)
+			if ( ( checksum != mem_checksum ) && ( verify_checksum_only == 1 ) )
+			{
+				LOG_ERROR("checksum mismatch");
+				free(buffer);
+				retval = ERROR_FAIL;
+				goto done;
+			}
+
+			if ( checksum != mem_checksum )
 			{
 				/* failed crc checksum, fall back to a binary compare */
 				uint8_t *data;
@@ -2867,14 +2875,19 @@ done:
 	return retval;
 }
 
+COMMAND_HANDLER(handle_verify_image_checksum_command)
+{
+	return CALL_COMMAND_HANDLER(handle_verify_image_command_internal, 1, 1);
+}
+
 COMMAND_HANDLER(handle_verify_image_command)
 {
-	return CALL_COMMAND_HANDLER(handle_verify_image_command_internal, 1);
+	return CALL_COMMAND_HANDLER(handle_verify_image_command_internal, 1, 0);
 }
 
 COMMAND_HANDLER(handle_test_image_command)
 {
-	return CALL_COMMAND_HANDLER(handle_verify_image_command_internal, 0);
+	return CALL_COMMAND_HANDLER(handle_verify_image_command_internal, 0, 0);
 }
 
 static int handle_bp_command_list(struct command_context *cmd_ctx)
@@ -5472,6 +5485,12 @@ static const struct command_registration target_exec_command_handlers[] = {
 		.usage = "filename address size",
 	},
 	{
+		.name = "verify_image_checksum",
+		.handler = handle_verify_image_checksum_command,
+		.mode = COMMAND_EXEC,
+		.usage = "filename [offset [type]]",
+	},
+	{
 		.name = "verify_image",
 		.handler = handle_verify_image_command,
 		.mode = COMMAND_EXEC,
-- 
1.7.4.1

