diff options
author | Øyvind Harboe <oyvind.harboe@zylin.com> | 2009-10-12 15:13:44 +0200 |
---|---|---|
committer | Øyvind Harboe <oyvind.harboe@zylin.com> | 2009-10-12 15:13:44 +0200 |
commit | 23c629a85eea7b927a179626e8aa377f63734e46 (patch) | |
tree | e84172797edc255a9fa938594710dc804ff21bbf | |
parent | 407061eaa6fb620778ff14cc2aa5d3ffd019d05e (diff) | |
download | riscv-openocd-23c629a85eea7b927a179626e8aa377f63734e46.zip riscv-openocd-23c629a85eea7b927a179626e8aa377f63734e46.tar.gz riscv-openocd-23c629a85eea7b927a179626e8aa377f63734e46.tar.bz2 |
arm11 burst writes are now only enabled for writes larger than 1 word. Single word writes are frequently used from reset init scripts to non-memory peripherals.
-rw-r--r-- | doc/openocd.texi | 6 | ||||
-rw-r--r-- | src/target/arm11.c | 13 |
2 files changed, 16 insertions, 3 deletions
diff --git a/doc/openocd.texi b/doc/openocd.texi index ddc0cfd..479aa17 100644 --- a/doc/openocd.texi +++ b/doc/openocd.texi @@ -5737,7 +5737,11 @@ one bit in the encoding, effecively a fifth parameter.) @deffn Command {arm11 memwrite burst} [value] Displays the value of the memwrite burst-enable flag, -which is enabled by default. +which is enabled by default. Burst writes are only used +for memory writes larger than 1 word. Single word writes +are likely to be from reset init scripts and those writes +are often to non-memory locations which could easily have +many wait states, which could easily break burst writes. If @var{value} is defined, first assigns that. @end deffn diff --git a/src/target/arm11.c b/src/target/arm11.c index 16c8dd3..f7265da 100644 --- a/src/target/arm11.c +++ b/src/target/arm11.c @@ -1408,6 +1408,15 @@ int arm11_write_memory_inner(struct target_s *target, uint32_t address, uint32_t if (retval != ERROR_OK) return retval; + /* burst writes are not used for single words as those may well be + * reset init script writes. + * + * The other advantage is that as burst writes are default, we'll + * now exercise both burst and non-burst code paths with the + * default settings, increasing code coverage. + */ + bool burst = arm11_config_memwrite_burst && (count > 1); + switch (size) { case 1: @@ -1463,7 +1472,7 @@ int arm11_write_memory_inner(struct target_s *target, uint32_t address, uint32_t /** \todo TODO: buffer cast to uint32_t* causes alignment warnings */ uint32_t *words = (uint32_t*)buffer; - if (!arm11_config_memwrite_burst) + if (!burst) { /* STC p14,c5,[R0],#4 */ /* STC p14,c5,[R0]*/ @@ -1501,7 +1510,7 @@ int arm11_write_memory_inner(struct target_s *target, uint32_t address, uint32_t (unsigned) (address + size * count), (unsigned) r0); - if (arm11_config_memwrite_burst) + if (burst) LOG_ERROR("use 'arm11 memwrite burst disable' to disable fast burst mode"); if (arm11_config_memwrite_error_fatal) |