How's this?

(Confirmation that *this* patch fixes the problem is still missing...)



-- 
Øyvind Harboe
http://www.zylin.com/zy1000.html
ARM7 ARM9 ARM11 XScale Cortex
JTAG debugger and flash programmer
From 553e7bdd606ee0b7015e95f037b07e2dcddb375e Mon Sep 17 00:00:00 2001
From: =?utf-8?q?=C3=98yvind=20Harboe?= <oyvind.har...@zylin.com>
Date: Tue, 3 Nov 2009 15:38:09 +0100
Subject: [PATCH] target: 5 second timeout/megabyte for CRC check, 20 sec minimum
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit

There was a fixed 20 second timeout which is too little
for large, slow timeout checks.

Potential improvement would be to do CRC in smaller chunks
with smaller timeout. That way failure would be detected
sooner(tricky...).

Signed-off-by: Øyvind Harboe <oyvind.har...@zylin.com>
---
 src/target/arm7_9_common.c |   14 +++++++++++++-
 1 files changed, 13 insertions(+), 1 deletions(-)

diff --git a/src/target/arm7_9_common.c b/src/target/arm7_9_common.c
index 2b064f2..d6d5d6a 100644
--- a/src/target/arm7_9_common.c
+++ b/src/target/arm7_9_common.c
@@ -2821,8 +2821,20 @@ int arm7_9_checksum_memory(struct target_s *target, uint32_t address, uint32_t c
 	buf_set_u32(reg_params[0].value, 0, 32, address);
 	buf_set_u32(reg_params[1].value, 0, 32, count);
 
+	/* 5 second timeout/megabyte. This is a dubious assumption
+	   and it could be way of for low clock rate ARM's
+	   and obviously much to slow for faster ARM's. Could
+	   still result in false positives for timeouts. No
+	   simple, robust and obvious scheme to decide on timeout
+	   lengths was known as of time of writing. */
+	int timeout = 5000 * (1 + (count / (1024*1024)));
+	if (timeout < 5000)
+	{
+	  timeout = 20000; /* minimum 20 second timeout */
+	}
+
 	if ((retval = target_run_algorithm(target, 0, NULL, 2, reg_params,
-		crc_algorithm->address, crc_algorithm->address + (sizeof(arm7_9_crc_code) - 8), 20000, &armv4_5_info)) != ERROR_OK)
+		crc_algorithm->address, crc_algorithm->address + (sizeof(arm7_9_crc_code) - 8), timeout, &armv4_5_info)) != ERROR_OK)
 	{
 		LOG_ERROR("error executing arm7_9 crc algorithm");
 		destroy_reg_param(&reg_params[0]);
-- 
1.6.3.3

_______________________________________________
Openocd-development mailing list
Openocd-development@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/openocd-development

Reply via email to