flash: New Spansion FM4 flash driver
[openocd.git] / contrib / loaders / flash / fm4 / write.S
1 /*
2 * Spansion FM4 flash write 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, data, tmp1, tmp2, tmp3
16
17 ldrb \tmp1, [\addr] /* ignore */
18 and \tmp2, \data, #FLASH_DPOL
19 1001:
20 ldrb \tmp1, [\addr]
21 and \tmp3, \tmp1, #FLASH_DPOL
22 cmp \tmp3, \tmp2
23 beq 1010f
24
25 and \tmp3, \tmp1, #FLASH_TLOV
26 cmp \tmp3, #0
27 beq 1001b
28
29 ldrb \tmp1, [\addr]
30 and \tmp3, \tmp1, #FLASH_DPOL
31 cmp \tmp3, \tmp2
32 beq 1010f
33
34 mov \res, #RESULT_TIMEOUT
35 bkpt #0
36 1010:
37 .endm
38
39
40 .macro write_one, res, cmdseqaddr1, cmdseqaddr2, pa, pd, tmp1, tmp2, tmp3
41
42 mov \tmp1, #0xAA
43 strh \tmp1, [\cmdseqaddr1]
44 mov \tmp1, #0x55
45 strh \tmp1, [\cmdseqaddr2]
46 mov \tmp1, #0xA0
47 strh \tmp1, [\cmdseqaddr1]
48 strh \pd, [\pa]
49
50 busy_wait \res, \pa, \pd, \tmp1, \tmp2, \tmp3
51
52 .endm
53
54
55 .macro write, cmdseqaddr1, cmdseqaddr2, dest, src, cnt, res, tmp1, tmp2, tmp3, tmp4
56
57 mov \res, #RESULT_NONE
58 2001:
59 cbz \cnt, 2010f
60
61 ldrh \tmp1, [\src]
62 write_one \res, \cmdseqaddr1, \cmdseqaddr2, \dest, \tmp1, \tmp2, \tmp3, \tmp4
63
64 sub \cnt, \cnt, #1
65 add \dest, \dest, #2
66 add \src, \src, #2
67 b 2001b
68 2010:
69 mov \res, #RESULT_OKAY
70 .endm
71
72
73 /* r0 = 0xAA8
74 * r1 = 0x554
75 * r2 = dest
76 * r3 = src
77 * r4 = cnt
78 * r5 = result
79 */
80 write:
81 write r0, r1, r2, r3, r4, r5, r6, r7, r8, r9
82
83 bkpt #0
84
85 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)