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(®_params[0]); -- 1.6.3.3
_______________________________________________ Openocd-development mailing list Openocd-development@lists.berlios.de https://lists.berlios.de/mailman/listinfo/openocd-development