-
- int retval;
- int fast_check=0;
- working_area_t *erase_check_algorithm;
-#if 0
- /* FIX! doesn't work yet... */
- /*
- char test(char *a, int len, char t)
- {
- int i=0;
-
- for (i=0; i<len; i++)
- {
- t&=a[i];
-
- }
- }
-
- $ arm-elf-gcc -c -mthumb -O3 test.c
-
- $ arm-elf-objdump --disassemble test.o
-
- test.o: file format elf32-littlearm
-
- Disassembly of section .text:
-
- 00000000 <test>:
- 0: b510 push {r4, lr}
- 2: 0612 lsl r2, r2, #24
- 4: 1c04 mov r4, r0 (add r4, r0, #0)
- 6: 0e10 lsr r0, r2, #24
- 8: 2200 mov r2, #0
- a: 2900 cmp r1, #0
- c: dd04 ble 18 <test+0x18>
- e: 5ca3 ldrb r3, [r4, r2]
- 10: 3201 add r2, #1
- 12: 4018 and r0, r3
- 14: 428a cmp r2, r1
- 16: dbfa blt e <test+0xe>
- 18: bd10 pop {r4, pc}
- 1a: 46c0 nop (mov r8, r8)
-
-
- */
- u16 erase_check_code[] =
- {
- 0x0612,// lsl r2, r2, #24
- 0x1c04,// mov r4, r0 (add r4, r0, #0)
- 0x0e10,// lsr r0, r2, #24
- 0x2200,// mov r2, #0
- 0x2900,// cmp r1, #0
- 0xdd04,// ble 18 <test+0x18>
- 0x5ca3,// ldrb r3, [r4, r2]
- 0x3201,// add r2, #1
- 0x4018,// and r0, r3
- 0x428a,// cmp r2, r1
- 0xdbfa,// blt e <test+0xe>
- 0x46c0,// nop (mov r8, r8)
-
- };
-
-
-
- /* make sure we have a working area */
- if (target_alloc_working_area(target, ((sizeof(erase_check_code)+3)/4)*4, &erase_check_algorithm) != ERROR_OK)
- {
- erase_check_algorithm = NULL;
- }
-
- if (erase_check_algorithm)
- {
- u8 erase_check_code_buf[((sizeof(erase_check_code)+3)/4)*4];
- LOG_DEBUG("Running fast flash erase check");
-
- for (i = 0; i < sizeof(erase_check_code)/sizeof(*erase_check_code); i++)
- target_buffer_set_u16(target, erase_check_code_buf + (i*2), erase_check_code[i]);
-
- /* write algorithm code to working area */
- if ((retval=target->type->write_memory(target, erase_check_algorithm->address, 2, sizeof(erase_check_code)/sizeof(*erase_check_code), erase_check_code_buf))==ERROR_OK)