1 /* SPDX-License-Identifier: GPL-2.0-or-later */
4 * Infineon XMC1000 flash
6 * Copyright (c) 2016 Andreas Färber
8 * Based on XMC1100 AA-Step Reference Manual
17 #define NVMSTATUS 0x00
21 #define NVMSTATUS_BUSY (1 << 0)
22 #define NVMSTATUS_VERR_NOFAIL (0x0 << 2)
23 #define NVMSTATUS_VERR_MASK (0x3 << 2)
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
30 #define NVMCONF_HRLEV_NR (0x0 << 1)
31 #define NVMCONF_HRLEV_HRE (0x2 << 1)
32 #define NVMCONF_HRLEV_MASK (0x3 << 1)
34 #define NVM_WORD_SIZE 4
35 #define NVM_BLOCK_SIZE (4 * NVM_WORD_SIZE)
36 #define NVM_PAGE_SIZE (16 * NVM_BLOCK_SIZE)
38 .macro busy_wait, nvmbase, tmp, tmp2
40 ldrh \tmp, [\nvmbase, #NVMSTATUS]
41 movs \tmp2, #NVMSTATUS_BUSY
42 ands \tmp, \tmp, \tmp2