openocd: fix syntax of SPDX tags
[fw/openocd] / contrib / loaders / flash / xmc1xxx / xmc1xxx.S
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2
3 /*
4  * Infineon XMC1000 flash
5  *
6  * Copyright (c) 2016 Andreas Färber
7  *
8  * Based on XMC1100 AA-Step Reference Manual
9  */
10
11         .text
12         .syntax unified
13         .cpu cortex-m0
14         .thumb
15         .thumb_func
16
17 #define NVMSTATUS       0x00
18 #define NVMPROG         0x04
19 #define NVMCONF         0x08
20
21 #define NVMSTATUS_BUSY          (1 << 0)
22 #define NVMSTATUS_VERR_NOFAIL   (0x0 << 2)
23 #define NVMSTATUS_VERR_MASK     (0x3 << 2)
24
25 #define NVMPROG_ACTION_IDLE                     0x00
26 #define NVMPROG_ACTION_WRITE_CONTINUOUS         0xA1
27 #define NVMPROG_ACTION_PAGE_ERASE_CONTINUOUS    0xA2
28 #define NVMPROG_ACTION_VERIFY_CONTINUOUS        0xE0
29
30 #define NVMCONF_HRLEV_NR        (0x0 << 1)
31 #define NVMCONF_HRLEV_HRE       (0x2 << 1)
32 #define NVMCONF_HRLEV_MASK      (0x3 << 1)
33
34 #define NVM_WORD_SIZE   4
35 #define NVM_BLOCK_SIZE  (4 * NVM_WORD_SIZE)
36 #define NVM_PAGE_SIZE   (16 * NVM_BLOCK_SIZE)
37
38         .macro busy_wait, nvmbase, tmp, tmp2
39 1:
40         ldrh    \tmp, [\nvmbase, #NVMSTATUS]
41         movs    \tmp2, #NVMSTATUS_BUSY
42         ands    \tmp, \tmp, \tmp2
43         cmp     \tmp, \tmp2
44         beq     1b
45
46         .endm