target/xtensa: avoid IHI for writes to non-executable memory
[openocd.git] / contrib / loaders / flash / fm4 / write.S
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2
3 /*
4 * Spansion FM4 flash write algorithm
5 *
6 * Copyright (c) 2015 Andreas Färber
7 *
8 * Based on S6E2CC_MN709-00007 for S6E2CC/C5/C4/C3/C2/C1 series
9 */
10
11 #include "fm4.h"
12
13 #define RESULT_OKAY 0
14 #define RESULT_NONE 1
15 #define RESULT_TIMEOUT 2
16
17 .macro busy_wait, res, addr, data, tmp1, tmp2, tmp3
18
19 ldrb \tmp1, [\addr] /* ignore */
20 and \tmp2, \data, #FLASH_DPOL
21 1001:
22 ldrb \tmp1, [\addr]
23 and \tmp3, \tmp1, #FLASH_DPOL
24 cmp \tmp3, \tmp2
25 beq 1010f
26
27 and \tmp3, \tmp1, #FLASH_TLOV
28 cmp \tmp3, #0
29 beq 1001b
30
31 ldrb \tmp1, [\addr]
32 and \tmp3, \tmp1, #FLASH_DPOL
33 cmp \tmp3, \tmp2
34 beq 1010f
35
36 mov \res, #RESULT_TIMEOUT
37 bkpt #0
38 1010:
39 .endm
40
41
42 .macro write_one, res, cmdseqaddr1, cmdseqaddr2, pa, pd, tmp1, tmp2, tmp3
43
44 mov \tmp1, #0xAA
45 strh \tmp1, [\cmdseqaddr1]
46 mov \tmp1, #0x55
47 strh \tmp1, [\cmdseqaddr2]
48 mov \tmp1, #0xA0
49 strh \tmp1, [\cmdseqaddr1]
50 strh \pd, [\pa]
51
52 busy_wait \res, \pa, \pd, \tmp1, \tmp2, \tmp3
53
54 .endm
55
56
57 .macro write, cmdseqaddr1, cmdseqaddr2, dest, src, cnt, res, tmp1, tmp2, tmp3, tmp4
58
59 mov \res, #RESULT_NONE
60 2001:
61 cbz \cnt, 2010f
62
63 ldrh \tmp1, [\src]
64 write_one \res, \cmdseqaddr1, \cmdseqaddr2, \dest, \tmp1, \tmp2, \tmp3, \tmp4
65
66 sub \cnt, \cnt, #1
67 add \dest, \dest, #2
68 add \src, \src, #2
69 b 2001b
70 2010:
71 mov \res, #RESULT_OKAY
72 .endm
73
74
75 /* r0 = 0xAA8
76 * r1 = 0x554
77 * r2 = dest
78 * r3 = src
79 * r4 = cnt
80 * r5 = result
81 */
82 write:
83 write r0, r1, r2, r3, r4, r5, r6, r7, r8, r9
84
85 bkpt #0
86
87 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)