ARM: memory utils aren't ARM7/ARM9 dependent
authorDavid Brownell <dbrownell@users.sourceforge.net>
Sun, 15 Nov 2009 18:35:34 +0000 (10:35 -0800)
committerDavid Brownell <dbrownell@users.sourceforge.net>
Sun, 15 Nov 2009 18:35:34 +0000 (10:35 -0800)
The arm7_9_checksum_memory() and arm7_9_blank_check_memory()
routines are not actually specific to the ARM7 and ARM9 core
generations ... they can work for any core which can run
algorithms using basic ARM (not Thumb) instructions.

Rename them; move the declarations to a more generic site;
likewise move the code (and tidy it a bit in the process).

NOTE:  the blank_check() method falsely returned a success
status (0) on one error path, when the algorithm failed.
Fixed this bug.

Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
15 files changed:
src/target/arm720t.c
src/target/arm7_9_common.c
src/target/arm7_9_common.h
src/target/arm7tdmi.c
src/target/arm920t.c
src/target/arm926ejs.c
src/target/arm966e.c
src/target/arm9tdmi.c
src/target/armv4_5.c
src/target/armv4_5.h
src/target/cortex_a8.c
src/target/cortex_a8.h
src/target/fa526.c
src/target/feroceon.c
src/target/xscale.c

index eb66b120c2c358e1cd3eb9b49960a84bf0e748d1..7bfb97dce38e894f25a7a69c2da30fc58dbe6fbe 100644 (file)
@@ -535,8 +535,9 @@ struct target_type arm720t_target =
        .virt2phys = arm720_virt2phys,
 
        .bulk_write_memory = arm7_9_bulk_write_memory,
-       .checksum_memory = arm7_9_checksum_memory,
-       .blank_check_memory = arm7_9_blank_check_memory,
+
+       .checksum_memory = arm_checksum_memory,
+       .blank_check_memory = arm_blank_check_memory,
 
        .run_algorithm = armv4_5_run_algorithm,
 
index 115a1d6bcb8ecef2377a89fac1b9b3072f1b102c..c35c8252b6a392e9913f86f8830765565d0ab36e 100644 (file)
@@ -2706,156 +2706,6 @@ int arm7_9_bulk_write_memory(struct target *target, uint32_t address, uint32_t c
        return retval;
 }
 
-int arm7_9_checksum_memory(struct target *target, uint32_t address, uint32_t count, uint32_t* checksum)
-{
-       struct working_area *crc_algorithm;
-       struct armv4_5_algorithm armv4_5_info;
-       struct reg_param reg_params[2];
-       int retval;
-
-       static const uint32_t arm7_9_crc_code[] = {
-               0xE1A02000,                             /* mov          r2, r0 */
-               0xE3E00000,                             /* mov          r0, #0xffffffff */
-               0xE1A03001,                             /* mov          r3, r1 */
-               0xE3A04000,                             /* mov          r4, #0 */
-               0xEA00000B,                             /* b            ncomp */
-                                                               /* nbyte: */
-               0xE7D21004,                             /* ldrb r1, [r2, r4] */
-               0xE59F7030,                             /* ldr          r7, CRC32XOR */
-               0xE0200C01,                             /* eor          r0, r0, r1, asl 24 */
-               0xE3A05000,                             /* mov          r5, #0 */
-                                                               /* loop: */
-               0xE3500000,                             /* cmp          r0, #0 */
-               0xE1A06080,                             /* mov          r6, r0, asl #1 */
-               0xE2855001,                             /* add          r5, r5, #1 */
-               0xE1A00006,                             /* mov          r0, r6 */
-               0xB0260007,                             /* eorlt        r0, r6, r7 */
-               0xE3550008,                             /* cmp          r5, #8 */
-               0x1AFFFFF8,                             /* bne          loop */
-               0xE2844001,                             /* add          r4, r4, #1 */
-                                                               /* ncomp: */
-               0xE1540003,                             /* cmp          r4, r3 */
-               0x1AFFFFF1,                             /* bne          nbyte */
-                                                               /* end: */
-               0xEAFFFFFE,                             /* b            end */
-               0x04C11DB7                              /* CRC32XOR:    .word 0x04C11DB7 */
-       };
-
-       uint32_t i;
-
-       if (target_alloc_working_area(target, sizeof(arm7_9_crc_code), &crc_algorithm) != ERROR_OK)
-       {
-               return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
-       }
-
-       /* convert flash writing code into a buffer in target endianness */
-       for (i = 0; i < (sizeof(arm7_9_crc_code)/sizeof(uint32_t)); i++)
-       {
-               if ((retval = target_write_u32(target, crc_algorithm->address + i*sizeof(uint32_t), arm7_9_crc_code[i])) != ERROR_OK)
-               {
-                       return retval;
-               }
-       }
-
-       armv4_5_info.common_magic = ARMV4_5_COMMON_MAGIC;
-       armv4_5_info.core_mode = ARMV4_5_MODE_SVC;
-       armv4_5_info.core_state = ARMV4_5_STATE_ARM;
-
-       init_reg_param(&reg_params[0], "r0", 32, PARAM_IN_OUT);
-       init_reg_param(&reg_params[1], "r1", 32, PARAM_OUT);
-
-       buf_set_u32(reg_params[0].value, 0, 32, address);
-       buf_set_u32(reg_params[1].value, 0, 32, count);
-
-       /* 20 second timeout/megabyte */
-       int timeout = 20000 * (1 + (count / (1024*1024)));
-
-       if ((retval = target_run_algorithm(target, 0, NULL, 2, reg_params,
-               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(&reg_params[0]);
-               destroy_reg_param(&reg_params[1]);
-               target_free_working_area(target, crc_algorithm);
-               return retval;
-       }
-
-       *checksum = buf_get_u32(reg_params[0].value, 0, 32);
-
-       destroy_reg_param(&reg_params[0]);
-       destroy_reg_param(&reg_params[1]);
-
-       target_free_working_area(target, crc_algorithm);
-
-       return ERROR_OK;
-}
-
-int arm7_9_blank_check_memory(struct target *target, uint32_t address, uint32_t count, uint32_t* blank)
-{
-       struct working_area *erase_check_algorithm;
-       struct reg_param reg_params[3];
-       struct armv4_5_algorithm armv4_5_info;
-       int retval;
-       uint32_t i;
-
-       static const uint32_t erase_check_code[] =
-       {
-               /* loop: */
-               0xe4d03001,             /* ldrb r3, [r0], #1 */
-               0xe0022003,             /* and r2, r2, r3    */
-               0xe2511001,             /* subs r1, r1, #1   */
-               0x1afffffb,             /* bne loop          */
-               /* end: */
-               0xeafffffe              /* b end             */
-       };
-
-       /* make sure we have a working area */
-       if (target_alloc_working_area(target, sizeof(erase_check_code), &erase_check_algorithm) != ERROR_OK)
-       {
-               return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
-       }
-
-       /* convert flash writing code into a buffer in target endianness */
-       for (i = 0; i < (sizeof(erase_check_code)/sizeof(uint32_t)); i++)
-               if ((retval = target_write_u32(target, erase_check_algorithm->address + i*sizeof(uint32_t), erase_check_code[i])) != ERROR_OK)
-               {
-                       return retval;
-               }
-
-       armv4_5_info.common_magic = ARMV4_5_COMMON_MAGIC;
-       armv4_5_info.core_mode = ARMV4_5_MODE_SVC;
-       armv4_5_info.core_state = ARMV4_5_STATE_ARM;
-
-       init_reg_param(&reg_params[0], "r0", 32, PARAM_OUT);
-       buf_set_u32(reg_params[0].value, 0, 32, address);
-
-       init_reg_param(&reg_params[1], "r1", 32, PARAM_OUT);
-       buf_set_u32(reg_params[1].value, 0, 32, count);
-
-       init_reg_param(&reg_params[2], "r2", 32, PARAM_IN_OUT);
-       buf_set_u32(reg_params[2].value, 0, 32, 0xff);
-
-       if ((retval = target_run_algorithm(target, 0, NULL, 3, reg_params,
-                       erase_check_algorithm->address, erase_check_algorithm->address + (sizeof(erase_check_code) - 4), 10000, &armv4_5_info)) != ERROR_OK)
-       {
-               destroy_reg_param(&reg_params[0]);
-               destroy_reg_param(&reg_params[1]);
-               destroy_reg_param(&reg_params[2]);
-               target_free_working_area(target, erase_check_algorithm);
-               return 0;
-       }
-
-       *blank = buf_get_u32(reg_params[2].value, 0, 32);
-
-       destroy_reg_param(&reg_params[0]);
-       destroy_reg_param(&reg_params[1]);
-       destroy_reg_param(&reg_params[2]);
-
-       target_free_working_area(target, erase_check_algorithm);
-
-       return ERROR_OK;
-}
-
 /**
  * Perform per-target setup that requires JTAG access.
  */
index bbe95ca235a46ff7eb1cfc2e2ed3e1ecaf38e67a..d70bae265fad931c5edd61d023e81ff839203624 100644 (file)
@@ -143,8 +143,6 @@ int arm7_9_read_core_reg(struct target *target, int num, enum armv4_5_mode mode)
 int arm7_9_read_memory(struct target *target, uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer);
 int arm7_9_write_memory(struct target *target, uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer);
 int arm7_9_bulk_write_memory(struct target *target, uint32_t address, uint32_t count, uint8_t *buffer);
-int arm7_9_checksum_memory(struct target *target, uint32_t address, uint32_t count, uint32_t* checksum);
-int arm7_9_blank_check_memory(struct target *target, uint32_t address, uint32_t count, uint32_t* blank);
 
 int arm7_9_run_algorithm(struct target *target, int num_mem_params, struct mem_param *mem_params, int num_reg_prams, struct reg_param *reg_param, uint32_t entry_point, void *arch_info);
 
index 8be8a125e475868c85c7515e36d4f8fae1caf07e..51fbddfe9a7d094e542f1103ea246ee41559779d 100644 (file)
@@ -737,8 +737,9 @@ struct target_type arm7tdmi_target =
        .read_memory = arm7_9_read_memory,
        .write_memory = arm7_9_write_memory,
        .bulk_write_memory = arm7_9_bulk_write_memory,
-       .checksum_memory = arm7_9_checksum_memory,
-       .blank_check_memory = arm7_9_blank_check_memory,
+
+       .checksum_memory = arm_checksum_memory,
+       .blank_check_memory = arm_blank_check_memory,
 
        .run_algorithm = armv4_5_run_algorithm,
 
index 9aa165c7b0aeb2cb4f32a426a19d6ac6a2f508bd..fd61020de4bba9eab04cdd83183eff0471c3594f 100644 (file)
@@ -1407,8 +1407,9 @@ struct target_type arm920t_target =
        .virt2phys = arm920_virt2phys,
 
        .bulk_write_memory = arm7_9_bulk_write_memory,
-       .checksum_memory = arm7_9_checksum_memory,
-       .blank_check_memory = arm7_9_blank_check_memory,
+
+       .checksum_memory = arm_checksum_memory,
+       .blank_check_memory = arm_blank_check_memory,
 
        .run_algorithm = armv4_5_run_algorithm,
 
index 51b241a597b381bd5a9e3261d271bef0f32739cf..00b78652b99f267db5fd757953b9a2eac2300207 100644 (file)
@@ -864,8 +864,9 @@ struct target_type arm926ejs_target =
        .read_memory = arm7_9_read_memory,
        .write_memory = arm926ejs_write_memory,
        .bulk_write_memory = arm7_9_bulk_write_memory,
-       .checksum_memory = arm7_9_checksum_memory,
-       .blank_check_memory = arm7_9_blank_check_memory,
+
+       .checksum_memory = arm_checksum_memory,
+       .blank_check_memory = arm_blank_check_memory,
 
        .run_algorithm = armv4_5_run_algorithm,
 
index b3d8e158553a1c5b3d69e369798adc05c20dd33c..3b85a5cd8689e71d32f9d3889b64a99b4a1c8b1a 100644 (file)
@@ -261,8 +261,9 @@ struct target_type arm966e_target =
        .read_memory = arm7_9_read_memory,
        .write_memory = arm7_9_write_memory,
        .bulk_write_memory = arm7_9_bulk_write_memory,
-       .checksum_memory = arm7_9_checksum_memory,
-       .blank_check_memory = arm7_9_blank_check_memory,
+
+       .checksum_memory = arm_checksum_memory,
+       .blank_check_memory = arm_blank_check_memory,
 
        .run_algorithm = armv4_5_run_algorithm,
 
index 44a978ad58f5037cbc3cc6805c12e06451548f0f..1b7b64529eb878fde6e93b5620175473c506779f 100644 (file)
@@ -938,8 +938,9 @@ struct target_type arm9tdmi_target =
        .read_memory = arm7_9_read_memory,
        .write_memory = arm7_9_write_memory,
        .bulk_write_memory = arm7_9_bulk_write_memory,
-       .checksum_memory = arm7_9_checksum_memory,
-       .blank_check_memory = arm7_9_blank_check_memory,
+
+       .checksum_memory = arm_checksum_memory,
+       .blank_check_memory = arm_blank_check_memory,
 
        .run_algorithm = armv4_5_run_algorithm,
 
index aa05e83158c64a3813b3bd495dbbd643faf2eb76..f9b22b940e374c5a111aa97c442c3a8f6dae0269 100644 (file)
@@ -707,6 +707,176 @@ int armv4_5_run_algorithm(struct target *target, int num_mem_params, struct mem_
        return armv4_5_run_algorithm_inner(target, num_mem_params, mem_params, num_reg_params, reg_params, entry_point, exit_point, timeout_ms, arch_info, armv4_5_run_algorithm_completion);
 }
 
+/**
+ * Runs ARM code in the target to calculate a CRC32 checksum.
+ *
+ * \todo On ARMv5+, rely on BKPT termination for reduced overhead.
+ */
+int arm_checksum_memory(struct target *target,
+               uint32_t address, uint32_t count, uint32_t *checksum)
+{
+       struct working_area *crc_algorithm;
+       struct armv4_5_algorithm armv4_5_info;
+       struct reg_param reg_params[2];
+       int retval;
+       uint32_t i;
+
+       static const uint32_t arm_crc_code[] = {
+               0xE1A02000,             /* mov          r2, r0 */
+               0xE3E00000,             /* mov          r0, #0xffffffff */
+               0xE1A03001,             /* mov          r3, r1 */
+               0xE3A04000,             /* mov          r4, #0 */
+               0xEA00000B,             /* b            ncomp */
+               /* nbyte: */
+               0xE7D21004,             /* ldrb r1, [r2, r4] */
+               0xE59F7030,             /* ldr          r7, CRC32XOR */
+               0xE0200C01,             /* eor          r0, r0, r1, asl 24 */
+               0xE3A05000,             /* mov          r5, #0 */
+               /* loop: */
+               0xE3500000,             /* cmp          r0, #0 */
+               0xE1A06080,             /* mov          r6, r0, asl #1 */
+               0xE2855001,             /* add          r5, r5, #1 */
+               0xE1A00006,             /* mov          r0, r6 */
+               0xB0260007,             /* eorlt        r0, r6, r7 */
+               0xE3550008,             /* cmp          r5, #8 */
+               0x1AFFFFF8,             /* bne          loop */
+               0xE2844001,             /* add          r4, r4, #1 */
+               /* ncomp: */
+               0xE1540003,             /* cmp          r4, r3 */
+               0x1AFFFFF1,             /* bne          nbyte */
+               /* end: */
+               0xEAFFFFFE,             /* b            end */
+               /* CRC32XOR: */
+               0x04C11DB7              /* .word 0x04C11DB7 */
+       };
+
+       retval = target_alloc_working_area(target,
+                       sizeof(arm_crc_code), &crc_algorithm);
+       if (retval != ERROR_OK)
+               return retval;
+
+       /* convert code into a buffer in target endianness */
+       for (i = 0; i < DIM(arm_crc_code); i++) {
+               retval = target_write_u32(target,
+                               crc_algorithm->address + i * sizeof(uint32_t),
+                               arm_crc_code[i]);
+               if (retval != ERROR_OK)
+                       return retval;
+       }
+
+       armv4_5_info.common_magic = ARMV4_5_COMMON_MAGIC;
+       armv4_5_info.core_mode = ARMV4_5_MODE_SVC;
+       armv4_5_info.core_state = ARMV4_5_STATE_ARM;
+
+       init_reg_param(&reg_params[0], "r0", 32, PARAM_IN_OUT);
+       init_reg_param(&reg_params[1], "r1", 32, PARAM_OUT);
+
+       buf_set_u32(reg_params[0].value, 0, 32, address);
+       buf_set_u32(reg_params[1].value, 0, 32, count);
+
+       /* 20 second timeout/megabyte */
+       int timeout = 20000 * (1 + (count / (1024 * 1024)));
+
+       retval = target_run_algorithm(target, 0, NULL, 2, reg_params,
+                       crc_algorithm->address,
+                       crc_algorithm->address + sizeof(arm_crc_code) - 8,
+                       timeout, &armv4_5_info);
+       if (retval != ERROR_OK) {
+               LOG_ERROR("error executing ARM crc algorithm");
+               destroy_reg_param(&reg_params[0]);
+               destroy_reg_param(&reg_params[1]);
+               target_free_working_area(target, crc_algorithm);
+               return retval;
+       }
+
+       *checksum = buf_get_u32(reg_params[0].value, 0, 32);
+
+       destroy_reg_param(&reg_params[0]);
+       destroy_reg_param(&reg_params[1]);
+
+       target_free_working_area(target, crc_algorithm);
+
+       return ERROR_OK;
+}
+
+/**
+ * Runs ARM code in the target to check whether a memory block holds
+ * all ones.  NOR flash which has been erased, and thus may be written,
+ * holds all ones.
+ *
+ * \todo On ARMv5+, rely on BKPT termination for reduced overhead.
+ */
+int arm_blank_check_memory(struct target *target,
+               uint32_t address, uint32_t count, uint32_t *blank)
+{
+       struct working_area *check_algorithm;
+       struct reg_param reg_params[3];
+       struct armv4_5_algorithm armv4_5_info;
+       int retval;
+       uint32_t i;
+
+       static const uint32_t check_code[] = {
+               /* loop: */
+               0xe4d03001,             /* ldrb r3, [r0], #1 */
+               0xe0022003,             /* and r2, r2, r3    */
+               0xe2511001,             /* subs r1, r1, #1   */
+               0x1afffffb,             /* bne loop          */
+               /* end: */
+               0xeafffffe              /* b end             */
+       };
+
+       /* make sure we have a working area */
+       retval = target_alloc_working_area(target,
+                       sizeof(check_code), &check_algorithm);
+       if (retval != ERROR_OK)
+               return retval;
+
+       /* convert code into a buffer in target endianness */
+       for (i = 0; i < DIM(check_code); i++) {
+               retval = target_write_u32(target,
+                               check_algorithm->address
+                                               + i * sizeof(uint32_t),
+                               check_code[i]);
+               if (retval != ERROR_OK)
+                       return retval;
+       }
+
+       armv4_5_info.common_magic = ARMV4_5_COMMON_MAGIC;
+       armv4_5_info.core_mode = ARMV4_5_MODE_SVC;
+       armv4_5_info.core_state = ARMV4_5_STATE_ARM;
+
+       init_reg_param(&reg_params[0], "r0", 32, PARAM_OUT);
+       buf_set_u32(reg_params[0].value, 0, 32, address);
+
+       init_reg_param(&reg_params[1], "r1", 32, PARAM_OUT);
+       buf_set_u32(reg_params[1].value, 0, 32, count);
+
+       init_reg_param(&reg_params[2], "r2", 32, PARAM_IN_OUT);
+       buf_set_u32(reg_params[2].value, 0, 32, 0xff);
+
+       retval = target_run_algorithm(target, 0, NULL, 3, reg_params,
+                       check_algorithm->address,
+                       check_algorithm->address + sizeof(check_code) - 4,
+                       10000, &armv4_5_info);
+       if (retval != ERROR_OK) {
+               destroy_reg_param(&reg_params[0]);
+               destroy_reg_param(&reg_params[1]);
+               destroy_reg_param(&reg_params[2]);
+               target_free_working_area(target, check_algorithm);
+               return retval;
+       }
+
+       *blank = buf_get_u32(reg_params[2].value, 0, 32);
+
+       destroy_reg_param(&reg_params[0]);
+       destroy_reg_param(&reg_params[1]);
+       destroy_reg_param(&reg_params[2]);
+
+       target_free_working_area(target, check_algorithm);
+
+       return ERROR_OK;
+}
+
 int armv4_5_init_arch_info(struct target *target, struct arm *armv4_5)
 {
        target->arch_info = armv4_5;
index 14dfa99e678a520f6f42b42182e760a05b6010e8..83b38b6510bcaba933db9f67f7ec82e06fce9ef5 100644 (file)
@@ -190,6 +190,12 @@ int armv4_5_run_algorithm(struct target *target,
 
 int armv4_5_invalidate_core_regs(struct target *target);
 
+int arm_checksum_memory(struct target *target,
+               uint32_t address, uint32_t count, uint32_t *checksum);
+int arm_blank_check_memory(struct target *target,
+               uint32_t address, uint32_t count, uint32_t *blank);
+
+
 /* ARM mode instructions
  */
 
@@ -369,7 +375,4 @@ static inline uint32_t mrc_opcode(int cpnum, uint32_t op1, uint32_t op2, uint32_
        return t;
 }
 
-
-
-
 #endif /* ARMV4_5_H */
index da5e84be4a694c9c9b357ee9a7f4ecc3eb995222..0d00b3aa783d58c0c5aba567643766e77ae7601d 100644 (file)
@@ -1590,8 +1590,9 @@ struct target_type cortexa8_target = {
        .read_memory = cortex_a8_read_memory,
        .write_memory = cortex_a8_write_memory,
        .bulk_write_memory = cortex_a8_bulk_write_memory,
-       .checksum_memory = arm7_9_checksum_memory,
-       .blank_check_memory = arm7_9_blank_check_memory,
+
+       .checksum_memory = arm_checksum_memory,
+       .blank_check_memory = arm_blank_check_memory,
 
        .run_algorithm = armv4_5_run_algorithm,
 
index e7ea6c756d7afef9c6664c19d413765e2db19e85..f11d9ddafcdc1ce8922fa9f356e47245264116aa 100644 (file)
@@ -32,7 +32,6 @@
 #include "register.h"
 #include "target.h"
 #include "armv7a.h"
-#include "arm7_9_common.h"
 
 extern char* cortex_a8_state_strings[];
 
index 9e7b00da8792523938b91ab485d79a193bd8b289..e7c1a2e64e01a77c496b15b2adce1d0cd8e3cad7 100644 (file)
@@ -380,8 +380,9 @@ struct target_type fa526_target =
        .read_memory = arm920t_read_memory,
        .write_memory = arm920t_write_memory,
        .bulk_write_memory = arm7_9_bulk_write_memory,
-       .checksum_memory = arm7_9_checksum_memory,
-       .blank_check_memory = arm7_9_blank_check_memory,
+
+       .checksum_memory = arm_checksum_memory,
+       .blank_check_memory = arm_blank_check_memory,
 
        .run_algorithm = armv4_5_run_algorithm,
 
index c029e44e69e088b2728d923e3c31e31ee841c6bd..03a5afcaefd32d25e6087aed8f892f206e5dfd75 100644 (file)
@@ -696,8 +696,9 @@ struct target_type feroceon_target =
        .read_memory = arm7_9_read_memory,
        .write_memory = arm926ejs_write_memory,
        .bulk_write_memory = feroceon_bulk_write_memory,
-       .checksum_memory = arm7_9_checksum_memory,
-       .blank_check_memory = arm7_9_blank_check_memory,
+
+       .checksum_memory = arm_checksum_memory,
+       .blank_check_memory = arm_blank_check_memory,
 
        .run_algorithm = armv4_5_run_algorithm,
 
@@ -734,8 +735,9 @@ struct target_type dragonite_target =
        .read_memory = arm7_9_read_memory,
        .write_memory = arm7_9_write_memory,
        .bulk_write_memory = feroceon_bulk_write_memory,
-       .checksum_memory = arm7_9_checksum_memory,
-       .blank_check_memory = arm7_9_blank_check_memory,
+
+       .checksum_memory = arm_checksum_memory,
+       .blank_check_memory = arm_blank_check_memory,
 
        .run_algorithm = armv4_5_run_algorithm,
 
index 10ccf5dd19a294229559990c347cf4a7b4abb9e6..0b5b26b3c795f87819a660eeeba884542bcd417e 100644 (file)
@@ -3626,8 +3626,9 @@ struct target_type xscale_target =
        .read_memory = xscale_read_memory,
        .write_memory = xscale_write_memory,
        .bulk_write_memory = xscale_bulk_write_memory,
-       .checksum_memory = arm7_9_checksum_memory,
-       .blank_check_memory = arm7_9_blank_check_memory,
+
+       .checksum_memory = arm_checksum_memory,
+       .blank_check_memory = arm_blank_check_memory,
 
        .run_algorithm = armv4_5_run_algorithm,
 

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)