openocd: fix syntax of SPDX tags
[fw/openocd] / contrib / loaders / flash / xmc1xxx / erase.S
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2
3 /*
4  * Infineon XMC1000 flash sectors erase
5  *
6  * Copyright (c) 2016 Andreas Färber
7  *
8  * Based on XMC1100 AA-Step Reference Manual
9  */
10
11 #include "xmc1xxx.S"
12
13 #define DUMMY_VALUE 0x42
14
15         .macro erase_page, nvmbase, addr, tmp, tmp2
16
17         movs    \tmp, #DUMMY_VALUE
18         str     \tmp, [\addr]
19
20         busy_wait \nvmbase, \tmp, \tmp2
21
22         .endm
23
24
25         .macro erase, nvmbase, addr, end, tmp, tmp2
26
27         movs    \tmp, #NVMPROG_ACTION_PAGE_ERASE_CONTINUOUS
28         strh    \tmp, [\nvmbase, #NVMPROG]
29 2001:
30         erase_page \nvmbase, \addr, \tmp, \tmp2
31
32         movs    \tmp, #(NVM_PAGE_SIZE - 1)
33         adds    \tmp, \tmp, #1
34         add     \addr, \addr, \tmp
35         cmp     \addr, \end
36         blt     2001b
37
38         movs    \tmp, #NVMPROG_ACTION_IDLE
39         strh    \tmp, [\nvmbase, #NVMPROG]
40
41         .endm
42
43
44         /*
45          * r0 = 0x40050000
46          * r1 = e.g. 0x10001000
47          * r2 = e.g. 0x10011000
48          * NVMPROG.ACTION = 0x00
49          */
50 erase:
51         erase r0, r1, r2, r3, r4
52
53         bkpt    #0