]> git.sur5r.net Git - openocd/commitdiff
ARM11: write_memory() avoids increment check
authorDavid Brownell <dbrownell@users.sourceforge.net>
Sat, 28 Nov 2009 02:40:37 +0000 (18:40 -0800)
committerDavid Brownell <dbrownell@users.sourceforge.net>
Sat, 28 Nov 2009 02:40:37 +0000 (18:40 -0800)
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>
src/target/arm11.c

index 7c6d39c9d42123d9163856e831c3223923e08459..daba3b847cc4cfb88a0b1d36dda73e947179bb4c 100644 (file)
@@ -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 */