flash: New Spansion FM4 flash driver
[openocd.git] / contrib / loaders / flash / fm4 / erase.S
1 /*
2 * Spansion FM4 flash sector erase algorithm
3 *
4 * Copyright (c) 2015 Andreas Färber
5 *
6 * Based on S6E2CC_MN709-00007 for S6E2CC/C5/C4/C3/C2/C1 series
7 */
8
9 #include "fm4.h"
10
11 #define RESULT_OKAY 0
12 #define RESULT_NONE 1
13 #define RESULT_TIMEOUT 2
14
15 .macro busy_wait, res, addr, tmp1, tmp2, tmp3
16
17 ldrb \tmp1, [\addr] /* ignore */
18 1001:
19 ldrb \tmp1, [\addr]
20 ldrb \tmp2, [\addr]
21
22 and \tmp3, \tmp1, #FLASH_TOGG
23 and \tmp2, \tmp2, #FLASH_TOGG
24 cmp \tmp3, \tmp2
25 beq 1010f
26
27 and \tmp2, \tmp1, #FLASH_TLOV
28 cmp \tmp2, #0
29 beq 1001b
30
31 ldrb \tmp1, [\addr]
32 ldrb \tmp2, [\addr]
33
34 and \tmp3, \tmp1, #FLASH_TOGG
35 and \tmp2, \tmp2, #FLASH_TOGG
36 cmp \tmp3, \tmp2
37 beq 1010f
38
39 mov \res, #RESULT_TIMEOUT
40 bkpt #0
41 1010:
42 mov \res, #RESULT_OKAY
43
44 .endm
45
46
47 .macro erase, cmdseqaddr1, cmdseqaddr2, sa, res, tmp1, tmp2, tmp3
48
49 mov \res, #RESULT_NONE
50
51 mov \tmp1, #0xAA
52 strh \tmp1, [\cmdseqaddr1]
53 mov \tmp2, #0x55
54 strh \tmp2, [\cmdseqaddr2]
55 mov \tmp3, #0x80
56 strh \tmp3, [\cmdseqaddr1]
57 strh \tmp1, [\cmdseqaddr1]
58 strh \tmp2, [\cmdseqaddr2]
59 mov \tmp3, #0x30
60 strh \tmp3, [\sa]
61
62 busy_wait \res, \sa, \tmp1, \tmp2, \tmp3
63
64 .endm
65
66
67 /* r0 = 0xAA8
68 * r1 = 0x554
69 * r2 = SA
70 * r3 = result
71 */
72 erase:
73 erase r0, r1, r2, r3, r4, r5, r6
74
75 bkpt #0
76
77 data:

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)