summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Brownell <dbrownell@users.sourceforge.net>2009-11-27 18:40:37 -0800
committerDavid Brownell <dbrownell@users.sourceforge.net>2009-11-27 18:40:37 -0800
commit4d2750e571b6a3f700cd95542a4bb5c7949e476c (patch)
tree8d9128f2ab5fb8281526baa6d7c9a168875e4f89
parent77aa7ca8d65ac5dc7b46ad9ef79e3f6aed9b4d0e (diff)
downloadopenocd_libswd-4d2750e571b6a3f700cd95542a4bb5c7949e476c.tar.gz
openocd_libswd-4d2750e571b6a3f700cd95542a4bb5c7949e476c.tar.bz2
openocd_libswd-4d2750e571b6a3f700cd95542a4bb5c7949e476c.tar.xz
openocd_libswd-4d2750e571b6a3f700cd95542a4bb5c7949e476c.zip
ARM11: write_memory() avoids increment check
When writing to a chip's "reset yourself" register, the ARM11 code was reporting a spurious failure. Just don't bother checking for correctly incremented pointers given single-unit writes ... it's a bit faster that way too. (Reads should likely do the same thing. For that matter, such checks are usually just a waste...) Shrink an overlong parameter name, and associated lines'o'code. Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
-rw-r--r--src/target/arm11.c28
1 files changed, 19 insertions, 9 deletions
diff --git a/src/target/arm11.c b/src/target/arm11.c
index 7c6d39c9..daba3b84 100644
--- a/src/target/arm11.c
+++ b/src/target/arm11.c
@@ -989,13 +989,14 @@ static int arm11_read_memory(struct target *target, uint32_t address, uint32_t s
}
/*
-* arm11_config_memrw_no_increment - in the future we may want to be able
+* no_increment - in the future we may want to be able
* to read/write a range of data to a "port". a "port" is an action on
* read memory address for some peripheral.
*/
static int arm11_write_memory_inner(struct target *target,
- uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer,
- bool arm11_config_memrw_no_increment)
+ uint32_t address, uint32_t size,
+ uint32_t count, uint8_t *buffer,
+ bool no_increment)
{
int retval;
@@ -1043,7 +1044,9 @@ static int arm11_write_memory_inner(struct target *target,
/* strb r1, [r0], #1 */
/* strb r1, [r0] */
retval = arm11_run_instr_no_data1(arm11,
- !arm11_config_memrw_no_increment ? 0xe4c01001 : 0xe5c01000);
+ !no_increment
+ ? 0xe4c01001
+ : 0xe5c01000);
if (retval != ERROR_OK)
return retval;
}
@@ -1068,7 +1071,9 @@ static int arm11_write_memory_inner(struct target *target,
/* strh r1, [r0], #2 */
/* strh r1, [r0] */
retval = arm11_run_instr_no_data1(arm11,
- !arm11_config_memrw_no_increment ? 0xe0c010b2 : 0xe1c010b0);
+ !no_increment
+ ? 0xe0c010b2
+ : 0xe1c010b0);
if (retval != ERROR_OK)
return retval;
}
@@ -1077,7 +1082,7 @@ static int arm11_write_memory_inner(struct target *target,
}
case 4: {
- uint32_t instr = !arm11_config_memrw_no_increment ? 0xeca05e01 : 0xed805e00;
+ uint32_t instr = !no_increment ? 0xeca05e01 : 0xed805e00;
/** \todo TODO: buffer cast to uint32_t* causes alignment warnings */
uint32_t *words = (uint32_t*)buffer;
@@ -1104,7 +1109,7 @@ static int arm11_write_memory_inner(struct target *target,
}
/* r0 verification */
- if (!arm11_config_memrw_no_increment)
+ if (!no_increment)
{
uint32_t r0;
@@ -1132,9 +1137,14 @@ static int arm11_write_memory_inner(struct target *target,
}
static int arm11_write_memory(struct target *target,
- uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer)
+ uint32_t address, uint32_t size,
+ uint32_t count, uint8_t *buffer)
{
- return arm11_write_memory_inner(target, address, size, count, buffer, false);
+ /* pointer increment matters only for multi-unit writes ...
+ * not e.g. to a "reset the chip" controller.
+ */
+ return arm11_write_memory_inner(target, address, size,
+ count, buffer, count == 1);
}
/* write target memory in multiples of 4 byte, optimized for writing large quantities of data */