1 /* SPDX-License-Identifier: GPL-2.0-or-later */
4 * Infineon XMC1000 flash sectors erase
6 * Copyright (c) 2016 Andreas Färber
8 * Based on XMC1100 AA-Step Reference Manual
13 #define DUMMY_VALUE 0x42
15 .macro erase_page, nvmbase, addr, tmp, tmp2
17 movs \tmp, #DUMMY_VALUE
20 busy_wait \nvmbase, \tmp, \tmp2
25 .macro erase, nvmbase, addr, end, tmp, tmp2
27 movs \tmp, #NVMPROG_ACTION_PAGE_ERASE_CONTINUOUS
28 strh \tmp, [\nvmbase, #NVMPROG]
30 erase_page \nvmbase, \addr, \tmp, \tmp2
32 movs \tmp, #(NVM_PAGE_SIZE - 1)
34 add \addr, \addr, \tmp
38 movs \tmp, #NVMPROG_ACTION_IDLE
39 strh \tmp, [\nvmbase, #NVMPROG]
46 * r1 = e.g. 0x10001000
47 * r2 = e.g. 0x10011000
48 * NVMPROG.ACTION = 0x00
51 erase r0, r1, r2, r3, r4