diff options
author | David Brownell <dbrownell@users.sourceforge.net> | 2009-11-27 18:40:37 -0800 |
---|---|---|
committer | David Brownell <dbrownell@users.sourceforge.net> | 2009-11-27 18:40:37 -0800 |
commit | 4d2750e571b6a3f700cd95542a4bb5c7949e476c (patch) | |
tree | 8d9128f2ab5fb8281526baa6d7c9a168875e4f89 | |
parent | 77aa7ca8d65ac5dc7b46ad9ef79e3f6aed9b4d0e (diff) | |
download | openocd_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.c | 28 |
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 */ |